Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux中特定时间间隔内CPU活动的细粒度日志记录_Linux_Logging_Linux Kernel_Cpu Usage - Fatal编程技术网

Linux中特定时间间隔内CPU活动的细粒度日志记录

Linux中特定时间间隔内CPU活动的细粒度日志记录,linux,logging,linux-kernel,cpu-usage,Linux,Logging,Linux Kernel,Cpu Usage,是否有任何方法可以记录CPU活动,如“时间戳:实际活动”(如上下文切换等)?它应该类似于syslog、sar或top,但是具有更细粒度的时间值(以纳秒为单位) 请让我知道是否有一个工具可以做到这一点,否则我也准备好重新编译内核代码 我读过一篇相关的文章,在这篇文章中,讨论主要与线程有关,并检查了其他问题,但是没有得到任何线索 多谢各位 [编辑]:我正在寻找一个工具(API)/代码更改建议,它只能在内核级别工作,因为我的上下文与应用程序/用户空间无关 [EDIT2]:简要背景:我修改了Linux/

是否有任何方法可以记录CPU活动,如“时间戳:实际活动”(如上下文切换等)?它应该类似于syslog、sar或top,但是具有更细粒度的时间值(以纳秒为单位)

请让我知道是否有一个工具可以做到这一点,否则我也准备好重新编译内核代码

我读过一篇相关的文章,在这篇文章中,讨论主要与线程有关,并检查了其他问题,但是没有得到任何线索

多谢各位

[编辑]:我正在寻找一个工具(API)/代码更改建议,它只能在内核级别工作,因为我的上下文与应用程序/用户空间无关

[EDIT2]:简要背景:我修改了Linux/Android SDIO UART驱动程序,并对其进行了基准测试(指标:数据传输速度)。我所做的更改确实提高了性能,但也提出了一些问题。理论上,数据写入时间应该大约为50ns,但我观察到大约为200ns。为了了解150ns的延迟/延迟,我想跟踪CPU的工作,以便得到一些提示/答案


现在,我的希望寄托在systemtap上。

您无法轻松记录CPU活动,但您可以记录软件和内核活动

can是记录堆栈跟踪的采样探查器。可以记录用户空间应用程序和内核的堆栈

是另一种工具(类似于广受吹捧的DTrace),它允许为应用程序和内核添加工具,并使用函数参数和时间戳获取详细的堆栈跟踪

使用Systemtap可以在Linux内核中对函数进行基准测试。在分析正在运行的系统上的性能时,仅获取min/max/mean/median/stddev是不够的,因为您的平均值通常会太过嘈杂,例如,写入函数执行时间的平均值可能是150nsec,stddev是100nsec,这显然告诉不了您多少。因为一张图片胜过千言万语,所以一个好的开始应该是在驱动程序中识别一个或多个有趣的函数,对它们的执行时间进行采样,然后将采样集显示为直方图

这可以通过在函数入口和返回处插入探针来实现。函数entry probe将当前时间保存为输入时间。函数返回探测获取当前时间并减去输入时间以获得函数执行时间。将函数执行时间用作数组的下标/键(Systemtap数组实际上是哈希表),并增加与该键关联的样本计数。收集足够的样本(可以计数)后,完成Systemtap会话。在会话退出时,将数组显示为直方图,Systemtap提供了执行此操作的函数


我没有提供任何样品,因为。

感谢您指向这些工具。。我在用户空间没有任何软件,但是我有一个内核级的驱动程序要研究。。并且想知道CPU在时间t1和t2之间做什么(如果不是所有细节,而是主要细节)。据我所知,OProfile(大多数其他工具)提供了一种快照类型的报告。Systemtap对我来说是新的,看起来很有希望,我会研究它。感谢@Maxim Yegorushkin代表我更新编辑详细信息:)