DD z / dev / zero do / dev / null… co się właściwie dzieje

13

Co dzieje się w poleceniu

sudo dd if=/dev/zero of=/dev/null bs=500M count=1. 

Gdzie właściwie idą zera i co się ogólnie dzieje? Prędkość wynosi 905 MB / s

Jeśli dd do ramdysku, prędkość wynosi tylko 388 MB / s. A jeśli ja dddo mojego dysku twardego, prędkość wynosi tylko 63,2 MB / s

agz
źródło
1
/dev/nulljest dobrym miejscem do testowania / odczytu operacji odczytu . /dev/zerojest dobrym źródłem do testowania / synchronizacji zapisu . Łączenie tego źródła i miejsca docelowego w jednej operacji nie ma większego sensu. Nie jestem nawet pewien, czy zapewnia to jakąkolwiek znaczącą liczbę kosztów ogólnych.
trociny
@sawdust Odwrotnie, nie?
Jamie
2
Tak, @sawdust, powyższy komentarz jest nieprzyjemny (dla początkujących). of = / dev / sda nadpisze czyjeś partycje dysku twardego, zawartość itp. of = ~ / bigfile.tmp byłby lepszym przykładem użycia ...
Kevin Traas
2
Wiem, że jestem spóźniony na imprezę, ale na wypadek, gdyby ktoś chciał spróbować tego samodzielnie: nie trzeba uruchamiać tego polecenia jako root, a zatem nie ma potrzeby korzystania z sudo.
Roel Schroeven,
@Jamie Nah, to właściwa droga.
Awn

Odpowiedzi:

14

/dev/zerozapewnia niekończący się strumień zerowych bajtów podczas odczytu. Ta funkcja jest udostępniana przez jądro i nie wymaga przydzielania pamięci. Wszystkie zapisy do /dev/nullsą usuwane po cichu.

W rezultacie podczas wykonywania ddsystem generuje 500 megabajtów w zerowych bajtach, które po prostu są odrzucane. Z wyjątkiem bufora tymczasowego żadne dane nie są przechowywane przed, podczas lub po tej operacji.

Szybkość transferu z /dev/zerodo /dev/nullzależy przede wszystkim od szybkości procesora i odpowiednich wywołań systemowych. (W twoim przypadku bufor ma 500 MB, a zatem operacja sprawdza również szybkość pamięci.)

bwDraco
źródło
7

Przetłumaczę ci to polecenie:

dd if=/dev/zero of=/dev/null bs=500M count=1

Zduplikuj dane ( dd) z pliku wejściowego ( if) /dev/zero(wirtualnego nieograniczonego dostarczania 0) do pliku wyjściowego ( of) /dev/null(wirtualnego otworu) za pomocą bloków o rozmiarze 500M ( bs= rozmiar bloku) i powtórz to ( count) tylko raz ( 1).

Ogólnie rzecz biorąc, to polecenie powinno mierzyć tylko pamięć i prędkości magistrali. Może się jednak nie powieść, jeśli nie masz dostępnej 500 MB pamięci RAM. W pewnym sensie pośrednio porównuje również szybkość, z jaką Twój system operacyjny może przydzielić duże porcje pamięci.

mvp
źródło
Jeśli mierzy pamięć, dlaczego pisanie na ramdysku jest znacznie wolniejsze?
agz
2
Ponieważ ramdysk nadal musi zostać sformatowany, aby miał system plików, który musi być utrzymywany przez sterownik jądra. Oznacza to również, że zapis na ramdysku będzie wiązał się z kopiowaniem danych z przestrzeni użytkownika do przestrzeni jądra - niezupełnie za darmo. W przypadku / dev / zero lub / dev / null ten narzut wynosi prawie zero.
mvp
Nigdy wcześniej nie widziałem „zduplikowanych danych”. Pamiętam, jak czytałem na starych stronach podręcznika SunOS, że dd oznacza „kopiuj i konwertuj” (cc zostało zrobione).
Dan Pritts,
5

/ dev / null to czarna dziura. Nie jest dokładny do testowania normalnych operacji zapisu, ponieważ tak naprawdę nie zapisuje na dysk tak jak normalny plik. Zamiast zapisywać dane na dysku, dane są odrzucane natychmiast po zapisaniu na urządzeniu, dzięki czemu zawsze będą szybsze niż zwykłe zapisy lokalne.

/ dev / zero jest podobny do odczytów. Odczytywanie nie wymaga ruchu głowy, jest to po prostu nieograniczona ilość znaków zerowych, więc zawsze będzie czytał szybciej niż jakikolwiek odczyt lokalny.

Innymi słowy, jest to jak testowanie w pustce i nie da dokładnego obrazu tego, co powinny dać normalne lokalne odczyty i zapisy.

MaQleod
źródło
Zakładam też, że Ram nie jest zaangażowany. Zakładam ... więc co to za test ... szybkość zegara?
agz
1
  1. /dev/nullnigdzie nie ma; zapisane na nim dane są po prostu usuwane.

  2. Twój ramdysk ma system plików, z którego musi korzystać. ddmusi utworzyć pozycję systemu plików i napisać zgodnie z zasadami systemu plików. Twój system operacyjny wykorzystuje pamięć do innych rzeczy w tym samym czasie, więc operacja zapisu pobiera to, co zostało.

  3. Dyski twarde inne niż SSD są po prostu wolne, więc jest to również poprawne.

cybernard
źródło