Çima NVMe-ya min ji SSD-ê hêdîtir e?

Çima NVMe-ya min ji SSD-ê hêdîtir e?
Di vê gotarê de, em ê li hin hûrgelên binpergala I / O û bandora wan li ser performansê binêrin.

Çend hefte berê ez ketim pirsek ku çima NVMe li ser serverek ji SATA-yê li ser yekî din hêdîtir e. Min li taybetmendiyên serveran nihêrî û fêm kir ku ew pirsek hîle ye: NVMe ji beşa bikarhêner bû, û SSD ji beşa serverê bû.

Eşkere ye, ne rast e ku meriv hilberên ji beşên cihêreng li hawîrdorên cihêreng berhev bike, lê ev ne bersivek teknîkî ya bêkêmasî ye. Em ê li ser bingehên bingehîn lêkolîn bikin, ceribandinan bikin û bersiva pirsê bidin.

Fsync çi ye û li ku tê bikaranîn

Ji bo lezkirina xebata bi ajokeran re, dane têne tampon kirin, ango, di bîranîna guhezbar de têne hilanîn heya ku fersendek musaît ji xwe re peyda bike da ku naveroka tamponê li ajokerê hilîne. Pîvanên derfetê ji hêla pergala xebitandinê û taybetmendiyên ajotinê ve têne destnîşankirin. Di bûyera têkçûna hêzê de, dê hemî daneyên di tamponê de winda bibin.

Gelek peywir hene ku tê de hûn hewce ne ku pê ewle bin ku guheztinên pelê li ajokerê têne nivîsandin, û di nav tamponek navîn de nemînin. Ev pêbawerî dikare bi karanîna banga pergala fsyncê ya lihevhatî ya POSIX-ê were bidestxistin. Banga fsync zorê dide nivîsandina ji tampon berbi ajokerê.

Ka em bi mînakek çêkirî di forma bernameyek kurt a C de bandora tamponan nîşan bidin.

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

Şîrove rêza çalakiyan di bernameyê de baş rave dike. Nivîsa "bersiva pirsa sereke ya jiyanê, gerdûn û her tiştî" dê ji hêla pergala xebitandinê ve were tampon kirin, û heke hûn serverê bi tikandina bişkoka Reset di dema "hesabkirinê de" ji nû ve bidin destpêkirin, dê pel vala bibe. Di mînaka me de, windakirina nivîsê ne pirsgirêk e, ji ber vê yekê fsync ne hewce ye. Database vê xweşbîniyê parve nakin.

Database bernameyên tevlihev in ku di heman demê de bi gelek pelan re dixebitin, ji ber vê yekê ew dixwazin piştrast bin ku daneyên ku ew dinivîsin dê li ser ajokerê werin hilanîn, ji ber ku hevgirtina daneyan di nav databasê de bi vê yekê ve girêdayî ye. Databas têne çêkirin ku hemî danûstendinên qedandî tomar bikin û di her kêliyê de ji qutbûna elektrîkê re amade bin. Ev tevger we mecbûr dike ku hûn fsync bi domdarî di mîqdarên mezin de bikar bînin.

Çi bandorê li karanîna pir caran ya fsync dike

Bi I/O normal re, pergala xebitandinê hewl dide ku pêwendiya dîskê xweşbîn bike, ji ber ku ajokarên derveyî di hiyerarşiya bîranînê de herî hêdî ne. Ji ber vê yekê, pergala xebitandinê hewl dide ku di yek gihîştina ajokê de bi qasî ku pêkan daneyan binivîsîne.

Ka em bandora karanîna fsync bi mînakek taybetî destnîşan bikin. Em SSD-yên jêrîn wekî mijarên ceribandinê hene:

  • Intel® DC SSD S4500 480 GB, bi SATA 3.2, 6 Gb/s ve girêdayî ye;
  • Samsung 970 EVO Plus 500 GB, bi PCIe 3.0 x4 ve girêdayî ye, ~ 31 Gbps.

Testên li ser Intel® Xeon® W-2255-ê ku Ubuntu 20.04-ê dixebitîne têne kirin. Ji bo ceribandina dîskan, sysbench 1.0.18 tê bikar anîn. Di dîskê de parçeyek yekane heye ku wekî ext4 hatî çêkirin. Amadekirina testê ev e ku hûn pelên 100 GB biafirînin:

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

Testên xebitandinê:

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

Encamên testê di tabloyê de têne pêşkêş kirin.

Test
Intel® S4500
Samsung 970 EVO+

Bê fsync, MiB/s bixwînin
5734.89
9028.86

Bê fsync, MiB/s binivîsin
3823.26
6019.24

Xwendina bi fsync, MiB/s
37.76
3.27

Tomarkirina bi fsync, MiB/s
25.17
2.18

Dema ku pergala xebitandinê bixwe biryar dide meriv bi dîskan re çawa bixebite, NVMe ji beşa xerîdar bi pêbawer rê dide, û dema ku fsync tê bikar anîn winda dike. Ev du pirsan derdixe holê:

  1. Çima leza xwendinê ji bermaya laşî ya girêdana di ceribandinê de bêyî fsync derbas dibe?
  2. Çima beşek serverê SSD di birêvebirina hejmareke mezin a daxwazên fsync de çêtir e?

Bersiva pirsa yekem hêsan e: sysbench pelên zero-dagirtî çêdike. Bi vî rengî, ceribandin li ser 100 gigabayt sifir hate kirin. Ji ber ku dane pir yekreng û pêşbînbar in, xweşbîniyên OS-ê yên cihêreng dileyizin, û ew bi girîngî îcrayê lez dikin.

Ger hûn hemî encamên sysbench bipirsin, wê hingê hûn dikarin fio bikar bînin.

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

Test
Intel® S4500
Samsung 970 EVO+

Bê fsync, MiB/s bixwînin
45.5
178

Bê fsync, MiB/s binivîsin
30.4
119

Xwendina bi fsync, MiB/s
32.6
20.9

Tomarkirina bi fsync, MiB/s
21.7
13.9

Dema ku fsync bikar bînin meyla berbi daketina performansê ya di NVMe de bi zelalî xuya dibe. Hûn dikarin li ser pirsa duyemîn biçin.

Optimîzasyon an blof

Berê me got ku dane di tamponek de têne hilanîn, lê ne diyar kir ku di kîjanê de ye, ji ber ku ew ne girîng bû. Tewra naha jî em ê nekevin nav tevliheviyên pergalên xebitandinê û du celebên tamponên gelemperî yekalî bikin:

  • bername;
  • hardware.

Tampona nermalavê vedibêje tamponên ku di pergala xebitandinê de ne, û tampona nermalavê jî bîranîna guhezbar a kontrolkera dîskê vedibêje. Banga pergala fsync fermanek ji ajokerê re dişîne da ku daneyan ji tampona xwe berbi hilana sereke binivîsîne, lê rêyek wê tune ku pêkanîna rast a fermanê kontrol bike.

Ji ber ku SSD çêtir performans dike, du texmîn dikarin bêne çêkirin:

  • dîsk ji bo barkirina planek wekhev hatî çêkirin;
  • dîsk "bloff" dike û fermanê paşguh dike.

Ger hûn ceribandinek bi têkçûna hêzê re bikin tevgeriya nepak a ajokerê dikare were dîtin. Hûn dikarin vê bi skrîptê kontrol bikin. diskchecker.pl, ew bû damezrandin li 2005 sala.

Ev skrîpt du makîneyên laşî hewce dike - "server" û "muwekîlê". Xerîdar li ajokera di bin ceribandinê de jimarek piçûk daneyan dinivîse, gazî fsync dike, û agahdariya serverê di derheqê tiştê hatî nivîsandin de dişîne.

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

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

Piştî xebitandina skrîptê, pêdivî ye ku "muwekîlê" enerjî bike û çend hûrdeman hêz venegerîne. Girîng e ku mijara ceribandinê ji elektrîkê veqetînin, û ne tenê qutkirinek hişk pêk bînin. Piştî demekê, server dikare were girêdan û di OS-ê de were barkirin. Piştî destpêkirina OS-ê, hûn hewce ne ku ji nû ve dest pê bikin diskchecker.pl, lê bi arguman lidûsekirin.

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

Di dawiya kontrolê de, hûn ê hejmara xeletiyan bibînin. Ger ew 0 bin, wê hingê dîskê ceribandinê derbas kir. Ji bo derxistina tevliheviyek rewşên ku ji bo dîskê serketî ye, ceribandin dikare çend caran were dubare kirin.

S4500-a me tu xeletiyên windakirina hêzê nîşan neda, ku tê vê wateyê ku ew ji bo barkirinên bi gelek bangên fsync re amade ye.

encamê

Dema ku dîskan an tevahî mîhengên amade hilbijêrin, divê hûn taybetmendiyên karên ku divê bêne çareser kirin ji bîr nekin. Di nihêrîna pêşîn de, eşkere xuya dike ku NVMe, ango SSD-yek bi navgînek PCIe, ji SATA SSD-ya "klasîk" zûtir e. Lêbelê, wekî ku me îro fêm kir, di şert û mercên taybetî û bi hin karan de dibe ku ne wusa be.

Dema ku hûn ji pêşkêşkerek IaaS kirê dikin hûn hêmanên serverê çawa ceribandine?
Em di şîroveyan de li benda we ne.

Çima NVMe-ya min ji SSD-ê hêdîtir e?

Source: www.habr.com

Add a comment