From mboxrd@z Thu Jan 1 00:00:00 1970 From: George Dunlap Subject: Re: [PATCH v4 7/9] xenalyze: handle more events in sched_process Date: Tue, 2 Jun 2015 18:12:15 +0100 Message-ID: <556DE3EF.8090507@eu.citrix.com> References: <1432369458-7587-1-git-send-email-olaf@aepfle.de> <1432369458-7587-8-git-send-email-olaf@aepfle.de> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1432369458-7587-8-git-send-email-olaf@aepfle.de> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Olaf Hering , xen-devel@lists.xen.org Cc: Wei Liu , Ian Jackson , Ian Campbell , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org On 05/23/2015 09:24 AM, Olaf Hering wrote: > Signed-off-by: Olaf Hering > Acked-by: Wei Liu > Cc: Ian Jackson > Cc: Stefano Stabellini > Cc: Ian Campbell > Cc: Wei Liu > --- > tools/xentrace/xenalyze.c | 75 ++++++++++++++++++++++++++++++++++++++++++----- > 1 file changed, 68 insertions(+), 7 deletions(-) > > diff --git a/tools/xentrace/xenalyze.c b/tools/xentrace/xenalyze.c > index 0566d00..2300348 100644 > --- a/tools/xentrace/xenalyze.c > +++ b/tools/xentrace/xenalyze.c > @@ -30,6 +30,7 @@ > #include > #include > #include > +#include > #include "analyze.h" > #include "mread.h" > #include "pv.h" > @@ -7569,24 +7570,84 @@ void sched_summary_domain(struct domain_data *d) > } > } > > +void sched_class(struct record_info *ri) > +{ > + /* Just a stub for now */ > +} > > void sched_process(struct pcpu_info *p) > { > struct record_info *ri = &p->ri; > > - if(ri->evt.sub == 0xf) { > + if (ri->evt.sub == 1) { > + sched_runstate_process(p); > + } else if (ri->evt.sub == 2) { > + sched_class(ri); > + } else { > switch(ri->event) > { > + case TRC_SCHED_DOM_ADD: > + printf(" %s sched_add_domain d%uv%u\n", > + ri->dump_header, ri->d[0], ri->d[1]); > + break; > + case TRC_SCHED_DOM_REM: > + printf(" %s sched_rem_domain d%uv%u\n", > + ri->dump_header, ri->d[0], ri->d[1]); > + break; > + case TRC_SCHED_SLEEP: > + printf(" %s domain_sleep d%uv%u\n", > + ri->dump_header, ri->d[0], ri->d[1]); > + break; > + case TRC_SCHED_WAKE: > + printf(" %s domain_wake d%uv%u\n", > + ri->dump_header, ri->d[0], ri->d[1]); > + break; > + case TRC_SCHED_YIELD: > + printf(" %s do_yield d%uv%u\n", > + ri->dump_header, ri->d[0], ri->d[1]); > + break; > + case TRC_SCHED_BLOCK: > + printf(" %s do_block d%uv%u\n", > + ri->dump_header, ri->d[0], ri->d[1]); > + break; > + case TRC_SCHED_SHUTDOWN: > + { > + static const char *reason[] = { > + [SHUTDOWN_poweroff] = "poweroff", > + [SHUTDOWN_reboot] = "reboot", > + [SHUTDOWN_suspend] = "suspend", > + [SHUTDOWN_crash] = "crash", > + [SHUTDOWN_watchdog] = "watchdog", > + }; > + printf(" %s domain_shutdown d%uv%u reason %x (%s)\n", > + ri->dump_header, ri->d[0], ri->d[1], ri->d[2], > + ri->d[2] > SHUTDOWN_MAX ? "unknown" : reason[ri->d[2]]); > + break; > + } > + case TRC_SCHED_SHUTDOWN_CODE: > + { > + printf(" %s domain_shutdown_code d%uv%u reason %x\n", > + ri->dump_header, ri->d[0], ri->d[1], ri->d[2]); > + break; > + } > + case TRC_SCHED_ADJDOM: > + printf(" %s sched_adjdom domid d%u\n", > + ri->dump_header, ri->d[0]); > + break; > case TRC_SCHED_SWITCH: > sched_switch_process(p); > break; > + case TRC_SCHED_SWITCH_INFPREV: > + printf(" %s switch_infprev old_domid %x runtime %d\n", > + ri->dump_header, ri->d[0], ri->d[1]); > + break; > + case TRC_SCHED_SWITCH_INFNEXT: > + printf(" %s switch_infnext new_domid %x time %d r_time %d\n", > + ri->dump_header, ri->d[0], ri->d[1], ri->d[2]); > + break; > default: > - process_generic(&p->ri); > - } > - } else { > - if(ri->evt.sub == 1) > - sched_runstate_process(p); > - else { > + fprintf(warn, "%s: event:%x (min:%x sub:%x main:%x)\n", > + __func__, ri->event, ri->evt.minor, ri->evt.sub, ri->evt.main); Was there a reason you didn't want to change this to "Unknown event"? -George