Me yasa NVMe dina yayi hankali fiye da SSD?

Me yasa NVMe dina yayi hankali fiye da SSD?
A cikin wannan labarin, za mu kalli wasu daga cikin nuances na tsarin I / O da tasirin su akan aiki.

Makonni biyu da suka gabata na shiga cikin tambayar dalilin da yasa NVMe akan sabar ɗaya yayi hankali fiye da SATA akan wani. Na kalli halaye na sabobin kuma na gane cewa tambaya ce ta dabara: NVMe daga sashin mai amfani ne, kuma SSD ya kasance daga sashin uwar garken.

Babu shakka, ba daidai ba ne a kwatanta samfurori daga sassa daban-daban a cikin yanayi daban-daban, amma wannan ba cikakkiyar amsa ba ce ta fasaha. Za mu yi nazarin abubuwan yau da kullun, gudanar da gwaje-gwaje kuma mu ba da amsa ga tambayar da aka yi.

Menene fsync kuma a ina ake amfani dashi

Don hanzarta aiki tare da faifai, ana adana bayanai, wato, adana su a cikin ƙwaƙwalwar ajiya mara ƙarfi har sai wata dama mai dacewa ta ba da kanta don adana abubuwan da ke cikin buffer zuwa tuƙi. Ana ƙayyade ma'aunin dama ta tsarin aiki da halayen tuƙi. A yayin gazawar wutar lantarki, duk bayanan da ke cikin buffer za su yi asara.

Akwai ayyuka da yawa waɗanda kuke buƙatar tabbatar da cewa an rubuta canje-canje a cikin fayil ɗin zuwa faifai, kuma kada ku kwanta a cikin madaidaicin buffer. Ana iya samun wannan tabbacin ta amfani da tsarin fsync mai yarda da POSIX. Kiran fsync yana tilasta rubutawa daga buffer zuwa drive.

Bari mu nuna tasirin buffers tare da misalin wucin gadi a cikin nau'in ɗan gajeren shirin 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;
}

Sharhi sun bayyana jerin ayyuka a cikin shirin da kyau. Rubutun "amsar babbar tambaya ta rayuwa, sararin samaniya da duk abin" za a buffer ta tsarin aiki, kuma idan kun sake kunna sabar ta latsa maɓallin Sake saiti yayin "lissafi", fayil ɗin zai zama fanko. A cikin misalinmu, asarar rubutu ba matsala ba ce, don haka fsync ba a buƙata. Rukunin bayanai ba sa raba wannan kyakkyawan fata.

Databases shirye-shirye ne masu rikitarwa waɗanda ke aiki tare da fayiloli da yawa a lokaci guda, don haka suna son tabbatar da cewa bayanan da suka rubuta za a adana su a kan tuƙi, tunda daidaiton bayanan da ke cikin rumbun adana bayanai ya dogara da wannan. An tsara ma'ajin bayanai don yin rikodin duk ma'amaloli da aka kammala kuma su kasance a shirye don katsewar wutar lantarki a kowane lokaci. Wannan halin yana wajabta muku amfani da fsync akai-akai da yawa.

Abin da ke shafar yawan amfani da fsync

Tare da I/O na al'ada, tsarin aiki yana ƙoƙarin haɓaka sadarwar faifai, tunda na'urori na waje sune mafi hankali a cikin tsarin ƙwaƙwalwar ajiya. Saboda haka, tsarin aiki yana ƙoƙari ya rubuta bayanai da yawa kamar yadda zai yiwu a cikin hanyar shiga ɗaya.

Bari mu nuna tasirin amfani da fsync tare da takamaiman misali. Muna da SSDs masu zuwa a matsayin abubuwan gwaji:

  • Intel® DC SSD S4500 480 GB, an haɗa ta SATA 3.2, 6 Gb/s;
  • Samsung 970 EVO Plus 500GB, an haɗa ta PCIe 3.0 x4, ~ 31 Gbps.

Ana gudanar da gwaje-gwaje akan Intel® Xeon® W-2255 da ke tafiyar da Ubuntu 20.04. Don gwada faifai, ana amfani da sysbench 1.0.18. Fayilolin suna da bangare guda da aka tsara azaman ext4. Shiri don gwajin shine ƙirƙirar fayilolin GB 100:

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

Gwajin gudu:

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

Ana gabatar da sakamakon gwajin a cikin tebur.

Gwaji
Intel® S4500
Samsung 970 EVO+

Karanta ba tare da fsync ba, MiB/s
5734.89
9028.86

Rubuta ba tare da fsync ba, MiB/s
3823.26
6019.24

Karatu tare da fsync, MiB/s
37.76
3.27

Yin rikodi tare da fsync, MiB/s
25.17
2.18

Yana da sauƙi a ga cewa NVMe daga ɓangaren abokin ciniki da amincewa yana jagorantar lokacin da tsarin aiki da kansa ya yanke shawarar yadda ake aiki tare da faifai, kuma ya yi hasara lokacin amfani da fsync. Wannan ya haifar da tambayoyi guda biyu:

  1. Me yasa saurin karantawa ya wuce bandwidth na jiki na mahaɗin a cikin gwajin ba tare da fsync ba?
  2. Me yasa sashin uwar garken SSD ya fi kyau wajen sarrafa yawan buƙatun fsync?

Amsar tambayar farko mai sauƙi ce: sysbench yana haifar da fayilolin da ba su cika ba. Don haka, an gudanar da gwajin sama da gigabytes 100 na sifili. Tunda bayanan sun kasance iri ɗaya kuma ana iya faɗi, haɓaka OS daban-daban suna shiga cikin wasa, kuma suna hanzarta aiwatar da aiwatarwa.

Idan kun tambayi duk sakamakon sysbench, to zaku iya amfani da 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

Gwaji
Intel® S4500
Samsung 970 EVO+

Karanta ba tare da fsync ba, MiB/s
45.5
178

Rubuta ba tare da fsync ba, MiB/s
30.4
119

Karatu tare da fsync, MiB/s
32.6
20.9

Yin rikodi tare da fsync, MiB/s
21.7
13.9

Halin zuwa raguwar aiki a cikin NVMe lokacin amfani da fsync yana bayyane a sarari. Kuna iya ci gaba zuwa tambaya ta biyu.

Ingantawa ko bluff

Tun da farko mun ce an adana bayanan a cikin ma'auni, amma ba a bayyana a cikin wanne ba, tunda ba shi da mahimmanci. Ko a yanzu ba za mu shiga cikin rikitattun tsarin aiki ba kuma ba za mu ware nau'ikan buffer guda biyu ba:

  • shirin;
  • hardware.

Maɓallin software yana nufin buffers ɗin da ke cikin tsarin aiki, kuma buffer hardware yana nufin ƙayyadadden ƙwaƙwalwar ajiya na mai sarrafa faifai. Kiran tsarin fsync yana aika umarni zuwa ga tuƙi don rubuta bayanai daga buffer ɗinsa zuwa babban ma'ajiyar, amma ba shi da wata hanya ta sarrafa daidai aiwatar da umarnin.

Tunda SSD yayi aiki mafi kyau, ana iya yin zato guda biyu:

  • an tsara faifai don nauyin nau'in shirin irin wannan;
  • faifan "bluffs" kuma yayi watsi da umarnin.

Za a iya lura da halin rashin gaskiya na tuƙi idan kun yi gwaji tare da gazawar wuta. Kuna iya duba wannan tare da rubutun. diskchecker.pl, wanda ya kasance halitta a 2005 shekara.

Wannan rubutun yana buƙatar inji guda biyu - "uwar garken" da "abokin ciniki". Abokin ciniki yana rubuta ƙaramin adadin bayanai zuwa tuƙi a ƙarƙashin gwaji, ya kira fsync, kuma ya aika bayanin uwar garken game da abin da aka rubuta.

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

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

Bayan gudanar da rubutun, ya zama dole don kashe "abokin ciniki" kuma kada ku dawo da wutar lantarki na mintuna da yawa. Yana da mahimmanci a cire haɗin batun gwajin daga wutar lantarki, kuma ba kawai yin kashewa mai wuya ba. Bayan ɗan lokaci, ana iya haɗa uwar garken kuma a loda shi cikin OS. Bayan booting da OS, kuna buƙatar sake farawa diskchecker.pl, amma da jayayya Tabbatar.

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

A ƙarshen rajistan, za ku ga adadin kurakurai. Idan sun kasance 0, to faifan ya ci gwajin. Don ware haɗakar yanayin da ke da nasara ga faifai, ana iya maimaita gwajin sau da yawa.

S4500 ɗin mu bai nuna kurakuran asarar wuta ba, wanda ke nufin yana shirye don lodi tare da yawancin kiran fsync.

ƙarshe

Lokacin zabar faifai ko duka shirye-shiryen da aka yi, ya kamata ku tuna da takamaiman ayyukan da ake buƙatar warwarewa. A kallo na farko, da alama a bayyane yake cewa NVMe, wato, SSD tare da ƙirar PCIe, ya fi sauri fiye da “classic” SATA SSD. Duk da haka, kamar yadda muka fahimta a yau, a cikin takamaiman yanayi kuma tare da wasu ayyuka wannan bazai zama haka ba.

Ta yaya kuke gwada abubuwan uwar garken lokacin yin hayar daga mai bada IaaS?
Muna jiran ku a cikin sharhi.

Me yasa NVMe dina yayi hankali fiye da SSD?

source: www.habr.com

Add a comment