it-swarm.it

ureadahead sembra bloccare il sistema all'avvio

Ho dato un'occhiata ai miei bootcharts e sembra che ci sia qualcosa che non va. Il processo ureadahead fa quello che dovrebbe fare (l'utilizzo del disco è il 100% il più delle volte), ma blocca anche qualsiasi altra azione.

Dal momento che ho un disco rigido portatile lento, ureadahead stesso richiede ~ 50 secondi del tempo di avvio. Quindi, il resto della sequenza di avvio visibile richiede altri 100s per essere completato, usando molta CPU, ma non al massimo e un sacco di IO (di nuovo, quasi il 100% quasi sempre).

Questo mi sembra strano. Il mio ureadahead è configurato in modo errato? Perché blocca attività come aprire la rete che sembra richiedere molta CPU? Dovrebbe impiegare circa il 50% del tempo del diagramma di avvio in generale?

Modifica: ecco il diagramma di avvio di esempio: http://img191.imageshack.us/img191/1049/localhostkarmic20100815.png (o questo se quello diretto non ha funzionato: http: //yfrog.com/f/5blocalhostkarmic20100815p/ )

5
viraptor

Il blocco dell'avvio è in base alla progettazione. Lo scopo di ureadahead è precaricare in anticipo tutti i dati necessari per l'avvio. La ragione per fare questo è che il motivo principale della lentezza del disco sono i tempi di ricerca - anche i dischi rigidi lenti dovrebbero essere in grado di inviare> 50 MB/sec di letture, ma se è necessario cercare in giro - a decine di millisecondi per ricerca - che diminuisce drasticamente. Eseguendo in anticipo, ureadahead dovrebbe essere in grado di ridurre al minimo le ricerche e quindi ridurre al minimo il tempo necessario per leggere tutti i dati necessari per l'avvio.

Così la ideale bootchart sembra ureadahead al 100% di utilizzo I/O, seguito da tutto il resto che si avvia e non utilizza alcun I/O (disco). Questo avvio non è praticamente realizzabile, anche perché molti dei servizi che stiamo avviando scrivono sul disco, ma questa è l'idea.

Guardando il tuo diagramma di avvio sembra che ureadahead stia davvero facendo fatica a estrarre i dati dal tuo disco - c'è un sacco di tempo in cui ha un throughput molto basso. Anche così, sembra che stia facendo un po 'del suo lavoro - dopo l'avvio di ureadahead il tuo avvio è principalmente legato alla CPU, piuttosto che legato all'I/O, e sembra che le grandi patch dell'avvio associato all'I/O siano associate a preload accensione.

Potresti voler provare a rimuovere preload, o riprofilare il tuo boot¹, o potrebbe essere che alcuni dei tuoi file siano molto frammentati, o potrebbe essere un bug in ureadahead.

1: La rimozione dei file pack da/var/lib/ureadahead provocherà la riprofilatura di ureadahead al prossimo avvio.

4
RAOF