Attività di scrittura pesante sulle prestazioni del sistema SSD Nukes


13

Ho notato che quando eseguo pesanti applicazioni di scrittura, l'intero sistema rallenta. Per testarlo ulteriormente, l'ho eseguito per fare un'attività (relativamente) a CPU bassa e alta:

john -incremental > file_on_SSD

Questo pompa decine di migliaia di stringhe al secondo in un file sul mio disco di sistema.

Quando lo fa, il mouse è in ritardo, i TTY non rispondono, le applicazioni "svaniscono" e generalmente l'intero computer diventa inutilizzabile. Quando alla fine riesco a controllare + C john, il sistema torna alla piena potenza dopo pochi secondi.

Questo è un esempio estremo ma ho problemi simili con attività leggermente meno impegnative in scrittura come la copia di file di grandi dimensioni da fonti veloci o la transcodifica.

Il mio disco OS principale è un SSD abbastanza veloce ( OCZ Agility 60GB ) con EXT4. Se scrivo johnl'output su un disco meccanico con EXT4, non avverto gli stessi rallentamenti sebbene la frequenza sia molto più lenta (SSD fa ~ 42.000 parole al secondo, meccanico fa 8.000 w / s). Il throughput può essere rilevante. Anche il disco meccanico non ha nulla a che fare con il sistema. Sono solo dati.

E sto usando il kernel 2.6.35-2 ma ho notato questo problema da quando ho preso questo SSD quando probabilmente stavo usando .31 o qualcosa di simile a quel tempo.

Quindi cosa sta causando il rallentamento? Problema EXT4? Problema del kernel? Problema SSD? Tutti i precedenti? Qualcos'altro?

Se pensi che debba eseguire un test aggiuntivo, lascia un commento che mi dice cosa devo fare e aggiungerò il risultato alla domanda.


Forse dovresti anche menzionare quale SSD stai usando. Non tutti gli SSD sono uguali.
Cristian Ciupitu,

@Cristian: aggiunto. È un'agilità OCZ.
Oli,

Risposte:


12

Questo è stato un problema noto per un po '. L'uso di un FS sintonizzato su SSD come Btrfs potrebbe essere d'aiuto, ma potrebbe non esserlo.

In definitiva, si tratta di un bug nei pianificatori IO / sistemi di gestione della memoria. Di recente, ci sono state alcune patch che mirano a risolvere questo problema. Vedi Risolto: il problema della reattività del desktop Linux?

Queste patch potrebbero infine entrare nel kernel mainline, ma per ora probabilmente dovrai compilare il tuo kernel se vuoi risolvere questo problema.


2
Se ho capito bene, le patch per questo dovrebbero andare in Linux 2.6.37 .
JanC

1

Ci sono alcune cose che puoi verificare per provare a migliorare le prestazioni dell'SSD sotto Linux.

  1. Impostare il punto di montaggio su 'noatime'. I tempi di accesso per l'aggiornamento di attività extra sono generalmente sprecati nella maggior parte dei casi d'uso. Soprattutto nel caso di pompare continuamente singole righe in un file, si stanno forzando più aggiornamenti al filesystem per ogni accesso.

  2. Controlla l'ascensore. L'elevatore predefinito per la maggior parte delle distro è impostato per i piatti rotanti ad accesso casuale. Gli SSD non hanno bisogno della logica aggiuntiva, quindi impostare l'ascensore su Noop può migliorare le prestazioni consentendo all'hardware di gestire le scritture.

  3. Write-through v write-back caching. Questo è un po 'più esoterico, ma è possibile verificare il metodo di memorizzazione nella cache utilizzato con hdparmper il dispositivo. La memorizzazione nella cache del write-back può avere un impatto positivo sulle prestazioni dell'SSD rispetto al write-through.


Potresti @nzwulfin scrivere qualcosa in più sull'impostazione dell'ascensore?
Grzegorz Wierzowiecki,

Sembra che le prestazioni dell'SSD andassero bene. È tutto il resto che soffre.
Thorbjørn Ravn Andersen,

0

La memorizzazione nella cache dei file è probabilmente erroneamente ottimizzata per il carico di lavoro. Sfortunatamente, il kernel Linux è abbastanza stupido da non gestirlo automaticamente e le impostazioni predefinite sono piuttosto cattive se si dispone di molta RAM e dispositivi di blocco abbastanza lenti. Vedi https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/ per i dettagli.

Suggerirei di provare a modificare /etc/sysctl.confentrambi

vm.dirty_background_ratio = 3
vm.dirty_ratio = 6

ridurre fortemente la pressione della RAM causata dalla cache di scrittura per consentire al kernel di gestire meglio altre attività. Ciò consentirà di scambiare una latenza migliorata per un rendimento inferiore.

Un'altra possibilità è aumentare la memorizzazione nella cache, ma se il processo continua a scrivere costantemente nuovi dati per tutto il tempo, la latenza sarà molto grave se la cache si riempie mai. Se vuoi provarlo, puoi fare qualcosa del genere

vm.dirty_background_ratio = 5
vm.dirty_ratio = 80

Si noti che le *_ratioimpostazioni si riferiscono alla percentuale di RAM disponibile. Se vuoi un controllo migliore, usa le *_bytesimpostazioni. Personalmente uso la seguente configurazione per la mia workstation:

vm.dirty_background_bytes = 50000000
vm.dirty_bytes = 200000000

Ciò limita la cache di scrittura in background a 50 MB e forza la scrittura sincrona se nella cache sono presenti 200 MB.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.