好的进程触发了多少内核时间?

好的进程触发了多少内核时间?

我有一些 CPU 使用率警报,它们在我不希望的时候触发。

我正在阅读,并将和jiffies/proc/stat的增长与 jiffies 的总体增长进行比较。如果百分比增加足够高,则会发出警报。请注意,我不计算在内 - 周围有很好的流程,但我很高兴,如果需要,这些流程将被取消安排,而我的重要流程将继续进行。usersystemnice

然而,当警报被触发时,我经常发现根本%user没有上升。然而,%nice%system确实增加了 - 并且一些好的进程会触发内核工作。

我的问题是:

  1. 如果更重要的进程需要 CPU 时间,那么好的进程(以及它们触发的内核工作)将会被取消调度,我这样说对吗?
  2. 我如何知道其中有多少%system是由于良好的流程造成的?

目前运行 CentOS 6 (2.6.32),但如果这个问题已在更高版本中修复,我会考虑向后移植它!

答案1

这可能取决于好的进程做什么,特别是它发出多少系统调用以及发出什么系统调用。这是一个不太好的程序,notnice.asm就系统时间而言,它可能会表现出接近最坏情况的行为

# Linux, x86_64, NASM
bits 64
section .data
letter: db "n"
section .text
global  _start
_start: mov rsi,letter
        mov rdi,1       ; stdout
        mov rdx,1       ; length
_again:                 ; on assumption above not unset by syscall...
        mov rax,1       ; sys_write
        syscall
        jmp _again

即使在以下情况下运行,nice -n 19仍应运行系统时间:

$ nasm -f elf64 notnice.asm -o notnice.o
$ ld notnice.o -o notnice
$ nice -n 19 ./notnice >/dev/null

top然后应该显示这个进程占用了 100% 的 CPU,因为它处于一个相当紧密的循环中,至少对于我的其他不繁忙的 centos7 测试主机(每个有四个 CPU /proc/cpuinfo)来说大约是 ~20% 系统时间,~5% 不错,以及其他空闲状态:

%Cpu(s):  0.1 us, 19.1 sy,  5.9 ni, 74.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

在这种情况下,大约 100% 的系统时间是由于进程不太好造成的。通过此运行,我们还可以运行更高优先级的进程,然后检查系统负载如何变化(也许使用 SystemTap 或其他东西发生的频率sys_writenotnice或者可能将notnice输出输出到快速文件系统,并查看 I/O 速率是否因有更高优先级的进程...)

SystemTap 可以提供更好的粒度,例如通过https://sourceware.org/systemtap/examples/general/stopwatches.stp尽管这要求录制开始时进程位于用户空间中。

相关内容