Għaliex l-NVMe tiegħi huwa aktar bil-mod mill-SSD tiegħi?

Għaliex l-NVMe tiegħi huwa aktar bil-mod mill-SSD tiegħi?
F'dan l-artikolu se nħarsu lejn xi wħud mill-sfumaturi tas-subsistema I/O u l-impatt tagħhom fuq il-prestazzjoni.

Ftit ġimgħat ilu kont iffaċċjat bil-mistoqsija dwar għaliex NVMe fuq server wieħed kien aktar bil-mod minn SATA fuq ieħor. Ħarist lejn l-ispeċifikazzjonijiet tas-server u rrealizzajt li din kienet mistoqsija delikata: NVMe kien mis-segment tal-utent, u SSD kien mis-segment tas-server.

Ovvjament, mhuwiex ġust li jitqabblu prodotti minn segmenti differenti f'ambjenti differenti, iżda din mhix tweġiba teknika kompluta. Ejja nistudjaw l-affarijiet bażiċi, nagħmlu esperimenti u nagħtu tweġiba għall-mistoqsija li ssir.

X'inhu fsync u fejn jintuża?

Biex tħaffef ix-xogħol ma 'drives, id-dejta hija buffered, jiġifieri, maħżuna f'memorja volatili sakemm tippreżenta lilha nnifisha opportunità konvenjenti biex issalva l-kontenut tal-buffer għad-drajv. Il-kriterji għal "opportunità" huma ddeterminati mis-sistema operattiva u l-karatteristiċi tad-drajv. Fil-każ ta' nuqqas ta' enerġija, id-dejta kollha fil-buffer tintilef.

Hemm numru ta 'kompiti li fihom trid tkun ċert li l-bidliet għal fajl jinkitbu fuq id-drajv u mhux f'buffer intermedju. Din l-assigurazzjoni tista' tinkiseb billi tuża s-sejħa tas-sistema fsync konformi mal-POSIX. Is-sejħa fsync iġiegħel kitba mill-buffer għad-drive.

Ejja nuru l-effett ta 'buffers b'eżempju artifiċjali fil-forma ta' programm qasir f'C.

#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>

int main(void) {
    /* Открываем файл answer.txt на запись, если его нет -- создаём */
    int fd = open("answer.txt", O_WRONLY | O_CREAT);
    /* Записываем первый набор данных */
    write(fd, "Answer to the Ultimate Question of Life, The Universe, and Everything: ", 71);
    /* Делаем вид, что проводим вычисления в течение 10 секунд */
    sleep(10);
    /* Записываем результат вычислений */
    write(fd, "42n", 3); 

    return 0;
}

Il-kummenti jispjegaw tajjeb is-sekwenza tal-azzjonijiet fil-programm. It-test "ir-risposta għall-mistoqsija ewlenija tal-ħajja, l-Univers u dak kollu" se jkun imbuffer mis-sistema operattiva, u jekk terġa 'tibda s-server billi tagħfas il-buttuna Irrisettja waqt "kalkoli", il-fajl ikun vojt. Fl-eżempju tagħna, it-telf tat-test mhuwiex kwistjoni, għalhekk fsync mhix meħtieġa. Id-databases ma jaqsmux dan l-ottimiżmu.

Id-databases huma programmi kumplessi li jaħdmu fl-istess ħin b'ħafna fajls, għalhekk iridu jkunu żguri li d-data li jiktbu tiġi ssejvjata fuq id-drajv, peress li l-konsistenza tad-data ġewwa d-database tiddependi fuq dan. Id-databases huma ddisinjati biex jirreġistraw it-tranżazzjonijiet kompluti kollha u jkunu lesti li jitilfu l-enerġija fi kwalunkwe ħin. Din l-imġieba teħtieġ l-użu ta 'fsync kontinwament fi kwantitajiet kbar.

X'inhu l-effett ta 'użu frekwenti ta' fsync?

Matul l-I/O normali, is-sistema operattiva tipprova tottimizza l-komunikazzjoni mad-diski, peress li drajvs esterni huma l-aktar bil-mod fil-ġerarkija tal-memorja. Għalhekk, is-sistema operattiva tipprova tikteb dejta kemm jista 'jkun f'aċċess wieħed għad-drajv.

Ejja nuru l-impatt tal-użu ta 'fsync b'eżempju speċifiku. Għandna l-SSDs li ġejjin bħala test drives:

  • Intel® DC SSD S4500 480 GB, konness permezz ta 'SATA 3.2, 6 Gbit/s;
  • Samsung 970 EVO Plus 500GB, konness permezz ta 'PCIe 3.0 x4, ~ 31 Gbit/s.

It-testijiet isiru fuq Intel® Xeon® W-2255 li jħaddem Ubuntu 20.04. Sysbench 1.0.18 jintuża biex jittestja diski. Diviżorju wieħed inħoloq fuq id-diski, ifformattjat bħala ext4. It-tħejjija għat-test tinvolvi l-ħolqien ta' fajls ta' 100 GB:

sysbench --test=fileio --file-total-size=100G prepare

It-testijiet tal-ġiri:

# Без fsync
sysbench --num-threads=16 --test=fileio --file-test-mode=rndrw --file-fsync-freq=0 run

# С fsync после каждой записи
sysbench --num-threads=16 --test=fileio --file-test-mode=rndrw --file-fsync-freq=1 run

Ir-riżultati tat-test huma ppreżentati fit-tabella.

Test
Intel® S4500
Samsung 970 EVO+

Qari mingħajr fsync, MiB/s
5734.89
9028.86

Reġistrazzjoni mingħajr fsync, MiB/s
3823.26
6019.24

Qari b'fsync, MiB/s
37.76
3.27

Reġistrazzjoni b'fsync, MiB/s
25.17
2.18

Huwa faċli li wieħed jara li NVMe mis-segment tal-klijent huwa b'fiduċja fuq quddiem meta s-sistema operattiva nnifisha tiddeċiedi kif taħdem mad-diski, u titlef meta jintuża fsync. Dan iqajjem żewġ mistoqsijiet:

  1. Għaliex il-veloċità tal-qari fit-test mingħajr fsync taqbeż il-bandwidth fiżiku tal-kanal?
  2. Għaliex segment tas-server SSD huwa aħjar biex jittratta għadd kbir ta 'talbiet fsync?

It-tweġiba għall-ewwel mistoqsija hija sempliċi: sysbench jiġġenera fajls mimlija b'żerijiet. Għalhekk, it-test sar fuq 100 gigabytes ta 'żeri. Peress li d-dejta hija uniformi ħafna u prevedibbli, diversi ottimizzazzjonijiet tal-OS jidħlu fis-seħħ u jħaffu l-eżekuzzjoni b'mod sinifikanti.

Jekk tiddubita r-riżultati kollha tas-sysbench, tista' tuża fio.

# Без fsync
fio --name=test1 --blocksize=16k --rw=randrw --iodepth=16 --runtime=60 --rwmixread=60 --fsync=0 --filename=/dev/sdb

# С fsync после каждой записи
fio --name=test1 --blocksize=16k --rw=randrw --iodepth=16 --runtime=60 --rwmixread=60 --fsync=1 --filename=/dev/sdb

Test
Intel® S4500
Samsung 970 EVO+

Qari mingħajr fsync, MiB/s
45.5
178

Reġistrazzjoni mingħajr fsync, MiB/s
30.4
119

Qari b'fsync, MiB/s
32.6
20.9

Reġistrazzjoni b'fsync, MiB/s
21.7
13.9

It-tendenza li l-prestazzjoni tal-NVMe tiddegrada meta tuża fsync tidher b'mod ċar. Tista' tkompli twieġeb it-tieni mistoqsija.

Ottimizzazzjoni jew bluff

Preċedentement, għidna li d-dejta hija maħżuna f'buffer, iżda aħna ma speċifikajna liema waħda, peress li dan ma kienx importanti. Anke issa mhux se nidħlu fl-intricacies tas-sistemi operattivi u se nenfasizzaw żewġ tipi ġenerali ta 'buffers:

  • programm;
  • ħardwer.

Il-buffer tas-softwer jirreferi għall-buffers li jeżistu fis-sistema operattiva, u l-buffer tal-ħardwer jirreferi għall-memorja volatili tal-kontrollur tad-diska. Is-sejħa tas-sistema fsync tibgħat kmand lid-drive biex tikteb data mill-buffer tagħha għall-ħażna prinċipali, iżda m'għandha l-ebda mod kif tivverifika li l-kmand jiġi esegwit b'mod korrett.

Peress li l-SSD juri l-aħjar riżultati, jistgħu jsiru żewġ suppożizzjonijiet:

  • id-diska hija ddisinjata għal tagħbija simili;
  • id-diska "bluffs" u tinjora l-kmand.

L-imġieba diżonesta tas-sewqan tista 'tiġi nnotata jekk twettaq test ta' telf ta 'enerġija. Tista' tiċċekkja dan bi skript diskchecker.pl, li kien maħluqa fis-sena 2005.

Din l-iskrittura teħtieġ żewġ magni fiżiċi - "server" u "klijent". Il-klijent jikteb ammont żgħir ta 'dejta fuq id-diska li qed jiġi ttestjat, isejjaħ fsync, u jibgħat informazzjoni lis-server dwar dak li nkiteb.

# Запускается на сервере
./diskchecker.pl -l [port]

# Запускается на клиенте
./diskchecker.pl -s <server[:port]> create <file> <size_in_MB>

Wara li tmexxi l-iskrittura, trid itfi l-enerġija lill-"klijent" u ma tirritornax is-saħħa għal diversi minuti. Huwa importanti li skonnettja l-persuna li tkun qed tiġi ttestjata mill-elettriku, u mhux biss twettaq għeluq iebes. Wara xi żmien, is-server jista 'jiġi konness u mgħobbi fl-OS. Wara li tgħabbi l-OS għandek bżonn terġa 'tibda diskchecker.pl, imma b’argument jivverifika.

./diskchecker.pl -s <server[:port]> verify <file>

Fl-aħħar tal-kontroll se tara n-numru ta 'żbalji. Jekk hemm 0, allura d-disk għadda mit-test. Biex teskludi koinċidenza xxurtjata għad-diska, l-esperiment jista 'jiġi ripetut diversi drabi.

L-S4500 tagħna ma wera l-ebda żball meta ntilfet l-enerġija, li jfisser li huwa lest għal xogħolijiet b'ħafna sejħiet fsync.

Konklużjoni

Meta tagħżel diski jew konfigurazzjonijiet sħaħ lesti, għandek tiftakar l-ispeċifiċitajiet tal-problemi li jeħtieġ li jiġu solvuti. L-ewwel daqqa t'għajn, jidher ovvju li NVMe, jiġifieri, SSD b'interface PCIe, huwa aktar mgħaġġel mill-SSD SATA "klassiku". Madankollu, kif tgħallimna llum, f’kundizzjonijiet speċifiċi u b’ċerti kompiti dan jista’ ma jkunx il-każ.

Kif tittestja l-komponenti tas-server meta tikri mingħand fornitur IaaS?
Qed nistennewkom fil-kummenti.

Għaliex l-NVMe tiegħi huwa aktar bil-mod mill-SSD tiegħi?

Sors: www.habr.com

Żid kumment