本文介绍了为什么一个的printk()连续系统日志内打印时,它驻留在(每ftrace)不会被调用内核函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从的。

我已经修改的功能如下:

 结构文件*文件= iocb-> ki_filp;
结构address_space *映射文件 - => f_mapping;
结构的inode的inode * = mapping->主机;
ssiz​​e_t供书面= 0;
ssiz​​e_t供走错了路。
ssiz​​e_t供状态;/ *我们可以写回这个队列页面回收* /
电流 - > backing_dev_info = inode_to_bdi(i节点);
ERR = file_remove_privs(文件);
如果(ERR)
        转到出来;ERR = file_update_time(文件);
如果(ERR)
        转到出来;/ *如果这个()是我已经添加* /
如果(io_tracing_on){
        ssiz​​e_t供write_size = iov_length(从 - > IOV,从 - > nr_segs);
        printk的(KERN_INFO写入大小=%祖,PID =%d个,索引节点=%lu个\\ N,write_size,task_pid_nr(电流),inode-> i_ino);
}如果(iocb-> ki_flags&安培; IOCB_DIRECT){
        参数loff_t POS,endbyte;
        ...

io_tracing_on是,我通过/ proc入口(由我的模块,该模块内置在内核中创建)设置一个变量。当我翻转上的开关和运行DD(通过 DD如果=的/ dev / urandom的= / tmp目录/胡言乱语BS = 1M计算= 1 ),我得到一个连续的数据流输出的的/ var / log / syslog的,即:

  6月27日15时00分41秒马尔卡内核:[463.424155]写大小= 168,PID = 715,索引节点= 7864653
6月27日15时00分41秒马尔卡内核:[463.428064]写大小= 168,PID = 715,索引节点= 7864354
6月27日15时00分41秒马尔卡内核:[463.428126]写大小= 168,PID = 715,索引节点= 7864653
6月27日15时00分41秒马尔卡内核:[463.432061]写大小= 168,PID = 715,索引节点= 7864354
6月27日15时00分41秒马尔卡内核:[463.432121]写大小= 168,PID = 715,索引节点= 7864653
6月27日15时00分41秒马尔卡内核:[463.436075]写大小= 168,PID = 715,索引节点= 7864354
6月27日15时00分41秒马尔卡内核:[463.436133]写大小= 168,PID = 715,索引节点= 7864653
6月27日15时00分41秒马尔卡内核:[463.440060]写大小= 168,PID = 715,索引节点= 7864354
6月27日15时00分41秒马尔卡内核:[463.440121]写大小= 168,PID = 715,索引节点= 7864653
等等

然而,当我运行ftrace(使用功能示踪剂),我从来没有看到 __ generic_file_write_iter()被调用。那么,为什么我的的printk()语句不断得到所谓无 __ generic_file_write_iter()显示在ftrace输出高达

该内核版本是4.5.5。

更新

previously,我没能到PID任何有效的过程联系起来。改变我的code打印PID和TGID之后,我能够与进程相关联TGID。看来,系统日志呼唤我的的printk()每次写入,导致产量的连续流的时间。然而,ftrace仍然没有显示 __ generic_file_write_iter()被称为近足够的时间,以反映倍量我的的printk()被调用。所以,我的问题是 - 如果ftrace正在工作,我希望,我会想象那里是一个调用 __ generic_file_write_iter()在ftrace每 printk的()我在syslog看到的。


解决方案

Most probably, __generic_file_write_iter is not listed in /sys/kernel/debug/tracing/available_filter_functions (the functions that ftrace can trace, see ftrace - Function Tracer or Secrets of the Ftrace function tracer).

这篇关于为什么一个的printk()连续系统日志内打印时,它驻留在(每ftrace)不会被调用内核函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

06-30 12:32