Perché gli I / O su disco elevato riducono la reattività / le prestazioni del sistema?


19

Non ho mai capito bene perché l'I / O su disco elevato abbia rallentato così tanto il sistema. È strano per me perché mi aspetto che il rallentamento influisca solo su quei processi che dipendono dai dati del disco rigido / ottico, ma il rallentamento influisce anche sulle cose caricate sulla RAM. Mi riferisco a iowait .

Perché il processore attende, invece di fare altri lavori? Qualcuno può spiegare questa limitazione e perché non è stata risolta nel kernel di Linux? Esiste un kernel là fuori che non presenta questo problema?

[ nota ] Sono stati registrati alcuni progressi in questo settore delle prestazioni. Per uno, i kernel successivi (2.6.37 nel mio caso) sono molto più reattivi.


Xeno non ha spiegato esattamente come questo è stato risolto nel kernel di Linux l'ultima volta che lo hai chiesto?
Michael Mrozek

2
Date le modifiche, penso che l'intenzione sia quella di avere la domanda precedente sui progressi compiuti verso la risoluzione del problema, mentre questa domanda riguarda il motivo per cui esiste il problema.
Steven D,

@mic Steven ha ragione. Abbiamo discusso a lungo di ciò che intendevo con la domanda precedente. La risposta di xeno è stata così buona che ho modificato la domanda per adattarla, e ho ri-posto la domanda originale qui.
Tshepang,

Capisco, ma la tua domanda sembra contraddire l'altra; qui dici "Qualcuno può spiegare questa limitazione e perché non è stata risolta nel kernel Linux? Esiste un kernel là fuori che non presenta questo problema?", ma la risposta di xeno inizia con "Penso per lo più è stato risolto ".
Michael Mrozek

@mic Non proprio. Il kernel fa ancora iowait , nel senso che aspetta ancora. Vedo la risposta di xeno poiché è stata migliorata una maggiore reattività del sistema . E che sono d'accordo, come ho notato sulla domanda.
Tshepang,

Risposte:


9

I sistemi operativi utilizzano la memoria virtuale in modo che sia possibile utilizzare più memoria di quanta la RAM fisica sia disponibile. Quando il kernel decide di utilizzare meglio una pagina di memoria fisica, il suo contenuto può essere "impaginato" per l'archiviazione su disco. Quando si accede a una tale pagina di memoria virtuale durante il paging, viene generata una errore di pagina e viene spostato dal disco alla RAM.

Gli errori di pagina sono un disastro per le prestazioni perché la latenza del disco viene misurata in millisecondi, mentre la latenza della RAM viene misurata in nanosecondi. (1 millisecondo = un milione di nanosecondi!)

La memoria non viene utilizzata solo dai processi utente, ma anche dal kernel per cose come la memorizzazione nella cache del file system. Durante l'attività del file system, il kernel memorizzerà nella cache i dati utilizzati di recente. Il presupposto è che ci sono buone probabilità che gli stessi dati vengano riutilizzati a breve, quindi la memorizzazione nella cache dovrebbe migliorare le prestazioni di I / O.

La memoria fisica utilizzata per la cache del file system non può essere utilizzata per i processi, quindi durante l'attività del file system verrà paginata più memoria di processo e gli errori di pagina aumenteranno. Inoltre, è disponibile una larghezza di banda di I / O del disco inferiore per lo spostamento delle pagine di memoria da e verso il disco. Di conseguenza i processi potrebbero bloccarsi.


So che è vecchio quanto lo sporco ma, a seconda di come sta arrivando, elevate quantità di I / O potrebbero comportare la generazione di molti interruzioni e il cambio di contesto che ne risulta fa perdere tempo alla CPU.
Bratchley,

5

Per quanto ho capito, IOwait significa che un processo, non il processore, sta aspettando che IO diventi disponibile. I processori hanno guadagnato molta più velocità dei dischi rigidi, il che significa che più codice finirà più velocemente e quindi il disco dovrà essere letto. Quando è necessario leggere più più di quante l'unità può fare abbastanza velocemente, si finisce con l'attesa del processore. Il modo in cui viene deciso chi può leggere / scrivere sul disco è determinato dallo scheduler dei blocchi, nella maggior parte dei casi ora CFQ. Se stai usando CFQ e hai bisogno di un processo per usare meno tempo di I / O complessivo per aumentare la reattività del sistema, puoi usareionice -c3 <processid> . Questo dice al sistema di dare questo processo IO solo quando nient'altro ne ha bisogno.

Questo è ancora interessante e spiega meglio il problema iowait.

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.