关于linux-kernel:如何测量进程级别或容器级别的-IO-延迟
概述IO 提早问题简直是每个生产零碎都会或多或少遇到的问题。尽管当初 NVMe + SSDs 曾经能够达到 10Gbytes/s 的呑吐量,价格也十分亲民。但 IO 提早问题不会隐没。因为: 一些基于网络的的存储计划,如 Ceph,人造地有不稳定性SSD / RAIN Controller 自身的不稳定性在 Linux 下,传统地,咱们有 iostat / sar 等等工具能够看零碎级、存储设备级的问题。但均不能通知你以下几点: 产生 IO 提早时,过程/线程实际上的挂起时长过程/线程因 IO 提早挂起过几次这些问题,在 Linux 下因为写操作的异步落盘 pdflush 线程,问题变得更加难答复。当然,你能够用新技术 BPF,但不肯定须要这个牛刀。 有同学会问,晓得 IO 提早对线程的理论影响有什么用?答案可见我另外的两篇文章: eBPF 求证坊间风闻:Java GC 日志可导致整个 JVM 服务卡顿?eBPF 求证坊间风闻:mmap + Java Safepoint 可导致整个 JVM 服务卡顿?基本原理Linux 有很多暗藏个性,其中 Per-task statistics interface 与其下层的 Delay accounting 能够为每个线程减少一些 delay 的统计指标。 内核源码中,也有读取相干指标的 demo 利用源码。以下是一个操作示例: sudo sysctl kernel.task_delayacct=1# run your appsudo ./getdelays -t 608452 -d -iprint delayacct stats ONprinting IO accountingTGID 608452CPU count real total virtual total delay total delay average 60043 4332000000 4670325102 49110971 0.001msIO count delay total delay average 199 200090856599 1005msSWAP count delay total delay average 0 0 0msRECLAIM count delay total delay average 0 0 0msTHRASHING count delay total delay average 0 0 0msCOMPACT count delay total delay average 0 0 0msWPCOPY count delay total delay average 201 313245 0ms: read=0, write=0, cancelled_write=0Ubuntu 如同没有这个 getdelays 工具的 apt 包,须要本人编译。我是个懒人,所以我抉择了另一个查看这些指标的办法。 ...