Linux Accounting(中文翻译)(2):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来获取等多调试信息。

Original: https://www.cnblogs.com/aosp/p/16369720.html
Author: 河东西望
Title: Linux Accounting(中文翻译)(2):Delay Accounting

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/523371/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球