Kini idi ti NVMe mi fi lọra ju SSD kan?

Kini idi ti NVMe mi fi lọra ju SSD kan?
Ninu nkan yii, a yoo wo diẹ ninu awọn nuances ti I / O subsystem ati ipa wọn lori iṣẹ.

Ni ọsẹ meji sẹyin Mo sare sinu ibeere idi ti NVMe lori olupin kan lọra ju SATA lori omiiran. Mo wo awọn abuda ti awọn olupin ati rii pe o jẹ ibeere ẹtan: NVMe wa lati apakan olumulo, ati SSD wa lati apakan olupin naa.

O han ni, ko tọ lati ṣe afiwe awọn ọja lati awọn apakan oriṣiriṣi ni awọn agbegbe oriṣiriṣi, ṣugbọn eyi kii ṣe idahun imọ-ẹrọ pipe. Jẹ ki a ṣe iwadi awọn ipilẹ, ṣe awọn idanwo ati fun idahun si ibeere ti o farahan.

Kini fsync ati nibo ni o ti lo?

Lati yara iṣẹ pẹlu awọn awakọ, data ti wa ni ifipamọ, iyẹn ni, ti o fipamọ sinu iranti iyipada titi aye ti o rọrun yoo fi han ararẹ lati ṣafipamọ awọn akoonu ti ifipamọ si awakọ naa. Awọn ibeere fun “anfani” jẹ ipinnu nipasẹ ẹrọ ṣiṣe ati awọn abuda ti awakọ naa. Ni iṣẹlẹ ti ikuna agbara, gbogbo data ti o wa ninu ifipamọ yoo sọnu.

Awọn nọmba awọn iṣẹ-ṣiṣe wa ninu eyiti o nilo lati rii daju pe awọn ayipada ninu faili ni a kọ si kọnputa, ati pe ko dubulẹ ni ifipamọ agbedemeji. Idaniloju yii le ṣee gba nipa lilo POSIX-compliant fsync ipe eto. Pipe fsync fi agbara mu kikọ lati ifipamọ si awakọ.

Jẹ ki a ṣe afihan ipa ti awọn buffers pẹlu apẹẹrẹ atọwọda ni irisi eto C kukuru kan.

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

Awọn asọye ṣe alaye daradara lẹsẹsẹ awọn iṣe ninu eto naa. Ọrọ naa “idahun si ibeere akọkọ ti igbesi aye, agbaye ati gbogbo iyẹn” yoo jẹ ifipamọ nipasẹ ẹrọ ṣiṣe, ati pe ti o ba tun bẹrẹ olupin naa nipa titẹ bọtini Tunto lakoko “awọn iṣiro”, faili naa yoo ṣofo. Ninu apẹẹrẹ wa, pipadanu ọrọ kii ṣe ọran, nitorinaa fsync ko nilo. Awọn aaye data ko pin ireti yii.

Awọn apoti isura infomesonu jẹ awọn eto eka ti o ṣiṣẹ pẹlu ọpọlọpọ awọn faili ni akoko kanna, nitorinaa wọn fẹ lati rii daju pe data ti wọn kọ yoo wa ni fipamọ sori kọnputa, nitori aitasera data laarin data data da lori eyi. Awọn apoti isura infomesonu ti ṣe apẹrẹ lati ṣe igbasilẹ gbogbo awọn iṣowo ti o pari ati ki o ṣetan fun idinku agbara ni eyikeyi akoko. Iwa yii nilo lilo fsync nigbagbogbo ni titobi nla.

Kini ipa ti lilo igbagbogbo fsync?

Pẹlu I/O deede, ẹrọ ṣiṣe ngbiyanju lati mu ibaraẹnisọrọ disk pọ si, nitori awọn awakọ ita ni o lọra julọ ni awọn ipo iranti. Nitorinaa, ẹrọ ṣiṣe n gbiyanju lati kọ data pupọ bi o ti ṣee ni iwọle kan si awakọ naa.

Jẹ ki a ṣe afihan ipa ti lilo fsync pẹlu apẹẹrẹ kan pato. A ni awọn SSD wọnyi bi awọn awakọ idanwo:

  • Intel® DC SSD S4500 480 GB, ti a ti sopọ nipasẹ SATA 3.2, 6 Gbit/s;
  • Samsung 970 EVO Plus 500GB, ti a ti sopọ nipasẹ PCIe 3.0 x4, ~ 31 Gbit/s.

Awọn idanwo ni a ṣe lori Intel® Xeon® W-2255 ti n ṣiṣẹ Ubuntu 20.04. Sysbench 1.0.18 ni a lo lati ṣe idanwo awọn disiki. A ti ṣẹda ipin kan lori awọn disiki, ti a ṣe ọna kika bi ext4. Ngbaradi fun idanwo naa pẹlu ṣiṣẹda awọn faili 100 GB:

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

Awọn idanwo ṣiṣe:

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

Awọn abajade idanwo ni a gbekalẹ ninu tabili.

Idanwo
Intel® S4500
Samsung 970 EVO +

Kika laisi fsync, MiB/s
5734.89
9028.86

Gbigbasilẹ laisi fsync, MiB/s
3823.26
6019.24

Kika pẹlu fsync, MiB/s
37.76
3.27

Gbigbasilẹ pẹlu fsync, MiB/s
25.17
2.18

O rọrun lati rii pe NVMe lati apakan alabara ni igboya ṣe itọsọna nigbati ẹrọ ṣiṣe funrararẹ pinnu bi o ṣe le ṣiṣẹ pẹlu awọn disiki, ati padanu nigba lilo fsync. Eyi gbe ibeere meji dide:

  1. Kini idi ti iyara kika naa kọja bandiwidi ti ara ti ọna asopọ ninu idanwo laisi fsync?
  2. Kini idi ti apakan olupin SSD dara julọ ni mimu nọmba nla ti awọn ibeere fsync?

Idahun si ibeere akọkọ jẹ rọrun: sysbench ṣe ipilẹṣẹ awọn faili ti o kun pẹlu awọn odo. Nitorinaa, idanwo naa ni a ṣe lori 100 gigabytes ti awọn odo. Niwọn igba ti data naa jẹ aṣọ pupọ ati asọtẹlẹ, ọpọlọpọ awọn iṣapeye OS wa sinu ere, ati pe wọn yara ipaniyan ni pataki.

Ti o ba beere gbogbo awọn abajade sysbench, o le lo 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

Idanwo
Intel® S4500
Samsung 970 EVO +

Kika laisi fsync, MiB/s
45.5
178

Gbigbasilẹ laisi fsync, MiB/s
30.4
119

Kika pẹlu fsync, MiB/s
32.6
20.9

Gbigbasilẹ pẹlu fsync, MiB/s
21.7
13.9

Aṣa si idinku iṣẹ ṣiṣe ni NVMe nigba lilo fsync jẹ han gbangba. O le tẹsiwaju si idahun ibeere keji.

Iṣapeye tabi bluff

Ni iṣaaju a sọ pe data ti wa ni ipamọ sinu ifipamọ, ṣugbọn ko ṣe pato ninu eyiti eyi, nitori ko ṣe pataki. Paapaa ni bayi a kii yoo lọ sinu intricacies ti awọn ọna ṣiṣe ati ṣe iyasọtọ awọn oriṣi gbogbogbo ti awọn ifipamọ meji:

  • eto;
  • hardware.

Ifipamọ sọfitiwia tọka si awọn buffers ti o wa ninu ẹrọ iṣẹ, ati ifipamọ ohun elo n tọka si iranti iyipada ti oludari disiki naa. Ipe eto fsync nfi aṣẹ ranṣẹ si awakọ lati kọ data lati inu ifipamọ rẹ si ibi ipamọ akọkọ, ṣugbọn ko ni ọna lati ṣakoso ṣiṣe deede ti aṣẹ naa.

Niwọn igba ti SSD ṣe afihan awọn abajade to dara julọ, awọn arosinu meji le ṣee ṣe:

  • disk ti a ṣe fun a fifuye iru;
  • awọn disk "bluffs" ati ki o foju awọn pipaṣẹ.

Iwa aiṣododo ti awakọ le ṣe akiyesi ti o ba ṣe idanwo pipadanu agbara. O le ṣayẹwo eyi pẹlu iwe afọwọkọ kan diskchecker.pl, iyẹn jẹ mulẹ ni ọdun 2005.

Iwe afọwọkọ yii nilo awọn ẹrọ ti ara meji - “olupin” ati “alabara”. Onibara kọ iye kekere ti data si disk labẹ idanwo, pe fsync, ati firanṣẹ alaye si olupin nipa ohun ti a kọ.

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

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

Lẹhin ṣiṣe awọn iwe afọwọkọ, o jẹ dandan lati de-agbara “alabara” ati maṣe da agbara pada fun awọn iṣẹju pupọ. O ṣe pataki lati ge asopọ koko-ọrọ idanwo lati ina, kii ṣe ṣiṣe tiipa lile nikan. Lẹhin akoko diẹ, olupin naa le sopọ ati kojọpọ sinu OS. Lẹhin ikojọpọ OS o nilo lati bẹrẹ lẹẹkansi diskchecker.pl, ṣugbọn pẹlu ohun ariyanjiyan daju.

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

Ni ipari ayẹwo iwọ yoo wo nọmba awọn aṣiṣe. Ti 0 ba wa, lẹhinna disk naa ti kọja idanwo naa. Lati yọkuro apapo awọn ayidayida ti o ṣaṣeyọri fun disk, idanwo naa le tun ṣe ni igba pupọ.

S4500 wa ko ṣe afihan awọn aṣiṣe nigbati agbara ti sọnu, afipamo pe o ti ṣetan fun awọn ẹru iṣẹ pẹlu ọpọlọpọ awọn ipe fsync.

ipari

Nigbati o ba yan awọn disiki tabi gbogbo awọn atunto ti a ti ṣetan, o yẹ ki o ranti awọn pato ti awọn iṣẹ ṣiṣe ti o nilo lati yanju. Ni iwo akọkọ, o dabi ẹni pe NVMe, iyẹn, SSD kan pẹlu wiwo PCIe, yiyara ju “Ayebaye” SATA SSD. Sibẹsibẹ, bi a ti loye loni, ni awọn ipo pataki ati pẹlu awọn iṣẹ-ṣiṣe kan eyi le ma jẹ ọran naa.

Bawo ni o ṣe idanwo awọn paati olupin nigba yiyalo lati ọdọ olupese IaaS kan?
A n duro de ọ ninu awọn asọye.

Kini idi ti NVMe mi fi lọra ju SSD kan?

orisun: www.habr.com

Fi ọrọìwòye kun