minimize o tempo gasto para o processo no modo de espera ininterrupta (bloqueio) (status D)

0

Eu vi muitas postagens on-line sobre o que é o sono ininterrupto, ou por que, ou como, por exemplo Como saber o motivo de um processo entrar em estado de suspensão e despertá-lo? , mas não encontrei um post perguntando sobre como minimizar o tempo gasto lá. (Eu ficaria feliz em ler qualquer fornecido)

Meu processo é bastante intensivo de memória (~ 80 GB de troca) e percebo que as taxas de R / W do disco estão geralmente em torno de 25-75 M / s, enquanto no estado "D". Então, obviamente, todo o trabalho não pode caber no cache, mas existe uma maneira de minimizar o tempo gasto em "D"? Meu swappiness é definido como 10, mas sinto que 0 deixaria o ambiente sem resposta (talvez). Como sobre a pressão de cache? Quaisquer ajustes em /etc/sysctl.conf para fazer para ajudar isso?

Eu até mataria canela e o rodaria em tty se não fosse pela tela preta dos drivers da Nvidia, no entanto, eu estou esperando que alguns ajustes sejam feitos em algum lugar que diminua o efeito disso.

E inxi -F diz;

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 

e meu atual /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
    
por nate 10.01.2018 / 19:10

1 resposta

1

Eu suspeito que não há uma resposta fácil para sua pergunta. Como você sabe, uma espera ininterrupta significa que o kernel está executando alguma tarefa em nome do processo e não suporta ser interrompido enquanto essa tarefa está em andamento. Como minimizar o tempo nesse estado? Você precisaria descobrir quais caminhos de chamada estavam levando à transição para esse estado. Você pode usar algo como ftrace para determinar isso.

Uma vez que você sabe qual chamada está acionando a transição do seu processo para um estado ininterrupto de sono, você precisa descobrir o que essa chamada está fazendo e como isso se relaciona com o que seu processo pediu ao kernel para fazer. Com base nisso, você pode ajustar o que está pedindo ao kernel para minimizar esse tempo.

    
por 10.01.2018 / 20:05