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:
- Għaliex il-veloċità tal-qari fit-test mingħajr fsync taqbeż il-bandwidth fiżiku tal-kanal?
- 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
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.
Sors: www.habr.com