Kungani i-NVMe yami ihamba kancane kune-SSD?

Kungani i-NVMe yami ihamba kancane kune-SSD?
Kulesi sihloko sizobheka amanye ama-nuances we-subsystem ye-I/O nomthelela wawo ekusebenzeni.

Emasontweni ambalwa edlule ngangibhekene nombuzo wokuthi kungani i-NVMe kuseva eyodwa yayihamba kancane kune-SATA kwenye. Ngabheka ukucaciswa kweseva futhi ngabona ukuthi lona bekuwumbuzo okhohlisayo: I-NVMe ibisuka engxenyeni yomsebenzisi, futhi i-SSD ibisuka engxenyeni yeseva.

Ngokusobala, akulungile ukuqhathanisa imikhiqizo evela kumasegimenti ahlukene ezindaweni ezihlukene, kodwa lokhu akuyona impendulo yobuchwepheshe ephelele. Masifunde izinto eziyisisekelo, senze izivivinyo futhi sinikeze impendulo yombuzo obuziwe.

Iyini i-fsync futhi isetshenziswa kuphi?

Ukusheshisa umsebenzi ngamadrayivu, idatha igcinwa ku-buffer, okungukuthi, igcinwa kumemori eguquguqukayo kuze kube yilapho kuvela ithuba elikahle lokulondoloza okuqukethwe ku-buffer kudrayivu. Imibandela "yethuba" inqunywa isistimu yokusebenza nezici zedrayivu. Esimeni sokuhluleka kwamandla, yonke idatha ekubhafa izolahleka.

Kunenombolo yemisebenzi okudingeka uqiniseke kuyo ukuthi izinguquko zefayela zibhalwa kudrayivu hhayi kubhafa emaphakathi. Lesi siqiniseko singatholwa ngokusebenzisa ikholi yesistimu ye-POSIX ehambisana ne-fsync. Ukushayela i-fsync kuphoqa ukubhala kusuka kusigcinalwazi kuye kudrayivu.

Ake sibonise umthelela wamabhafa ngesibonelo sokwenziwa ngendlela yohlelo olufushane ku-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;
}

Amazwana achaza kahle ukulandelana kwezenzo ohlelweni. Umbhalo othi "impendulo yombuzo oyinhloko wokuphila, i-Universe nakho konke lokho" uzovinjelwa yisistimu yokusebenza, futhi uma uqala kabusha iseva ngokucindezela inkinobho yokusetha kabusha phakathi "nezibalo", ifayela lizobe lingenalutho. Esibonelweni sethu, ukulahlekelwa umbhalo akuyona inkinga, ngakho-ke i-fsync ayidingeki. Izizindalwazi azihlanganyeli ngaleli themba.

Imininingwane iyizinhlelo eziyinkimbinkimbi ezisebenza ngasikhathi sinye ngamafayela amaningi, ngakho-ke zifuna ukuqiniseka ukuthi idatha abayibhalayo izogcinwa kudrayivu, ngoba ukuvumelana kwedatha ngaphakathi kwedatha kuncike kulokhu. Imininingo egciniwe iklanyelwe ukurekhoda yonke imisebenzi eqediwe futhi ilungele ukuphelelwa amandla nganoma yisiphi isikhathi. Lokhu kuziphatha kudinga ukusetshenziswa kwe-fsync njalo ngamanani amakhulu.

Uyini umphumela wokusetshenziswa njalo kwe-fsync?

Ngesikhathi se-I/O evamile, isistimu yokusebenza izama ukuthuthukisa ukuxhumana namadiski, njengoba amadrayivu angaphandle ahamba kancane kuhlelo lwenkumbulo. Ngakho-ke, uhlelo lokusebenza luzama ukubhala idatha eningi ngangokunokwenzeka ekufinyeleleni okukodwa kudrayivu.

Ake sibonise umthelela wokusebenzisa i-fsync ngesibonelo esithile. Sinama-SSD alandelayo njengamadrayivu wokuhlola:

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

Ukuhlolwa kwenziwa ku-Intel® Xeon® W-2255 esebenzisa Ubuntu 20.04. I-Sysbench 1.0.18 isetshenziselwa ukuhlola amadiski. Ingxenye eyodwa idaliwe kumadiski, ifomethwe njenge-ext4. Ukulungiselela ukuhlolwa kuhlanganisa ukudala amafayela angu-100 GB:

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

Ukuhlola okusebenzayo:

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

Imiphumela yokuhlolwa yethulwa etafuleni.

Ukuhlolwa
I-Intel® S4500
I-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 nge-fsync, i-MiB/s
37.76
3.27

Ukuqopha nge-fsync, MiB/s
25.17
2.18

Kulula ukubona ukuthi i-NVMe evela engxenyeni yeklayenti ihola ngokuzethemba lapho isistimu yokusebenza ngokwayo inquma ukuthi izosebenza kanjani ngamadiski, futhi ilahlekelwe lapho kusetshenziswa i-fsync. Lokhu kuphakamisa imibuzo emibili:

  1. Kungani isivinini sokufunda esivivinyweni ngaphandle kwe-fsync sidlula umkhawulokudonsa obonakalayo wesiteshi?
  2. Kungani ingxenye yeseva ye-SSD ingcono ekuphatheni izinombolo ezinkulu zezicelo ze-fsync?

Impendulo yombuzo wokuqala ilula: i-sysbench ikhiqiza amafayela agcwaliswe ngoziro. Ngakho, ukuhlolwa kwenziwa phezu gigabytes 100 of zero. Njengoba idatha ifana kakhulu futhi ibikezelwa, ukulungiselelwa okuhlukahlukene kwe-OS kuyaqala ukusebenza futhi kusheshise kakhulu ukwenziwa.

Uma ubuza yonke imiphumela ye-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

Ukuhlolwa
I-Intel® S4500
I-Samsung 970 EVO+

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

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

Ukufunda nge-fsync, i-MiB/s
32.6
20.9

Ukuqopha nge-fsync, MiB/s
21.7
13.9

Ukuthambekela kokusebenza kwe-NVMe ukwehlisa izinga lapho usebenzisa i-fsync kubonakala ngokucacile. Ungadlulela ekuphenduleni umbuzo wesibili.

Ukuthuthukisa noma i-bluff

Ngaphambilini, sithe idatha igcinwa ku-buffer, kodwa asizange sicacise ukuthi iyiphi, njengoba lokhu bekungabalulekile. Ngisho namanje ngeke sihlole ubunkimbinkimbi bezinhlelo zokusebenza futhi sizogqamisa izinhlobo ezimbili ezijwayelekile zamabhafa:

  • uhlelo;
  • hardware.

I-software buffer ibhekisela kumabhafa akhona ohlelweni lokusebenza, futhi i-hardware buffer ibhekisela kumemori eguquguqukayo yesilawuli sediski. Ucingo lwesistimu ye-fsync luthumela umyalo kudrayivu ukuze ibhale idatha isuka ku-buffer yayo iye endaweni yokugcina enkulu, kodwa ayinayo indlela yokuqinisekisa ukuthi umyalo wenziwe ngendlela efanele.

Njengoba i-SSD ibonisa imiphumela engcono kakhulu, kungenziwa ukucabanga okubili:

  • idiski yakhelwe umthwalo ofanayo;
  • idiski "i-bluffs" futhi indiva umyalo.

Ukuziphatha kokungethembeki kwedrayivu kungaqashelwa uma wenza ukuhlolwa kokulahlekelwa amandla. Ungahlola lokhu ngombhalo diskchecker.pl, kwakuyi emisiwe ngonyaka we-2005.

Lesi script sidinga imishini emibili ebonakalayo - "iseva" kanye "neklayenti". Iklayenti libhala inani elincane ledatha kudiski ngaphansi kokuhlolwa, lishayela i-fsync, futhi lithumele ulwazi kuseva mayelana nalokho okubhaliwe.

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

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

Ngemva kokusebenzisa iskripthi, kufanele uvale amandla "kuklayenti" futhi ungawabuyiseli amandla imizuzu embalwa. Kubalulekile ukunqamula umuntu ohlolwayo kugesi, hhayi nje ukuvala shaqa kanzima. Ngemva kwesikhathi esithile, iseva ingaxhunywa futhi ilayishwe ku-OS. Ngemva kokulayisha i-OS udinga ukuyiqala futhi diskchecker.pl, kodwa ngengxabano qinisekisa.

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

Ekupheleni kwesheke uzobona inani lamaphutha. Uma kukhona u-0, khona-ke idiski iphumelele ukuhlolwa. Ukuze ukhiphe ukuhlangana kwenhlanhla kwediski, ukuhlolwa kungaphinda izikhathi ezimbalwa.

I-S4500 yethu ayizange ibonise amaphutha lapho amandla ephela, okusho ukuthi isilungele ukuthwala kanzima ngezingcingo eziningi ze-fsync.

isiphetho

Lapho ukhetha ama-disks noma konke ukulungiselelwa okwenziwe ngomumo, kufanele ukhumbule imininingwane yezinkinga ezidinga ukuxazululwa. Uma uthi nhlá, kubonakala kusobala ukuthi i-NVMe, okungukuthi, i-SSD ene-PCIe interface, ishesha kune-SATA SSD “yakudala”. Nokho, njengoba sifundile namuhla, ezimweni ezithile kanye nemisebenzi ethile kungase kungabi njalo.

Uzihlola kanjani izingxenye zeseva lapho uqasha kumhlinzeki we-IaaS?
Silinde wena kumazwana.

Kungani i-NVMe yami ihamba kancane kune-SSD?

Source: www.habr.com

Engeza amazwana