0

I've seen many posts online about what uninterruptible sleep is, or why, or how, e.g. How to know reason of a process going to sleep state and wake it up?, but I haven't found a post asking about minimizing time spent there. (I'd be glad to read any provided)

My process is pretty memory intensive (~80GB of swap) and I notice the Disk R/W rates are often around 25-75 M/s, while in "D" state. So obviously all the work can't fit in cache, but is there a way to minimize time spent in "D"? My swappiness is set to 10, but I feel 0 would make the environment unresponsive (maybe). How about cache pressure? Any adjustments in /etc/sysctl.conf to make to help this?

I'd even kill cinnamon and run it in tty if it wasn't for the black screen from the Nvidia drivers, however, I am hoping there are some adjustments to be made somewhere that will dwarf the effect of that.

And inxi -F says;

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 

and my current /etc/sysctl.conf is

vm.swappiness=10
vm.vfs_cache_pressure=50
vm.min_free_kbytes=262144
#vm.max_map_count=262144
vm.max_map_count=524288
Jeff Schaller
  • 67,283
  • 35
  • 116
  • 255
nate
  • 293

1 Answers1

1

I suspect that there's no easy answer to your question. As you know, an uninterruptible wait means the kernel is performing some task on behalf of the process and does not support being interrupted while that task is in progress. How to minimize time in that state? You'd need to figure out what call path(s) were leading to the transition to that state. You may be able to use something like ftrace to determine that.

Once you know what call is triggering the transition of your process to an uninterruptible sleep state, you'd need to figure out what that call is doing an how that relates to what your process asked the kernel to do. Based on that, you may be able to adjust what you're asking the kernel to do to minimize that time.

Andy Dalton
  • 13,993
  • Well I was hoping for something simple I didn't know about (a lot ;) but thanks for the reference. I also found lttng, kernelshark, and others. Thanks! – nate Jan 10 '18 at 19:53