最大限度地减少进程在不间断(块)睡眠(状态 D)中花费的时间

最大限度地减少进程在不间断(块)睡眠(状态 D)中花费的时间

我在网上看到很多关于不间断睡眠是什么、为什么或如何的帖子,例如如何知道进程进入睡眠状态的原因并唤醒它?,但我还没有找到一个帖子询问如何最大限度地减少在那里花费的时间。 (我很高兴阅读任何提供的内容)

我的进程是相当内存密集型的(~80GB 交换),我注意到磁盘 R/W 速率通常在 25-75 M/s 左右,而处于“D”状态。显然所有的工作都不能放入缓存中,但是有没有办法最大限度地减少在“D”中花费的时间?我的 swappiness 设置为 10,但我觉得 0 会使环境无响应(也许)。缓存压力怎么样?需要做出哪些调整/etc/sysctl.conf来帮助实现这一目标?

如果不是 Nvidia 驱动程序的黑屏,我什至会杀死 cinnamon 并在 tty 中运行它,但是,我希望在某些地方进行一些调整,以使效果相形见绌。

inxi -F说;

X@X / $ inxi -F
System:    Host: sbh Kernel: 4.13.0-21-generic x86_64 (64 bit) Desktop: Cinnamon 3.6.7
           Distro: Linux Mint 18.3 Sylvia
Machine:   System: Apple (portable) product: MacBookPro11 3 v: 1.0
           Mobo: Apple model: Mac-2BD1B31983FE v: MacBookPro11 3
           Bios: Apple v: MBP112.88Z.0142.B00.1708080655 date: 08/08/2017
CPU:       Quad core Intel Core i7-4980HQ (-HT-MCP-) cache: 6144 KB 
           clock speeds: max: 4000 MHz 1: 2793 MHz 2: 2793 MHz 3: 2793 MHz 4: 2793 MHz 5: 2793 MHz 6: 2793 MHz
           7: 2793 MHz 8: 2793 MHz
Graphics:  Card: NVIDIA GK107M [GeForce GT 750M Mac Edition]
           Display Server: X.Org 1.18.4 drivers: nvidia (unloaded: fbdev,vesa,nouveau)
           Resolution: [email protected]
           GLX Renderer: GeForce GT 750M/PCIe/SSE2 GLX Version: 4.5.0 NVIDIA 384.111
Audio:     Card-1 Intel 8 Series/C220 Series High Definition Audio Controller driver: snd_hda_intel
           Card-2 NVIDIA GK107 HDMI Audio Controller driver: snd_hda_intel
           Sound: Advanced Linux Sound Architecture v: k4.13.0-21-generic
Network:   Card: Broadcom BCM4360 802.11ac Wireless Network Adapter driver: wl
           IF: wlp3s0 state: up mac:
Drives:    HDD Total Size: 1000.6GB (17.0% used) ID-1: /dev/sda model: APPLE_SSD_SM1024 size: 1000.6GB
Partition: ID-1: / size: 202G used: 134G (70%) fs: ext4 dev: /dev/sda6
           ID-2: swap-1 size: 26.21GB used: 26.21GB (100%) fs: swap dev: /dev/sda7
RAID:      No RAID devices: /proc/mdstat, md_mod kernel module present
Sensors:   System Temperatures: cpu: 72.0C mobo: N/A gpu: 70C
           Fan Speeds (in rpm): cpu: N/A
Info:      Processes: 260 Uptime: 16:02 Memory: 15505.8/15952.4MB Client: Shell (bash) inxi: 2.2.35 

我现在/etc/sysctl.conf

vm.swappiness=10
vm.vfs_cache_pressure=50
vm.min_free_kbytes=262144
#vm.max_map_count=262144
vm.max_map_count=524288

答案1

我怀疑你的问题没有简单的答案。如您所知,不间断等待意味着内核正在代表进程执行某些任务,并且不支持在该任务正在进行时被中断。如何最大限度地减少处于这种状态的时间?您需要找出导致转换到该状态的调用路径。您也许可以使用类似的方法ftrace来确定这一点。

一旦您知道哪个调用触发了进程向不间断睡眠状态的转换,您就需要弄清楚该调用正在做什么,以及它与您的进程要求内核执行的操作之间的关系。基于此,您也许可以调整要求内核执行的操作以最小化该时间。

相关内容