Linux Accounting(中文翻译): Delay Accounting

  • Linux Accounting(中文翻译): Delay Accounting已关闭评论
  • 159 次浏览
  • A+
所属分类:linux技术
摘要

任务在执行时等待某个内核资源会意外遇到延迟,例如可运行的任务正在等待空闲CPU。


Delay accounting

延时统计

任务在执行时等待某个内核资源会意外遇到延迟,例如可运行的任务正在等待空闲CPU。

per-task的延时统计功能测量下列情况下任务经历的延迟:

  • 正在等待CPU,waiting for a CPU (while being runnable)
  • 同步块I/O的完成,completion of synchronous block I/O initiated by the task
  • 正在页面内交换,swapping in pages
  • 内存回收,memory reclaim
  • 占满页面缓存,thrashing page cache
  • 直接压缩,direct compact
  • 写保护拷贝,write-protect copy
    这些统计功能通过taskstats接口提供给用户空间使用。

这些延迟给设置CPU优先级,IO优先级和合适的RSS限制提供了反馈。重要任务的长期延迟可以作为一个触发器来提高它的优先级。

这个功能,通过使用taskstats接口,也为所有的线程组(传统的UNIX进程)中的任务或者线程提供了延时统计,这种收集比内核收集更有效。

用户空间的应用,特别是资源管理应用程序,也能收集延迟统计到任意分组。要使能这个功能,任务的延迟统计能在整个生存周期内和退出时都可用,需要保证连续的和完全的监测。

接口

延迟统计使用的taskstats接口在本目录下的文档中被详细地描述。Taskstats给用户空间返回一个per-pid和per-tgid统计的通用数据结构。延迟统计功能计算这个结构中的具体数据域。参看include/uapi/linux/taskstats.h中的与延迟统计有关的数据域描述。

它一般以计数器的形式返回累计延迟(for cpu, sync block I/O, swapin, memory reclaim, thrash page cache, direct compact, write-protect copy等)。

获取任务计数器(cpu_delay_total)的两个连续读数的差异,由于等待这个间隔内的相关资源也会带来任务延迟。

当任务退出时,per-task统计的记录被发送给用户空间。如果它是线程组中最后退出的任务,per-tgid统计也会被发送。更多细节由taskstats接口描述给出。

在tools/accounting目录下的用户空间程序getdelays.c允许运行简单的命令和显示相关的延迟统计信息。它也用作taskstats的简单示例。

使用

编译内核:

CONFIG_TASK_DELAY_ACCT=y CONFIG_TASKSTATS=y 

延迟统计启动时默认是禁止的,要使能它,增加delayacct到内核启动选项。要么使用sysctl kernel.task_delayacct在运行时来切换状态。注意只要在使能之后启动任务,它就有delayacct信息。

系统系统之后,使用跟getdelays.c相似的程序来访问任务或者任务组(tgid)相关的延迟。应用程序也允许执行命令和查看相关的延迟。

getdelays命令的一般格式:

getdelays [-dilv] [-t tgid] [-p pid] 

获取自系统启动以来PID 10的延迟:

# ./getdelays -d -p 10 (output similar to next case) 

获取自系统启动以来tgid 5中所有pid的延迟总和:

# ./getdelays -d -t 5 print delayacct stats ON TGID    5  CPU             count     real total  virtual total    delay total  delay average                     8        7000000        6872122        3382277          0.423ms IO              count    delay total  delay average                     0              0              0ms SWAP            count    delay total  delay average                     0              0              0ms RECLAIM         count    delay total  delay average                     0              0              0ms THRASHING       count    delay total  delay average                     0              0              0ms COMPACT         count    delay total  delay average                     0              0              0ms WPCOPY          count    delay total  delay average                     0              0              0ms 

获取pid1的IO统计:

# ./getdelays -i -p 1 printing IO accounting linuxrc: read=65536, write=0, cancelled_write=0 

上述命令可以使用-v来获取等多调试信息。


英文原文:
https://www.kernel.org/doc/html/latest/accounting/delay-accounting.html