Dlaczego 4k odczytów w testach HDD / SSD jest wolniejszy niż zapis?

12

Dostępnych jest kilka narzędzi testowych do testowania prędkości napędu PC.

Oto przykładowy przykład dysku SATA SSD:

  • Odczyt sekwencyjny: 718,498 MB / s
  • Zapis sekwencyjny: 777,414 MB / s
  • Odczyt losowy 512 KB: 160,541 MB / s
  • Zapis losowy 512 KB: 838,930 MB / s
  • Odczyt losowy 4KB (QD = 1): 26,985 MB / s [6588.1 IOPS]
  • Zapis losowy 4KB (QD = 1): 135,603 MB / s [33106.2 IOPS]
  • Odczyt losowy 4KB (QD = 32): 177,003 MB / s [43213.6 IOPS]
  • Zapis losowy 4KB (QD = 32): 178,397 MB / s [43554.0 IOPS]

m.2 SSD:

  • Odczyt sekwencyjny (Q = 32, T = 1): 829,119 MB / s
  • Zapis sekwencyjny (Q = 32, T = 1): 677,645 MB / s
  • Odczyt losowy 4KiB (Q = 32, T = 1): 744,288 MB / s [181720,7 IOPS]
  • Zapis losowy 4KiB (Q = 32, T = 1): 144,876 MB / s [35370,1 IOPS]
  • Odczyt sekwencyjny (T = 1): 785,600 MB / s
  • Zapis sekwencyjny (T = 1): 789,973 MB / s
  • Losowy odczyt 4KiB (Q = 1, T = 1): 56.585 MB / s [13814.7 IOPS]
  • Zapis losowy 4KiB (Q = 1, T = 1): 170,449 MB / s [41613,5 IOPS]

HDD:

  • Odczyt sekwencyjny: 114,988 MB / s
  • Zapis sekwencyjny: 111.043 MB / s
  • Odczyt losowy 512 KB: 39,260 MB / s
  • Zapis losowy 512 KB: 57,409 MB / s
  • Odczyt losowy 4KB (QD = 1): 0,546 MB / s [133,4 IOPS]
  • Zapis losowy 4KB (QD = 1): 0,757 MB / s [184,9 IOPS]
  • Odczyt losowy 4KB (QD = 32): 1,582 MB / s [386,3 IOPS]
  • Zapis losowy 4KB (QD = 32): 0,700 MB / s [171,0 IOPS]

W każdym przypadku „Losowy odczyt 4KB Q1” jest wolniejszy niż zapis, aw większości przypadków jest odwrotny do „QD32”.

Na niektórych forach ludzie mówią, że jest to ograniczenie dotyczące struktury czipów SSD, ale jak zwykle dyski twarde wykazują takie samo zachowanie, wydaje się, że to inny powód ?!

mgutt
źródło

Odpowiedzi:

9

TL; DR: Dzieje się tak, ponieważ dysk SSD kłamie i mówi, że zapis jest wykonywany wcześniej. Nie da się uciec od tego samego w przypadku odczytów.

Dłuższą wersją odpowiedzi jest buforowanie zapisu.

Zacznijmy od przypadku QD1. Dysk SSD zgłosi zapis jako zakończony w systemie operacyjnym po otrzymaniu danych i zapisaniu go w pamięci podręcznej lokalnie na dysku, ale zanim faktycznie zapisał go w pamięci NAND. To duża różnica, ponieważ zapis danych do NAND jest dość powolny. W przypadku odczytów faktycznie musi odczytać dane z NAND, zanim będzie mógł je odesłać (chyba że wcześniej je odczytało i nadal ma w pamięci podręcznej, ale jest to bardzo mało prawdopodobne w przypadku odczytów losowych).

Minusem tego jest to, że w obliczu nagłej utraty zasilania może dojść do utraty danych zapisanych na dysku SSD, ale nie dotarło to jeszcze do NAND. Niektóre dyski SSD dla przedsiębiorstw zawierają super kondensator, który przechowuje wystarczającą ilość energii, aby zakończyć zapisywanie danych w pamięci podręcznej do pamięci NAND w przypadku nagłej utraty zasilania.

To samo dotyczy dysków twardych, ponieważ również buforują zapisy. Po prostu nie są aż tak agresywni. Dlaczego dysk SSD jest tak agresywny? Aby odpowiedzieć na to pytanie, musimy przejść do rozważenia sprawy QD32, która jest zarówno bardziej skomplikowana, jak i bardziej interesująca.

Nie jest prawdą, co mówisz, że losowe odczyty są generalnie szybsze niż losowe zapisy w QD32. Wiele zależy od konkretnych dysków SSD, na które patrzysz.

Jeśli spojrzymy na losowe odczyty 4k QD1 na wielu dyskach SSD SATA, wszystkie wydają się działać w zakresie 20-30 MB / s. Dlaczego? Jest tak, ponieważ losowe odczyty 4k QD1 dotyczą głównie opóźnień, a nie przepustowości. Opóźnienie pochodzi z trzech części:

  1. Opóźnienie interfejsu SATA / AHCI, które polega na mówieniu napędowi, co ma robić, i wysyłaniu danych.
  2. Sam administrator musi dowiedzieć się, co zrobić z danymi i otrzymanymi instrukcjami.
  3. Czas potrzebny na odczyt lub zapis danych do kości NAND.

Ani 1., ani 3. nie zmieniły się bardzo od dłuższego czasu, dlatego losowe odczyty 1k QD1 również się nie zmieniły.

Niedawne przejście na dyski SSD z SATA / AHCI na PCIe / NVMe znacznie skróciło opóźnienie o 1, dlatego właśnie niektóre dyski SSD m.2 i PCIe wykazują tutaj ogromne ulepszenia.

Jedną rzeczą, którą kontroler SSD może zrobić, aby znacznie pomóc w opóźnieniu, jest odczytywanie lub zapisywanie równolegle do wielu matryc NAND i w ten sposób maskowanie większości opóźnień 3. Jeśli wykonujesz losowe odczyty QD32 4k za pomocą NCQ, SSD może obsłużyć odczyt żądań niesprawnych i upewnij się, że odczytuje z jak największej liczby NAND umiera równolegle, jak to możliwe.

W przypadku losowych zapisów QD32 4k SSD robi coś, co nazywa się łączeniem zapisu. Gdy przychodzi wiele małych żądań zapisu, kontroler SSD buforuje je lokalnie, a gdy zgromadził się wystarczająco duży bufor zapisu, kontroler dzieli go na kawałki o odpowiedniej wielkości i zapisuje je jednocześnie do wielu matryc NAND, ponownie, aby pomóc maskować Opóźnienie NAND. Kolejną zaletą łączenia zapisów jest to, że większość dysków SSD ma obecnie rozmiar strony (najmniejsza ilość, którą można odczytać lub zapisać) większy niż 4k, a łączenie zapisów aż do osiągnięcia rozmiaru strony pozwala uniknąć dużego wzmocnienia zapisu. Aby to zrobić, dyski SSD są tak agresywne w buforowaniu zapisu.

Pan Alpha
źródło