Quanti dati legge Linux all'avvio medio?


9

Mi chiedo quanti dati in totale legge un sistema Linux vanilla appena installato (come CentOS 5.10 a 32 bit) per ottenere un prompt della shell della console virtuale? Sai, leggere tutti i file di configurazione, caricare i binari, l'immagine del kernel, ecc.

Sto cercando stime dell'ordine di grandezza. Sono consapevole che l'avvio di Linux varia notevolmente per quanto riguarda i dettagli del processo. Stiamo parlando di 10 Mb? 100Mb? 1gb?


5
Perché stai chiedendo?
— Zoredache,

2
La variabilità è (può essere) un ordine di grandezza tra i sistemi: il caricamento del kernel e dei driver è la frazione più piccola del processo di avvio e gli script init su un sistema possono fare letteralmente qualsiasi cosa prima di ottenere un prompt di login. Spiega la situazione che stai affrontando in termini di un problema reale e pratico che possiamo aiutarti a risolvere.
— voretaq7,

1
@amn Puoi mettere il motivo nella tua domanda iniziale? Aiuterà con il contesto. Un altro motivo per cui le persone porterebbero una domanda simile è se stanno usando una memoria a ciclo limitato. Maggiori dettagli sono sempre migliori.
— ewwhite

8
@ewwhite Sto avviando centinaia di macchine Linux e il 95% dei loro contenuti di sistema sono identici e rimarranno identici - le macchine sono cloni. Vorrei scaricare la parte identica / di sola lettura del filesystem, su una memoria NFS, montarla da lì e avviarla in quel modo. Solo una parte scrivibile del filesystem, come / var, / tmp e / home, rimarrà locale per ogni macchina. Poiché potenzialmente un centinaio di macchine possono avviarsi contemporaneamente come parte di un "cluster", ho bisogno di stimare se il collegamento di archiviazione NFS a cui si accederà sarà un collo di bottiglia durante l'avvio.
— am

5
I need to estimate...quindi eseguine uno e misuralo.
— symcbean,

Risposte:


8

Installa un sistema, avvialo e controlla /sys/block/${DEV}/statad es /sys/block/sda/stat. Le statistiche del livello di blocco .

Citando dalla documentazione :

Il file stat è costituito da una singola riga di testo contenente 11 valori decimali separati da spazi bianchi. I campi sono riepilogati nella tabella seguente e descritti più dettagliatamente di seguito:

Name            units         description
----            -----         -----------
read I/Os       requests      number of read I/Os processed
read merges     requests      number of read I/Os merged with in-queue I/O
read sectors    sectors       number of sectors read
read ticks      milliseconds  total wait time for read requests
write I/Os      requests      number of write I/Os processed
write merges    requests      number of write I/Os merged with in-queue I/O
write sectors   sectors       number of sectors written
write ticks     milliseconds  total wait time for write requests
in_flight       requests      number of I/Os currently in flight
io_ticks        milliseconds  total time this block device has been active
time_in_queue   milliseconds  total wait time for all requests

leggi settori, scrivi settori

Questi valori contano il numero di settori letti o scritti su questo dispositivo a blocchi. I "settori" in questione sono i settori standard UNIX da 512 byte, non qualsiasi dimensione di blocco specifica per dispositivo o file system. I contatori vengono incrementati al completamento dell'I / O.

È possibile utilizzare questo one-liner per ottenere più facilmente il numero di byte:

awk '{printf("read %d bytes, wrote %d bytes\n", $3*512, $7*512)}' /sys/block/vda/stat

Risultati per Scientific Linux 6.1 i386

Ho provato questo su una macchina virtuale KVM / qemu con Scientific Linux 6.1 i386 (che è simile a RHEL). Sono stati abilitati i seguenti servizi: acpid, auditd, crond, network, postfix, rsyslog, sshd e udev-post. Lo swap si trova su un disco separato, quindi non viene preso in considerazione.

Le statistiche per 85 stivali, prese a distanza con SSH un paio di secondi dopo la comparsa del prompt di accesso, erano:

    Name            Median   Average   Stdev
    -------------   ------   -------   -----
    read I/Os       1920     1920.2    2.6
    read merges     1158     1158.4    1.8
    read sectors    85322    85330.9   31.9
 >> read MiBytes    41.661   41.665    0.016
    read ticks      1165     1177.2    94.1
    write I/Os      33       32.6      1.7
    write merges    64       59.6      7.4
    write sectors   762      715.2     70.9
 >> write MiBytes   0.372    0.349     0.035
    write ticks     51       59.0      17.4
    in_flight       0        0.0       0.0
    io_ticks        895      909.9     57.8
    time_in_queue   1217     1235.2    98.5

Il tempo di avvio è stato di circa 20 secondi.


2
Si noti che questo sembra fornire solo la domanda di trasferimento (quantità), non la domanda di throughput (tasso). Tuttavia, potresti dividere per il tempo di attività per ottenere un numero medio.
— voretaq7,

15

Nei tuoi commenti dici che stai valutando un ambiente root netboot / network.

La prima cosa che devi capire è che non esiste niente come "vaniglia" : non eseguirai CentOS 5.10 immediatamente senza modifiche (se pensi di star illudendo te stesso: NFS Root è già almeno Fragola, tendente al pistacchio).

Se vuoi una risposta per il tuo ambiente specifico (che è ciò che conta davvero) dovrai configurare un server NFS e un computer client, avviarlo e misurare:

  1. Il trasferimento (quantità)
  2. Il throughput (tasso)

Entrambi i valori saranno di fondamentale importanza per le prestazioni. Probabilmente vorrai anche configurare diversi client ad un certo punto e simulare il normale uso del sistema per vedere che tipo di richiesta di stato stazionario hanno messo sul tuo server / rete NFS quando le persone usano i sistemi come farebbero ogni giorno lavoro.

Vedi anche: Le nostre serie sulla Pianificazione della capacità - non parliamo specificamente di NFS, ma si applicano i principi generali di "Costruiscilo, testalo, stress".


1
Se c'è gelato alla vaniglia, c'è vanilla Linux! ;-) Scherzi a parte, è un CentOS 5.10 abbastanza inalterato, e qualunque cosa sia stata modificata fa parte del filesystem scrivibile, quello che non sarà montato da NFS, quindi non è un fattore - sì, c'è un gigantesco database Postgres in / var / lib ma / var non è montato da NFS ma si trova sul disco di avvio fisico locale. E se volessi profilo it, non sarei porre la domanda qui :-)
— AMN

10
@amn Mi dispiace che tu non voglia fare la profilazione, ma devi fare quello che devi fare - non possiamo estrarre i numeri applicabili dai nostri mozziconi per te. La tua soluzione (radice NFS) è solida, testata nel tempo e onestamente probabilmente puoi semplicemente implementarla alla cieca senza problemi (decine di migliaia di ambienti Sun Microsystems sono stati implementati ciechi come quelli nel periodo di massimo splendore di NFS-root e Netbooting Solaris e ha funzionato alla grande). Se sei preoccupato per le prestazioni, anche se dovrai fare la profilazione per determinare la domanda e i colli di bottiglia per il tuo ambiente specifico - questo è solo il modo dell'universo.
— voretaq7,

+1 per la fragola
— alexyorke

1
@ voretaq7 Non posso discutere con l'argomento di profilazione e non l'ho mai fatto. Volevo solo la cosa migliore prima di rimboccarmi le maniche e impostare l'NFS. Grazie per il tuo prezioso contributo.
— am
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.