Chifukwa chiyani NVMe yanga imachedwa kuposa SSD yanga?

Chifukwa chiyani NVMe yanga imachedwa kuposa SSD yanga?
M'nkhaniyi tiwona zina mwazinthu za I/O subsystem ndi momwe zimakhudzira magwiridwe antchito.

Masabata angapo apitawo ndinakumana ndi funso la chifukwa chake NVMe pa seva imodzi inali yocheperapo kuposa SATA pa ina. Ndidayang'ana mafotokozedwe a seva ndikuzindikira kuti ili ndi funso lovuta: NVMe idachokera ku gawo la ogwiritsa ntchito, ndipo SSD idachokera kugawo la seva.

Mwachiwonekere, sikoyenera kufanizitsa zinthu zochokera kumagulu osiyanasiyana m'madera osiyanasiyana, koma iyi si yankho lathunthu laukadaulo. Tiyeni tiphunzire zoyambira, tizichita zoyeserera ndikupereka yankho ku funso lomwe lafunsidwa.

Kodi fsync ndi chiyani ndipo imagwiritsidwa ntchito pati?

Kuti mufulumizitse ntchito ndi ma drive, deta imasungidwa, ndiye kuti, imasungidwa m'makumbukidwe osasinthika mpaka mwayi wopezeka wosungira zomwe zili mu buffer pagalimoto. Zolinga za "mwayi" zimatsimikiziridwa ndi makina ogwiritsira ntchito komanso mawonekedwe a galimotoyo. Kukanika mphamvu, zonse zomwe zili mu buffer zidzatayika.

Pali ntchito zingapo zomwe muyenera kuwonetsetsa kuti zosintha pafayilo zimalembedwa pagalimoto osati mu buffer yapakatikati. Chitsimikizochi chikhoza kupezeka pogwiritsa ntchito foni ya POSIX-compliant fsync system. Kuitana fsync kukakamiza kulemba kuchokera ku buffer kupita ku drive.

Tiyeni tiwonetse zotsatira za ma buffers ndi chitsanzo chopanga mawonekedwe a pulogalamu yayifupi mu 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;
}

Ndemangazo zikufotokozera bwino zomwe zimachitika mu pulogalamuyi. Mawu akuti "yankho la funso lalikulu la moyo, Chilengedwe ndi zonse" zidzasokonezedwa ndi makina ogwiritsira ntchito, ndipo ngati mutayambitsanso seva podutsa batani la Bwezeretsani pa "mawerengedwe", fayiloyo idzakhala yopanda kanthu. Muchitsanzo chathu, kutayika kwa mameseji si vuto, chifukwa chake fsync siyofunika. Ma database sakhala ndi chiyembekezo chotere.

Ma database ndi mapulogalamu ovuta omwe amagwira ntchito nthawi imodzi ndi mafayilo ambiri, kotero amafuna kutsimikiza kuti zomwe amalemba zidzasungidwa pa galimoto, popeza kusasinthasintha kwa deta mkati mwa database kumadalira izi. Ma database adapangidwa kuti azilemba zochitika zonse zomwe zatsirizidwa ndikukhala okonzeka kutaya mphamvu nthawi iliyonse. Khalidweli limafuna kugwiritsa ntchito fsync pafupipafupi mochulukira.

Kodi zotsatira za kugwiritsa ntchito fsync pafupipafupi ndi zotani?

Munthawi ya I/O yanthawi zonse, makina ogwiritsira ntchito amayesa kukhathamiritsa kulumikizana ndi ma disks, popeza ma drive akunja ndi omwe amachedwa kwambiri pakuwongolera kukumbukira. Chifukwa chake, makina ogwiritsira ntchito amayesa kulemba zambiri momwe angathere panjira imodzi yolowera pagalimoto.

Tiyeni tiwonetse zotsatira zogwiritsa ntchito fsync ndi chitsanzo china. Tili ndi ma SSD otsatirawa ngati ma drive oyesa:

  • Intel® DC SSD S4500 480 GB, yolumikizidwa kudzera pa SATA 3.2, 6 Gbit / s;
  • Samsung 970 EVO Plus 500GB, yolumikizidwa kudzera pa PCIe 3.0 x4, ~31 Gbit/s.

Mayeso amachitidwa pa Intel® Xeon® W-2255 yomwe ikuyenda Ubuntu 20.04. Sysbench 1.0.18 imagwiritsidwa ntchito kuyesa ma disks. Gawo limodzi lapangidwa pa disks, lopangidwa ngati ext4. Kukonzekera mayeso kumaphatikizapo kupanga mafayilo a 100 GB:

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

Kuyesa mayeso:

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

Zotsatira za mayeso zikuwonetsedwa mu tebulo.

Mayeso
Intel® S4500
Samsung 970 EVO+

Kuwerenga popanda fsync, MiB/s
5734.89
9028.86

Kujambula popanda fsync, MiB/s
3823.26
6019.24

Kuwerenga ndi fsync, MiB/s
37.76
3.27

Kujambula ndi fsync, MiB/s
25.17
2.18

N'zosavuta kuona kuti NVMe kuchokera ku gawo la kasitomala ikutsogolera molimba mtima pamene makina opangira okha amasankha momwe angagwiritsire ntchito ma disks, ndipo amataya pamene fsync ikugwiritsidwa ntchito. Izi zimabweretsa mafunso awiri:

  1. Chifukwa chiyani liwiro lowerengera pamayesero popanda fsync limaposa bandwidth yakuthupi ya tchanelo?
  2. Chifukwa chiyani gawo la seva la SSD lili bwino pakusamalira zopempha zambiri za fsync?

Yankho la funso loyamba ndi losavuta: sysbench imapanga mafayilo odzaza ndi zero. Chifukwa chake, kuyesako kudachitika pa 100 gigabytes ya ziro. Popeza deta ndi yofanana kwambiri komanso yodziwikiratu, kukhathamiritsa kosiyanasiyana kwa OS kumabwera ndikufulumizitsa kuphedwa.

Mukafunsa zotsatira zonse za sysbench, mutha kugwiritsa ntchito 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

Mayeso
Intel® S4500
Samsung 970 EVO+

Kuwerenga popanda fsync, MiB/s
45.5
178

Kujambula popanda fsync, MiB/s
30.4
119

Kuwerenga ndi fsync, MiB/s
32.6
20.9

Kujambula ndi fsync, MiB/s
21.7
13.9

Chizoloŵezi cha ntchito ya NVMe kuti chiwonongeke mukamagwiritsa ntchito fsync chikuwonekera bwino. Mukhoza kupitiriza kuyankha funso lachiwiri.

Kukhathamiritsa kapena bluff

M'mbuyomu, tinanena kuti deta imasungidwa mu buffer, koma sitinatchule kuti ndi iti, popeza izi sizinali zofunika. Ngakhale pano sitidzayang'ana zovuta zamakina ogwiritsira ntchito ndipo tiwonetsa mitundu iwiri ya ma buffers:

  • pulogalamu;
  • hardware.

Buffer ya mapulogalamu imatanthawuza ma buffer omwe amapezeka mu opareshoni, ndipo buffer ya hardware imatanthawuza kukumbukira kosasinthika kwa wowongolera disk. Fsync system call imatumiza lamulo ku drive kuti ilembe deta kuchokera ku buffer yake kupita ku chosungira chachikulu, koma ilibe njira yotsimikizira kuti lamulolo likuchitidwa molondola.

Popeza SSD ikuwonetsa zotsatira zabwino, malingaliro awiri angapangidwe:

  • disk idapangidwa kuti ikhale yolemetsa yofanana;
  • disk "bluffs" ndikunyalanyaza lamulo.

Khalidwe lachinyengo la galimotoyo likhoza kuwonedwa ngati mukuchita mayeso otaya mphamvu. Mutha kuyang'ana izi ndi script diskchecker.pl, anali zopangidwa m'chaka cha 2005.

Izi zimafuna makina awiri akuthupi - "seva" ndi "kasitomala". Wothandizirayo amalemba pang'ono deta ku diski pansi pa kuyesedwa, kuyitana fsync, ndikutumiza zambiri kwa seva zomwe zinalembedwa.

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

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

Pambuyo poyendetsa script, muyenera kuzimitsa mphamvu kwa "kasitomala" ndipo musabwerere mphamvu kwa mphindi zingapo. Ndikofunikira kuletsa munthu amene akuyesedwa ku magetsi, osati kungotseka mwamphamvu. Patapita nthawi, seva ikhoza kulumikizidwa ndikulowetsedwa mu OS. Pambuyo Mumakonda Os muyenera kuyamba kachiwiri diskchecker.pl, koma ndi mkangano onetsetsani.

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

Kumapeto kwa cheke mudzawona kuchuluka kwa zolakwika. Ngati pali 0, ndiye kuti disk yadutsa mayeso. Kupatula mwayi wamwayi wa disk, kuyesako kumatha kubwerezedwa kangapo.

S4500 yathu sinawonetse zolakwika mphamvu itatayika, kutanthauza kuti ndi yokonzeka kudzaza ntchito ndi mafoni ambiri a fsync.

Pomaliza

Posankha ma disks kapena masinthidwe okonzeka okonzeka, muyenera kukumbukira zenizeni zamavuto omwe akuyenera kuthetsedwa. Poyang'ana koyamba, zikuwoneka kuti NVMe, ndiye kuti, SSD yokhala ndi mawonekedwe a PCIe, ndiyothamanga kuposa "classic" SATA SSD. Komabe, monga taphunzirira lero, muzochitika zenizeni komanso ndi ntchito zina izi sizingakhale choncho.

Kodi mumayesa bwanji zida za seva mukabwereka kuchokera kwa wothandizira wa IaaS?
Tikuyembekezerani mu ndemanga.

Chifukwa chiyani NVMe yanga imachedwa kuposa SSD yanga?

Source: www.habr.com

Kuwonjezera ndemanga