Linux

最小化程序在不間斷(塊)睡眠(狀態 D)中花費的時間

  • January 14, 2018

我在網上看過很多關於什麼是不間斷睡眠的文章,或者為什麼,或者如何,例如如何知道程序進入睡眠狀態並喚醒它的原因?,但我還沒有找到一個文章詢問如何最大限度地減少在那里花費的時間。(我很樂意閱讀提供的任何內容)

我的程序非常佔用記憶體(大約 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: 2880x1800@59.99hz
          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

我懷疑你的問題沒有簡單的答案。如您所知,不可中斷的等待意味著核心正在代表程序執行某些任務,並且不支持在該任務正在進行時被中斷。如何最大限度地減少在那種狀態下的時間?您需要弄清楚導致轉換到該狀態的呼叫路徑。您也許可以使用類似的東西ftrace來確定。

一旦您知道是什麼呼叫觸發了您的程序到不間斷睡眠狀態的轉換,您就需要弄清楚該呼叫正在做什麼以及它與您的程序要求核心執行的操作之間的關係。基於此,您可能能夠調整您要求核心執行的操作以最小化該時間。

引用自:https://unix.stackexchange.com/questions/416173