Kutheni i-NVMe yam icotha kune-SSD?

Kutheni i-NVMe yam icotha kune-SSD?
Kweli nqaku siza kujonga ezinye ze-nuances ze-I / O subsystem kunye nefuthe labo ekusebenzeni.

Kwiiveki ezimbalwa ezidlulileyo bendijongene nombuzo wokuba kutheni i-NVMe kwiseva enye yayicotha kune-SATA kwenye. Ndajonga iinkcukacha zeseva kwaye ndaqonda ukuba lo ngumbuzo okhohlisayo: I-NVMe yayisuka kwicandelo lomsebenzisi, kwaye i-SSD yayisuka kwicandelo lomncedisi.

Ngokucacileyo, akulungile ukuthelekisa iimveliso ezivela kumacandelo ahlukeneyo kwiindawo ezahlukeneyo, kodwa oku akusiyo impendulo epheleleyo yobugcisa. Masifunde izinto ezisisiseko, senze imifuniselo kwaye sinikeze impendulo kumbuzo obuziweyo.

Yintoni i-fsync kwaye isetyenziswa phi?

Ukukhawulezisa umsebenzi ngeedrive, idatha igcinwe kwi-buffer, oko kukuthi, igcinwe kwimemori eguquguqukayo de ithuba elifanelekileyo libonise ukugcina imixholo ye-buffer kwi-drive. Iikhrayitheriya ze "ithuba" zichongwa yinkqubo yokusebenza kunye neempawu zokuqhuba. Kwimeko yokusilela kombane, yonke idatha ekwi-buffer iya kulahleka.

Kukho inani lemisebenzi apho kufuneka uqiniseke ukuba utshintsho kwifayile lubhaliwe kwi-drive kwaye hayi kwi-buffer ephakathi. Esi siqinisekiso sinokufunyanwa ngokusebenzisa ifowuni ye-POSIX ehambelanayo yenkqubo yefsync. Ukufowunela i-fsync inyanzela ukubhala ukusuka kwisithinteli ukuya kwi-drive.

Masibonise isiphumo se-buffers ngomzekelo wokwenziwa ngendlela yenkqubo emfutshane kwi-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;
}

Amagqabantshintshi achaza kakuhle ukulandelelana kwezenzo kwinkqubo. Umbhalo othi "impendulo yombuzo oyintloko wobomi, i-Universe kunye nayo yonke into" iya kutshatyalaliswa yinkqubo yokusebenza, kwaye ukuba uqala kwakhona umncedisi ngokucinezela iqhosha lokuseta kwakhona ngexesha "lokubala", ifayile iya kuba ingenanto. Kumzekelo wethu, ukulahleka kombhalo akuyongxaki, ngoko ke i-fsync ayidingeki. Oovimba beenkcukacha abalaneli neli themba.

Iidatabase ziyinkqubo eyinkimbinkimbi esebenza ngaxeshanye kunye neefayile ezininzi, ngoko zifuna ukuqiniseka ukuba idatha abayibhalayo iya kugcinwa kwi-drive, ekubeni ukuhambelana kwedatha ngaphakathi kwedatha kuxhomekeke kule nto. Iidatabase zenzelwe ukurekhoda zonke iintengiselwano ezigqityiweyo kwaye zilungele ukulahlekelwa amandla nangaliphi na ixesha. Oku kuziphatha kufuna ukusetyenziswa kwe-fsync rhoqo ngobuninzi obukhulu.

Yintoni umphumo wokusetyenziswa rhoqo kwe-fsync?

Ngexesha lesiqhelo le-I/O, inkqubo yokusebenza izama ukukhulisa unxibelelwano ngeediski, kuba iidrive zangaphandle zezona zicothayo kubume bememori. Ngoko ke, inkqubo yokusebenza izama ukubhala idatha eninzi kangangoko kunokwenzeka ekufikeleleni enye kwi-drive.

Masibonise impembelelo yokusebenzisa i-fsync ngomzekelo othile. Sinezi-SSD zilandelayo njengovavanyo lokuqhuba:

  • I-Intel® DC SSD S4500 480 GB, ixhunywe nge-SATA 3.2, 6 Gbit / s;
  • I-Samsung 970 EVO Plus 500GB, iqhagamshelwe nge-PCIe 3.0 x4, ~31 Gbit/s.

Uvavanyo lwenziwa kwi-Intel® Xeon® W-2255 esebenzisa Ubuntu 20.04. I-Sysbench 1.0.18 isetyenziselwa ukuvavanya iidiski. Isahlulo esinye senziwe kwiidiski, zifomathwe njenge ext4. Ukulungiselela uvavanyo kubandakanya ukudala iifayile ze-100 GB:

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

Ukuqhuba uvavanyo:

# Без 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

Iziphumo zovavanyo zinikwe kwitheyibhile.

Uvavanyo
I-Intel® S4500
Samsung 970 EVO+

Ukufunda ngaphandle kwe-fsync, i-MiB/s
5734.89
9028.86

Ukurekhoda ngaphandle kwe-fsync, i-MiB/s
3823.26
6019.24

Ukufunda ngefsync, MiB/s
37.76
3.27

Ukurekhoda nge-fsync, i-MiB/s
25.17
2.18

Kulula ukubona ukuba i-NVMe evela kwicandelo lomxhasi ikhokela ngokuzithemba xa inkqubo yokusebenza ngokwayo igqiba indlela yokusebenza ngeediski, kwaye ilahlekelwe xa i-fsync isetyenziswa. Oku kuphakamisa imibuzo emibini:

  1. Kutheni isantya sokufunda kuvavanyo ngaphandle kwe-fsync sidlula i-bandwidth yomzimba yesitishi?
  2. Kutheni i-SSD yecandelo lomncedisi ingcono ekuphatheni amanani amakhulu ezicelo ze-fsync?

Impendulo kumbuzo wokuqala ilula: i-sysbench ivelisa iifayile ezizaliswe ngo-zero. Ngaloo ndlela, uvavanyo lwenziwa ngaphezu kwe-100 gigabytes zero. Kuba idatha ifana kakhulu kwaye iqikelelwa, ulungelelwaniso olwahlukeneyo lwe-OS luya kudlala kwaye lukhawulezise ukwenziwa.

Ukuba ubuza zonke iziphumo ze-sysbench, ungasebenzisa i-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

Uvavanyo
I-Intel® S4500
Samsung 970 EVO+

Ukufunda ngaphandle kwe-fsync, i-MiB/s
45.5
178

Ukurekhoda ngaphandle kwe-fsync, i-MiB/s
30.4
119

Ukufunda ngefsync, MiB/s
32.6
20.9

Ukurekhoda nge-fsync, i-MiB/s
21.7
13.9

Ukuthambekela kokusebenza kwe-NVMe ukuthotywa xa usebenzisa i-fsync kubonakala ngokucacileyo. Ungaqhubela phambili ekuphenduleni umbuzo wesibini.

Ukuphucula okanye i-bluff

Ngaphambili, sithe idatha igcinwe kwi-buffer, kodwa asizange sichaze ukuba yeyiphi na, kuba le nto yayingabalulekanga. Nangoku asizukungena kubugocigoci beenkqubo zokusebenza kwaye siya kuqaqambisa iindidi ezimbini eziqhelekileyo zezithinteli:

  • inkqubo;
  • hardware.

Isithinteli sesoftware sibhekisa kwizithinteli ezikhoyo kwinkqubo yokusebenza, kwaye isithinteli sehardware sibhekisa kwinkumbulo eguquguqukayo yomlawuli wedisk. Umnxeba wenkqubo ye-fsync uthumela umyalelo kwi-drive ukubhala idatha kwi-buffer yayo ukuya kwindawo yokugcina, kodwa ayinayo indlela yokuqinisekisa ukuba umyalelo uphunyezwe ngokuchanekileyo.

Ekubeni i-SSD ibonisa iziphumo ezilungileyo, iingcamango ezimbini zinokwenziwa:

  • idiski yenzelwe umthwalo ofanayo;
  • idiski “bluffs” kwaye ayiwuhoyi umyalelo.

Ukuziphatha kokunganyaniseki kwe-drive kunokuqatshelwa ukuba uqhuba uvavanyo lokulahlekelwa kwamandla. Ungajonga oku ngescript diskchecker.pl, leyo ibiyi isekiwe kunyaka 2005.

Le script ifuna oomatshini ababini bomzimba - "umncedisi" kunye "nomthengi". Umxhasi ubhala inani elincinci ledatha kwidiski phantsi kovavanyo, ubiza i-fsync, kwaye uthumela ulwazi kumncedisi malunga noko kubhaliweyo.

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

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

Emva kokuqhuba iskripthi, kufuneka ucime amandla "kumthengi" kwaye ungabuyiseli amandla kwimizuzu emininzi. Kubalulekile ukuqhawula uqhagamshelo lomntu ovavanywayo kumbane, kwaye hayi ukwenza ucimo olunzima. Emva kwexesha elithile, iseva inokudityaniswa kwaye ilayishwe kwi-OS. Emva kokulayisha i-OS kufuneka uyiqale kwakhona diskchecker.pl, kodwa ngengxabano Qinisekisa.

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

Ekupheleni kwetshekhi uza kubona inani leempazamo. Ukuba kukho i-0, ke idiski iphumelele uvavanyo. Ukungabandakanyi inhlanhla kwidiski, uvavanyo lunokuphinda luphindwe amaxesha amaninzi.

I-S4500 yethu ayizange ibonise iimpazamo xa amandla elahlekile, oku kuthetha ukuba ilungele imithwalo yomsebenzi kunye neefowuni ezininzi ze-fsync.

isiphelo

Xa ukhetha iidiski okanye ulungelelwaniso olupheleleyo, kufuneka ukhumbule iinkcukacha zeengxaki ezifuna ukusonjululwa. Ukuqala nje, kubonakala kucacile ukuba i-NVMe, oko kukuthi, i-SSD ene-interface ye-PCIe, ikhawuleza kune-"classic" ye-SATA SSD. Nangona kunjalo, njengoko sifundile namhlanje, kwiimeko ezithile kunye nemisebenzi ethile le nto ayinakuba njalo.

Uvavanya njani amacandelo eseva xa urenta kumboneleli we-IaaS?
Silinde wena kwizimvo.

Kutheni i-NVMe yam icotha kune-SSD?

umthombo: www.habr.com

Yongeza izimvo