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是全局编号的。
分类:
Linux misc
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
2019-09-25 以add hidl service为例记录下hidl和binder driver的交互