• Steven Rostedt (Red Hat)'s avatar
    tracing: Add __bitmask() macro to trace events to cpumasks and other bitmasks · 4449bf92
    Steven Rostedt (Red Hat) authored
    Being able to show a cpumask of events can be useful as some events
    may affect only some CPUs. There is no standard way to record the
    cpumask and converting it to a string is rather expensive during
    the trace as traces happen in hotpaths. It would be better to record
    the raw event mask and be able to parse it at print time.
    
    The following macros were added for use with the TRACE_EVENT() macro:
    
      __bitmask()
      __assign_bitmask()
      __get_bitmask()
    
    To test this, I added this to the sched_migrate_task event, which
    looked like this:
    
    TRACE_EVENT(sched_migrate_task,
    
    	TP_PROTO(struct task_struct *p, int dest_cpu, const struct cpumask *cpus),
    
    	TP_ARGS(p, dest_cpu, cpus),
    
    	TP_STRUCT__entry(
    		__array(	char,	comm,	TASK_COMM_LEN	)
    		__field(	pid_t,	pid			)
    		__field(	int,	prio			)
    		__field(	int,	orig_cpu		)
    		__field(	int,	dest_cpu		)
    		__bitmask(	cpumask, num_possible_cpus()	)
    	),
    
    	TP_fast_assign(
    		memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
    		__entry->pid		= p->pid;
    		__entry->prio		= p->prio;
    		__entry->orig_cpu	= task_cpu(p);
    		__entry->dest_cpu	= dest_cpu;
    		__assign_bitmask(cpumask, cpumask_bits(cpus), num_possible_cpus());
    	),
    
    	TP_printk("comm=%s pid=%d prio=%d orig_cpu=%d dest_cpu=%d cpumask=%s",
    		  __entry->comm, __entry->pid, __entry->prio,
    		  __entry->orig_cpu, __entry->dest_cpu,
    		  __get_bitmask(cpumask))
    );
    
    With the output of:
    
            ksmtuned-3613  [003] d..2   485.220508: sched_migrate_task: comm=ksmtuned pid=3615 prio=120 orig_cpu=3 dest_cpu=2 cpumask=00000000,0000000f
         migration/1-13    [001] d..5   485.221202: sched_migrate_task: comm=ksmtuned pid=3614 prio=120 orig_cpu=1 dest_cpu=0 cpumask=00000000,0000000f
                 awk-3615  [002] d.H5   485.221747: sched_migrate_task: comm=rcu_preempt pid=7 prio=120 orig_cpu=0 dest_cpu=1 cpumask=00000000,000000ff
         migration/2-18    [002] d..5   485.222062: sched_migrate_task: comm=ksmtuned pid=3615 prio=120 orig_cpu=2 dest_cpu=3 cpumask=00000000,0000000f
    
    Link: http://lkml.kernel.org/r/1399377998-14870-6-git-send-email-javi.merino@arm.com
    Link: http://lkml.kernel.org/r/20140506132238.22e136d1@gandalf.local.homeSuggested-by: default avatarJavi Merino <javi.merino@arm.com>
    Tested-by: default avatarJavi Merino <javi.merino@arm.com>
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    4449bf92
trace_output.c 32.3 KB