ftrace code解析

摘要:
;__ entry-˃member=成员;__entry-˃size=;),TP_ printk);上部TP_ PROTO定义参数列表。实际的调用示例如下:stat_Printk()上方的trace_rss_TP定义了traceevent输出日志的格式。相应traceevent目录中的格式来自此定义。上限TP_fast_Assign()分配给TP_printk()中打印的变量。
ftrace code

ftrace event kmem:rss_stat

trace event definition

include/trace/events/kmem.h

TRACE_EVENT(rss_stat,

    TP_PROTO(struct mm_struct *mm,
        int member,
        long count),

    TP_ARGS(mm, member, count),

    TP_STRUCT__entry(
        __field(unsigned int, mm_id)
        __field(unsigned int, curr)
        __field(int, member)
        __field(long, size)
    ),

    TP_fast_assign(
        __entry->mm_id = mm_ptr_to_hash(mm);
        __entry->curr = !!(current->mm == mm);
        __entry->member = member;
        __entry->size = (count << PAGE_SHIFT);
    ),

    TP_printk("mm_id=%u curr=%d type=%s size=%ldB",
        __entry->mm_id,
        __entry->curr,
        __print_symbolic(__entry->member, TRACE_MM_PAGES),
        __entry->size)
    );

上面TP_PROTO定义了参数列表,实际调用例子如下trace_rss_stat(mm, member, count)

上面TP_printk()定义了此trace event输出log的格式,在对应的trace event目录下的format就是来自于这里的定义。

上面TP_fast_assign()对TP_printk()里打印的变量进行赋值。

mm/memory.c

#define TRACE_MM_COUNTER_THRESHOLD 128

void mm_trace_rss_stat(struct mm_struct *mm, int member, long count,
               long value)
{
    long thresh_mask = ~(TRACE_MM_COUNTER_THRESHOLD - 1);

    /* Threshold roll-over, trace it */
    if ((count & thresh_mask) != ((count - value) & thresh_mask))
        trace_rss_stat(mm, member, count);
}
name: rss_stat
ID: 416
format:
        field:unsigned short common_type;       offset:0;       size:2; signed:0;
        field:unsigned char common_flags;       offset:2;       size:1; signed:0;
        field:unsigned char common_preempt_count;       offset:3;       size:1; signed:0;
        field:int common_pid;   offset:4;       size:4; signed:1;

        field:unsigned int mm_id;       offset:8;       size:4; signed:0;
        field:unsigned int curr;        offset:12;      size:4; signed:0;
        field:int member;       offset:16;      size:4; signed:1;
        field:long size;        offset:24;      size:8; signed:1;

print fmt: "mm_id=%u curr=%d member=%d size=%ldB", REC->mm_id, REC->curr, REC->member, REC->size

 注:上面ID: 416是表示rss_stat traceevent的ID,ID是全局编号的。

免责声明:文章转载自《ftrace code解析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#给ExpandoObject动态添加对象vs code C/C++文本编辑器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章