Linux ha avuto a lungo un problema con i programmi che sfruttano tutta la memoria cache "sporca" del sistema. Quello che sta succedendo è che il processo di copia sta riempiendo la cache di scrittura con i dati del file che sta copiando e lo sta facendo molto rapidamente. Quindi, quando Firefox arriva e deve scrivere, deve prima attendere lo spazio del buffer sporco o uno slot di scrittura della coda del disco disponibile. Durante l'attesa è in competizione con il processo di copia e il thread pdflush del kernel, che sposta i dati dai buffer sporchi alla coda di scrittura del disco.
Firefox ha ancora un altro problema in questo scenario. Utilizza SQLite per memorizzare i propri segnalibri, la cronologia e altre cose. SQLite è un database compatibile con ACID e utilizza un sistema di transazione con le sue scritture su disco svuotato sul disco. Quindi, non solo deve attendere lo spazio del buffer, deve attendere che la coda del disco, che è piena di file copiato, venga cancellata prima che possa confermare una scrittura corretta.
C'è stato un lotto di tweaking fatto al sistema di accodamento e buffering del disco Linux. Ci sono cambiamenti in quasi tutte le versioni del kernel. Prova una delle versioni più recenti. Puoi anche provare a modificare i valori di sysctl. Mi sono simile a questi:
vm.dirty_writeback_centisecs = 100
vm.dirty_expire_centisecs = 9000
vm.dirty_background_ratio = 4
vm.dirty_ratio = 80
Si può anche provare a modificare il numero di slot nella coda del disco. Questo valore è /sys/block/sda/queue/nr_requests
. È necessario sostituire sda
con qualunque sia l'unità in uso. Più slot significa più possibilità di unire le richieste IO e lo scheduler CFQ IO può fare un lavoro migliore con priorità. Meno slot di solito significa un'attesa più breve per essere scritti su disco per l'I/O sincrono come le transazioni di SQLite. Meno slot significa anche un'attesa più breve per leggere l'I/O nella coda del disco se un processo di scrittura pesante riempie completamente la coda con un IO di scrittura.
fonte
2008-12-25 00:38:55
Ci proverò. Ma non è esattamente quello che voglio. Voglio che tutta l'attività del disco in background si imposti automaticamente su se stessa o altro. Voglio che il sistema sia abbastanza intelligente da dire "hey, c'è un umano che cerca di fare cose, smettila di farlo incazzare". – user126593
Non sono sicuro se attualmente esiste un modo per configurare la classe di priorità a livello globale. Tuttavia, è possibile configurare lo scheduler IO utilizzato per ciascun dispositivo a blocchi (scadenza echo>/sys/block//queue/scheduler). Leggi http://donami.com/118 per maggiori dettagli. –
codelogic
Non c'è modo per il sistema di sapere automaticamente. Hai digitato il comando cp, per tutto ciò che il sistema sa che stai aspettando con ansia che finisca. –