Skip to contentSkip to conversation

hrtimer events are not properly added -- is this bug or feature?

Powertop Igor Zhbanov 2 participants 3 messages Jul 24, 2012 – Jul 31, 2012

lore
Share & tools
lore

Igor Zhbanov

author
#0 lore raw

Hello!

In the function start_process_measurement() in the file src/process/do_process.cpp events are added to perf_bundle:

		perf_events->add_event("irq:softirq_entry");
		perf_events->add_event("irq:softirq_exit");
		perf_events->add_event("timer:timer_expire_entry");
		perf_events->add_event("timer:timer_expire_exit");
		perf_events->add_event("hrtimer_expire_entry");		/* !!! */
		perf_events->add_event("hrtimer_expire_exit");		/* !!! */
		if (!perf_events->add_event("power:cpu_idle")){
			perf_events->add_event("power:power_start");
			perf_events->add_event("power:power_end");
		}

As you may see all events are prefixed with the subsystem name.
All but hrtimer_expire_entry and hrtimer_expire_exit. And without "timer:" prefix these events are never catched.

So I have added this prefix and see that events are intercepted as needed. But event parser complains about wrong event format:
unknown op '{'
failed to read event print fmt for hrtimer_expire_entry

It seems that event parser can't handle square bracket in print format for the event:
print fmt: "hrtimer=%p function=%pf now=%llu", REC->hrtimer, REC->function, (unsigned long long)(((ktime_t) { .tv64 = REC->now }).tv64)

So is the absence of "timer:" prefix a bug or a commenting of non-working case?

Thank you.

Signature · 9 lines
Best regards,
Igor Zhbanov,
Expert Software Engineer,
phone: +7 (495) 797 25 00 ext 3806
e-mail: i.zhbanov(a)samsung.com

ASWG, Moscow R&D center, Samsung Electronics
12 Dvintsev street, building 1
127018, Moscow, Russian Federation
#1 lore raw
Quoted 33 lines · Igor Zhbanov

Hello!

In the function start_process_measurement() in the file src/process/do_process.cpp
events are added to perf_bundle:

        perf_events->add_event("irq:softirq_entry");
        perf_events->add_event("irq:softirq_exit");
        perf_events->add_event("timer:timer_expire_entry");
        perf_events->add_event("timer:timer_expire_exit");
        perf_events->add_event("hrtimer_expire_entry"); /* !!! */
        perf_events->add_event("hrtimer_expire_exit"); /* !!! */
        if (!perf_events->add_event("power:cpu_idle")){
            perf_events->add_event("power:power_start");
            perf_events->add_event("power:power_end");
        }

As you may see all events are prefixed with the subsystem name. All but hrtimer_expire_entry and hrtimer_expire_exit. And without "timer:" prefix
these events are never catched.

So I have added this prefix and see that events are intercepted as needed.
But event parser complains about wrong event format:
unknown op '{'
failed to read event print fmt for hrtimer_expire_entry

It seems that event parser can't handle square bracket in print format for the event:
print fmt: "hrtimer=%p function=%pf now=%llu", REC->hrtimer, REC->function, (unsigned long long)(((ktime_t) { .tv64 = REC->now }).tv64)

Quoted 5 lines

So is the absence of "timer:" prefix a bug or a commenting of non-working case?

Thank you.

Im looking into this

#2 lore raw
In reply to Igor Zhbanov
Quoted 26 lines

Hello!

In the function start_process_measurement() in the file src/process/do_process.cpp
events are added to perf_bundle:

		perf_events->add_event("irq:softirq_entry");
		perf_events->add_event("irq:softirq_exit");
		perf_events->add_event("timer:timer_expire_entry");
		perf_events->add_event("timer:timer_expire_exit");
		perf_events->add_event("hrtimer_expire_entry");		/* !!! */
		perf_events->add_event("hrtimer_expire_exit");		/* !!! */
		if (!perf_events->add_event("power:cpu_idle")){
			perf_events->add_event("power:power_start");
			perf_events->add_event("power:power_end");
		}

As you may see all events are prefixed with the subsystem name. All but hrtimer_expire_entry and hrtimer_expire_exit. And without "timer:" prefix
these events are never catched.

So I have added this prefix and see that events are intercepted as needed. But event parser complains about wrong event format:
unknown op '{'
failed to read event print fmt for hrtimer_expire_entry

Quoted 7 lines

It seems that event parser can't handle square bracket in print format for the event:
print fmt: "hrtimer=%p function=%pf now=%llu", REC->hrtimer, REC->function, (unsigned long long)(((ktime_t) { .tv64 = REC->now }).tv64)

So is the absence of "timer:" prefix a bug or a commenting of non-working case?

I sent a note to Steve for a consult, seems its a bug. Steve sent a fix it in the traceevent lib. Thanks for the report, please let me know if you find something else.

Quoted 19 lines

Thank you.

--
Best regards,
Igor Zhbanov,
Expert Software Engineer,
phone: +7 (495) 797 25 00 ext 3806
e-mail: i.zhbanov(a)samsung.com

ASWG, Moscow R&D center, Samsung Electronics
12 Dvintsev street, building 1
127018, Moscow, Russian Federation

_______________________________________________
PowerTop mailing list
PowerTop(a)lists.01.org
https://lists.01.org/mailman/listinfo/powertop