zoukankan      html  css  js  c++  java
  • ftrace code解析

    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是全局编号的。

  • 相关阅读:
    eclipse 远程debug tomcat web项目
    阿里巴巴fastjson的使用
    STS 3.6.4 SpringMVC 4.1.6 Hibernate 4.3.8 MySQL
    Ubuntu su 认证失败
    mysql mha高可用架构的安装
    Swift开发教程--关于Existing instance variable &#39;_delegate&#39;...的解决的方法
    设计模式-适配器模式(Go语言描写叙述)
    Xcode6.3 怎样使用Leaks查看内存泄露
    java中的subString具体解释及应用
    出走三上海篇
  • 原文地址:https://www.cnblogs.com/aspirs/p/15335193.html
Copyright © 2011-2022 走看看