Ile danych odczytuje Linux podczas rozruchu?

9

Zastanawiam się, ile danych w ogóle odczytuje świeżo zainstalowany waniliowy system Linux (jak 32-bitowy CentOS 5.10), aby dostać się do zachęty powłoki wirtualnej konsoli? Wiesz, czytanie wszystkich plików konfiguracyjnych, ładowanie plików binarnych, obraz jądra itp.

Szukam szacunków rzędu wielkości. Wiem, że rozruch systemu Linux różni się znacznie w zależności od szczegółów procesu. Czy mówimy 10 Mb? 100 Mb? 1 Gb?

amn
źródło
5
Dlaczego pytasz?
Zoredache,
2
Zmiennością są (mogą być) rzędy wielkości między systemami - ładowanie jądra i sterowników jest najmniejszą częścią procesu uruchamiania, a skrypty init w systemie mogą zrobić dosłownie wszystko, zanim pojawi się monit o zalogowanie się. Wyjaśnij sytuację, z którą masz do czynienia, pod względem faktycznego, praktycznego problemu, który możemy rozwiązać.
voretaq7
1
@amn Czy potrafisz podać przyczynę w swoim pierwotnym pytaniu? Pomoże w kontekście. Innym powodem, dla którego ludzie zadaliby podobne pytanie, jest to, czy korzystają z pamięci ograniczonej w cyklu. Więcej szczegółów jest zawsze lepsze.
ewwhite
8
@ewwhite Rozruchuję setki maszyn z systemem Linux, a 95% ich zawartości systemowej jest identycznych i pozostanie identycznych - maszyny są klonami. Chciałbym oddzielić identyczną / tylko do odczytu część systemu plików do pamięci NFS, zamontować go stamtąd i uruchomić w ten sposób. Tylko zapisywalna część systemu plików, taka jak / var, / tmp i / home, pozostanie lokalna dla każdego komputera. Ponieważ potencjalnie setki maszyn mogą zostać uruchomione jednocześnie w ramach „klastra”, muszę oszacować, czy dostęp do łącza do pamięci NFS będzie wąskim gardłem podczas uruchamiania z.
am
5
I need to estimate...następnie zrób jedną i zmierz.
symcbean

Odpowiedzi:

8

Zainstaluj jeden system, uruchom go i sprawdź statystyki warstw bloków /sys/block/${DEV}/statnp /sys/block/sda/stat.

Cytowanie z dokumentacji :

Plik stat składa się z pojedynczego wiersza tekstu zawierającego 11 wartości dziesiętnych oddzielonych spacjami. Pola są podsumowane w poniższej tabeli i opisane bardziej szczegółowo poniżej:

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

sektory odczytu, sektory zapisu

Wartości te liczą liczbę sektorów odczytanych lub zapisanych w tym urządzeniu blokowym. „Sektory”, o których mowa, to standardowe sektory 512-bajtowe UNIX, a nie wielkość bloku specyficzna dla urządzenia lub systemu plików. Liczniki są zwiększane po zakończeniu operacji we / wy.

Możesz użyć tej linijki, aby łatwiej uzyskać liczbę bajtów:

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

Wyniki dla Scientific Linux 6.1 i386

Przetestowałem to na maszynie wirtualnej KVM / qemu z systemem Scientific Linux 6.1 i386 (która jest podobna do RHEL). Włączono następujące usługi: acpid, auditd, crond, network, postfix, rsyslog, sshd i udev-post. Zamiana znajduje się na osobnym dysku, więc nie jest brana pod uwagę.

Statystyki dla 85 butów pobranych zdalnie z SSH kilka sekund po pojawieniu się monitu logowania były następujące:

    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

Czas rozruchu wynosił około 20 sekund.

Cristian Ciupitu
źródło
2
Należy pamiętać, że wydaje się, że daje to tylko zapotrzebowanie na transfer (ilość), a nie zapotrzebowanie na przepustowość (stawkę). Możesz jednak podzielić czas pracy, aby uzyskać średnią liczbę.
voretaq7
15

W komentarzach mówisz, że oceniasz środowisko netboot / root root.

Pierwszą rzeczą, którą musisz zdać sobie sprawę, jest to, że nie ma czegoś takiego jak „wanilia” - nie uruchomisz CentOS 5.10 od razu po wyjęciu z pudełka z zerowymi zmianami (jeśli myślisz, że tak się łudzisz: root NFS już jest przynajmniej Truskawka, granicząca z Pistacją).

Jeśli chcesz uzyskać odpowiedź dla swojego konkretnego środowiska (co naprawdę się liczy), musisz skonfigurować serwer NFS i komputer kliencki, uruchom go i zmierz:

  1. Przeniesienie (ilość)
  2. Przepustowość (stawka)

Obie wartości będą miały kluczowe znaczenie dla wydajności. Prawdopodobnie zechcesz także skonfigurować w pewnym momencie kilku klientów i zasymulować normalne korzystanie z systemu, aby zobaczyć, jaki rodzaj zapotrzebowania w stanie ustalonym nakładają na serwer / sieć NFS, gdy ludzie korzystają z systemów tak, jak robią to na co dzień praca.

Zobacz także: Nasza seria dotycząca planowania wydajności - nie mówimy konkretnie o NFS, ale obowiązują ogólne zasady „Buduj, testuj, stresuj”.

voretaq7
źródło
1
Jeśli jest lody waniliowe, to jest waniliowy Linux! ;-) Poważnie, jest to dość niezmieniony CentOS 5.10, a wszystko, co zostało zmienione, jest częścią zapisywalnego systemu plików, który nie będzie montowany z NFS, więc to nie jest czynnik - tak, istnieje gigantyczna baza danych Postgres w / var / lib, ale / var nie jest zamontowany z NFS, ale znajduje się na lokalnym fizycznym dysku startowym. A gdybym chciał to profilować, nie
zadałbym
10
@amn Przykro mi, że nie chcesz profilować, ale musisz zrobić to, co musisz - nie możemy wyciągnąć za Ciebie odpowiednich liczb z naszych tyłków. Twoje rozwiązanie (root NFS) jest solidne, sprawdzone w czasie i szczerze mówiąc, prawdopodobnie możesz po prostu wdrożyć je w ciemno bez żadnych problemów (dziesiątki tysięcy środowisk Sun Microsystems zostały wdrożone w ciemno w czasach świetności root-u i NFS Netbooting Solaris i działał świetnie). Jeśli jednak obawiasz się o wydajność, musisz przeprowadzić profilowanie, aby określić zapotrzebowanie i wąskie gardła w swoim specyficznym środowisku - to tylko sposób na wszechświat.
voretaq7
+1 za truskawki
alexyorke
1
@ voretaq7 Nie można się kłócić z argumentem profilowania i nigdy tego nie robił. Chciałem po prostu kolejną najlepszą rzecz, zanim zakręcę rękawy i skonfiguruję NFS. Dziękujemy za cenny wkład.
am