Nei NVMe yangu ichinonoka pane SSD?

Nei NVMe yangu ichinonoka pane SSD?
Muchinyorwa chino, isu tichatarisa mamwe ma nuances eiyo I / O subsystem uye maitiro avo pakuita.

Masvondo mashoma apfuura ndakamhanyira mumubvunzo nei NVMe pane imwe sevha ichinonoka pane SATA pane imwe. Ndakatarisa maitiro emaseva ndikaona kuti waiva mubvunzo wekunyengera: NVMe yakabva kune chikamu chevashandisi, uye SSD yaibva kuchikamu cheseva.

Zviripachena, hazvina kunaka kuenzanisa zvigadzirwa kubva muzvikamu zvakasiyana munzvimbo dzakasiyana, asi iyi haisi mhinduro inopedza tekinoroji. Isu tichadzidza izvo zvekutanga, kuita zviedzo uye kupa mhinduro kumubvunzo wakabvunzwa.

Chii chinonzi fsync uye chinoshandiswa kupi

Kuti ikurumidze kushanda nemadhiraivha, data yakavharwa, ndiko kuti, inochengetwa mundangariro isingachinji kusvikira mukana wakasununguka wazvipa wega kuchengetedza zviri mukati mebuffer kudhiraivha. Mukana maitiro anotarwa neiyo inoshanda sisitimu uye dhiraivha maitiro. Muchiitiko chekutadza kwemagetsi, data rese riri mubuffer rinorasika.

Pane akati wandei emabasa aunofanira kuve nechokwadi chekuti shanduko mufaira yakanyorwa kudhiraivha, uye usanyepa mune yepakati buffer. Iyi vimbiso inogona kuwanikwa nekushandisa iyo POSIX-inoenderana fsync system call. Iyo fsync yekufona inomanikidza kunyora kubva kune buffer kuenda kudhiraivha.

Ngatiratidze mabatiro anoita mabhafa nemuenzaniso wekugadzira muchimiro chepfupi C chirongwa.

#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;
}

Mhinduro dzinotsanangura kutevedzana kwezviito muchirongwa zvakanaka. Chinyorwa "mhinduro kumubvunzo mukuru wehupenyu, zvakasikwa uye zvese izvo" zvichange zvichivharwa neiyo inoshanda sisitimu, uye kana iwe ukatangazve sevha nekudzvanya Reset bhatani panguva ye "kuverenga", iyo faira ichave isina chinhu. Mumuenzaniso wedu, kurasikirwa kwemavara harisi dambudziko, saka fsync haidiwi. Databases haigoverane tarisiro iyi.

Databases mapurogiramu akaoma anoshanda nemafaira akawanda panguva imwe chete, saka vanoda kuve nechokwadi chokuti data yavanonyora ichachengetwa pamotokari, sezvo kuwirirana kwe data mukati me database kunoenderana neizvi. Iyo dhatabhesi yakagadzirirwa kurekodha zvese zvakapedzwa kutengeserana uye gadzirira kudzima kwemagetsi chero nguva. Maitiro aya anokumanikidza kuti ushandise fsync nguva dzose muhuwandu hukuru.

Chii chinokanganisa kushandiswa kazhinji kwefsync

Neyakajairika I/O, sisitimu yekushandisa inoedza kukwidziridza kutaurirana kwedhisiki, sezvo madhiraivha ekunze ari iwo anononoka muhukuru hwendangariro. Naizvozvo, iyo inoshanda sisitimu inoedza kunyora data rakawanda sezvinobvira mune imwe chete yekuwana drive.

Ngatiratidze maitiro ekushandisa fsync nemuenzaniso chaiwo. Tine maSSD anotevera sezvidzidzo zvebvunzo:

  • Intel® DC SSD S4500 480 GB, yakabatana kuburikidza neSATA 3.2, 6 Gb/s;
  • Samsung 970 EVO Plus 500GB, yakabatana kuburikidza nePCIe 3.0 x4, ~31 Gbps.

Miedzo inoitwa paIntel® Xeon® W-2255 inomhanya Ubuntu 20.04. Kuti uedze disks, sysbench 1.0.18 inoshandiswa. Madhisiki ane chikamu chimwe chete chakarongwa se ext4. Kugadzirira bvunzo kugadzira 100 GB mafaera:

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

Kumhanya bvunzo:

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

Mibairo yebvunzo inoratidzwa mutafura.

Muedzo
Intel® S4500
Samsung 970 EVO+

Verenga pasina fsync, MiB/s
5734.89
9028.86

Nyora pasina fsync, MiB/s
3823.26
6019.24

Kuverenga nefsync, MiB/s
37.76
3.27

Kurekodha nefsync, MiB/s
25.17
2.18

Zviri nyore kuona kuti NVMe kubva kuchikamu chemutengi inotungamira zvine chivimbo kana iyo inoshanda sisitimu pachayo inosarudza maitiro ekushanda nemadhisiki, uye inorasikirwa kana fsync inoshandiswa. Izvi zvinomutsa mibvunzo miviri:

  1. Nei kukurumidza kuverenga kuchipfuura bandwidth yemuviri yekubatanidza muyedzo pasina fsync?
  2. Nei chikamu cheseva SSD chiri nani pakubata nhamba yakakura yefsync zvikumbiro?

Mhinduro kumubvunzo wekutanga iri nyore: sysbench inogadzira zero-akazara mafaera. Nokudaro, muedzo wakaitwa pamusoro pe100 gigabytes ye zero. Sezvo iyo data iri yunifomu uye inofanotaurwa, akasiyana OS optimizations anouya mukutamba, uye ivo vanomhanyisa zvakanyanya kuuraya.

Kana iwe ukabvunza zvese zvawanikwa zve sysbench, saka unogona kushandisa 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

Muedzo
Intel® S4500
Samsung 970 EVO+

Verenga pasina fsync, MiB/s
45.5
178

Nyora pasina fsync, MiB/s
30.4
119

Kuverenga nefsync, MiB/s
32.6
20.9

Kurekodha nefsync, MiB/s
21.7
13.9

Maitiro ekudonha kwekuita muNVMe kana uchishandisa fsync inoonekwa zvakajeka. Unogona kuenda kumubvunzo wechipiri.

Optimization kana bluff

Pakutanga takati iyo data inochengetwa mubuffer, asi hatina kutsanangura kuti ndeipi, sezvo yanga isina kukosha. Kunyangwe iye zvino isu hatisi kuzoongorora kuomesesa kweanoshanda masisitimu uye kuburitsa maviri akajairwa marudzi emabuffers:

  • program;
  • hardware.

Iyo software buffer inoreva mabuffers ari musystem yekushandisa, uye hardware buffer inoreva kusinga rangarirwe kwedhisiki controller. Iyo fsync system call inotumira murairo kudhiraivha yekunyora data kubva kune yayo buffer kune iyo huru yekuchengetedza, asi haina nzira yekudzora kuita kwayo kwekuraira.

Sezvo iyo SSD ichiita zvirinani, fungidziro mbiri dzinogona kuitwa:

  • iyo diski yakagadzirirwa mutoro wechirongwa chakafanana;
  • iyo disk "bluffs" uye inofuratira murairo.

Kusavimbika maitiro ekutyaira anogona kucherechedzwa kana iwe ukaita bvunzo nekutadza kwemagetsi. Unogona kutarisa izvi ne script. diskchecker.pl, ndizvozvo yakasimbiswa muna 2005 gore.

Ichi chinyorwa chinoda michina miviri yemuviri - "server" uye "client". Mutengi anonyora diki data kudhiraivha pasi pekuyedzwa, anofona fsync, uye anotumira sevha ruzivo nezve zvakanyorwa.

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

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

Mushure mekushandisa script, zvinodikanwa kubvisa-simba "mutengi" uye usadzore simba kwemaminitsi akati wandei. Zvakakosha kubvisa chinyorwa chekuedza kubva kumagetsi, uye kwete kungoita kuvhara kwakaoma. Mushure mechinguva, sevha inogona kubatanidzwa uye kurodha muOS. Mushure mekuvhara OS, unofanirwa kutanga zvakare diskchecker.pl, asi nenharo chengetedza.

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

Pakupera kwecheki, iwe uchaona nhamba yezvikanganiso. Kana ivo vari 0, ipapo diski yakapfuura bvunzo. Kuti usabvisa musanganiswa wemamiriro ezvinhu akabudirira kune diski, kuedza kunogona kudzokororwa kakawanda.

Yedu S4500 yakaratidza kusarasikirwa kwesimba kukanganisa, zvinoreva kuti yakagadzirira mitoro ine akawanda fsync mafoni.

mhedziso

Paunosarudza dhisiki kana zvigadziriso zvakagadzirirwa zvakagadzirirwa, unofanirwa kuyeuka zvakananga zvemabasa anoda kugadziriswa. Pakutanga kuona, zvinoita sezviri pachena kuti NVMe, kureva, SSD ine PCIe interface, inokurumidza kupfuura "yekirasi" SATA SSD. Zvisinei, sezvatakanzwisisa nhasi, mumamiriro ezvinhu chaiwo uye nemamwe mabasa izvi zvingasava zvakadaro.

Iwe unoyedza sei sevha zvikamu kana uchirenda kubva kuIaaS mupi?
Takakumirirai mumacomments.

Nei NVMe yangu ichinonoka pane SSD?

Source: www.habr.com

Voeg