Vim li cas kuv NVMe qeeb dua kuv SSD?

Vim li cas kuv NVMe qeeb dua kuv SSD?
Hauv tsab xov xwm no peb yuav saib qee qhov nuances ntawm I / O subsystem thiab lawv qhov cuam tshuam rau kev ua haujlwm.

Ob peb lub lis piam dhau los kuv tau ntsib cov lus nug vim li cas NVMe ntawm ib lub server qeeb dua SATA ntawm lwm qhov. Kuv saib ntawm cov server specifications thiab pom tau hais tias qhov no yog ib lo lus nug tsis yooj yim: NVMe yog los ntawm cov neeg siv ntu, thiab SSD yog los ntawm ntu server.

Pom tseeb, nws tsis ncaj ncees los sib piv cov khoom los ntawm cov ntu sib txawv hauv qhov chaw sib txawv, tab sis qhov no tsis yog cov lus teb ua tiav. Cia peb kawm cov hauv paus, ua cov kev sim thiab muab cov lus teb rau cov lus nug.

Fsync yog dab tsi thiab nws siv qhov twg?

Txhawm rau ua kom nrawm ua haujlwm nrog cov tsav, cov ntaub ntawv yog buffered, uas yog, khaws cia hauv lub cim xeeb tsis muaj zog kom txog thaum lub sijhawm yooj yim nthuav tawm nws tus kheej kom txuag cov ntsiab lus ntawm qhov tsis rau lub tsav. Cov txheej txheem rau "lub cib fim" yog txiav txim los ntawm lub operating system thiab cov yam ntxwv ntawm tus tsav. Nyob rau hauv qhov kev tshwm sim ntawm lub hwj chim tsis ua hauj lwm, tag nrho cov ntaub ntawv nyob rau hauv lub buffer yuav ploj.

Muaj ntau txoj haujlwm uas koj yuav tsum paub tseeb tias kev hloov pauv rau cov ntaub ntawv raug sau rau hauv lub tsav thiab tsis nyob rau hauv ib qho kev tsis sib haum xeeb. Qhov kev lees paub no tuaj yeem tau txais los ntawm kev siv POSIX-raws li fsync system hu. Hu rau fsync yuam kev sau los ntawm qhov tsis mus rau tus tsav.

Cia peb ua qauv qhia cov txiaj ntsig ntawm buffers nrog ib qho piv txwv cuav hauv daim ntawv luv luv hauv 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;
}

Cov lus piav qhia txog kev ua raws li hauv qhov kev zov me nyuam zoo. Cov ntawv nyeem "cov lus teb rau lo lus nug tseem ceeb ntawm lub neej, lub ntiaj teb thiab txhua yam" yuav raug cuam tshuam los ntawm kev ua haujlwm, thiab yog tias koj rov pib lub server los ntawm nias lub pob Pib dua thaum lub sij hawm "xws li", cov ntaub ntawv yuav khoob. Hauv peb qhov piv txwv, cov ntawv poob tsis yog teeb meem, yog li tsis xav tau fsync. Databases tsis qhia qhov kev cia siab no.

Databases yog cov kev pab cuam nyuaj uas ib txhij ua haujlwm nrog ntau cov ntaub ntawv, yog li lawv xav kom paub tseeb tias cov ntaub ntawv lawv sau yuav raug cawm hauv lub tsav, vim qhov sib xws ntawm cov ntaub ntawv hauv cov ntaub ntawv yog nyob ntawm qhov no. Databases yog tsim los sau tag nrho cov kev ua tiav tiav thiab npaj kom poob lub zog txhua lub sijhawm. Tus cwj pwm no yuav tsum tau siv fsync tas li nyob rau hauv ntau qhov ntau.

Dab tsi yog qhov cuam tshuam ntawm kev siv fsync nquag?

Thaum lub sij hawm ib txwm I / O, lub operating system sim optimize kev sib txuas lus nrog disks, vim hais tias sab nraud drives yog qeeb tshaj nyob rau hauv lub cim xeeb hierarchy. Yog li ntawd, lub operating system sim sau cov ntaub ntawv ntau npaum li sai tau hauv ib qho kev nkag mus rau tus tsav.

Cia peb qhia qhov cuam tshuam ntawm kev siv fsync nrog ib qho piv txwv tshwj xeeb. Peb muaj SSDs hauv qab no raws li kev sim tsav:

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

Kev ntsuam xyuas tau ua nyob rau ntawm Intel® Xeon® W-2255 khiav Ubuntu 20.04. Sysbench 1.0.18 yog siv los kuaj cov disks. Ib qho kev faib tawm tau tsim rau ntawm cov disks, formatted li ext4. Kev npaj rau kev xeem suav nrog tsim 100 GB cov ntaub ntawv:

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

Kev xeem khiav:

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

Cov txiaj ntsig kev xeem tau nthuav tawm hauv lub rooj.

Kev xeem
Intel® S4500
Samsung 970 EVO +

Nyeem tsis fsync, MiB/s
5734.89
9028.86

Cov ntaubntawv povthawj siv tsis muaj fsync, MiB/s
3823.26
6019.24

Nyeem nrog fsync, MiB/s
37.76
3.27

Sau nrog fsync, MiB/s
25.17
2.18

Nws yog ib qho yooj yim kom pom tias NVMe los ntawm cov neeg siv khoom muaj kev ntseeg siab hauv cov thawj coj thaum lub operating system nws tus kheej txiav txim siab ua haujlwm nrog disks, thiab poob thaum siv fsync. Qhov no tsa ob lo lus nug:

  1. Vim li cas qhov kev nyeem ntawv ceev hauv qhov ntsuas tsis muaj fsync tshaj lub cev bandwidth ntawm cov channel?
  2. Vim li cas cov neeg rau zaub mov ntu SSD zoo dua ntawm kev tuav ntau tus fsync thov?

Cov lus teb rau thawj lo lus nug yog yooj yim: sysbench tsim cov ntaub ntawv sau nrog xoom. Yog li, qhov kev sim tau ua dhau 100 gigabytes ntawm xoom. Txij li cov ntaub ntawv tsis sib xws thiab kwv yees tau zoo, ntau yam OS optimizations tuaj rau hauv kev ua si thiab ua kom nrawm nrawm.

Yog tias koj nug tag nrho cov txiaj ntsig sysbench, koj tuaj yeem siv 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

Kev xeem
Intel® S4500
Samsung 970 EVO +

Nyeem tsis fsync, MiB/s
45.5
178

Cov ntaubntawv povthawj siv tsis muaj fsync, MiB/s
30.4
119

Nyeem nrog fsync, MiB/s
32.6
20.9

Sau nrog fsync, MiB/s
21.7
13.9

Txoj kev nyiam rau NVMe kev ua tau zoo kom txo qis thaum siv fsync pom meej. Koj tuaj yeem txav mus los teb cov lus nug thib ob.

Optimization los yog bluff

Yav dhau los, peb tau hais tias cov ntaub ntawv khaws cia hauv qhov tsis muaj, tab sis peb tsis tau qhia meej tias qhov twg, vim qhov no tsis tseem ceeb. Txawm tias tam sim no peb yuav tsis delve rau hauv intricacies ntawm kev khiav hauj lwm systems thiab yuav qhia txog ob tug dav dav buffers:

  • qhov kev pab cuam;
  • kho vajtse.

Lub software tsis yog hais txog cov buffers uas muaj nyob rau hauv lub operating system, thiab hardware buffer yog hais txog lub volatile nco ntawm lub disk controller. Fsync system hu xa cov lus txib mus rau lub tsav los sau cov ntaub ntawv los ntawm nws qhov tsis tuaj yeem mus rau qhov chaw khaws cia tseem ceeb, tab sis tsis muaj txoj hauv kev los xyuas kom meej tias cov lus txib raug ua tiav.

Txij li thaum SSD qhia tau qhov txiaj ntsig zoo tshaj plaws, ob qhov kev xav tuaj yeem ua tau:

  • lub disk yog tsim los rau kev thauj khoom zoo sib xws;
  • disk "bluffs" thiab tsis quav ntsej cov lus txib.

Tus cwj pwm tsis ncaj ncees ntawm tus tsav tuaj yeem pom tau yog tias koj ua qhov kev kuaj tsis muaj zog. Koj tuaj yeem tshawb xyuas qhov no nrog ib tsab ntawv diskchecker.pl, uas yog tsim tawm nyob rau hauv 2005 xyoo.

Tsab ntawv no yuav tsum muaj ob lub tshuab lub cev - "neeg rau zaub mov" thiab "tus neeg siv khoom". Tus neeg siv tau sau cov ntaub ntawv me me rau hauv disk hauv kev sim, hu rau fsync, thiab xa cov ntaub ntawv mus rau server txog qhov tau sau.

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

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

Tom qab khiav tsab ntawv, koj yuav tsum tua lub hwj chim rau "tus neeg siv" thiab tsis txhob rov qab lub hwj chim rau ob peb feeb. Nws yog ib qho tseem ceeb uas yuav tsum tau txiav tus neeg raug kuaj los ntawm hluav taws xob, thiab tsis yog tsuas yog ua lub zog kaw. Tom qab qee lub sijhawm, tus neeg rau zaub mov tuaj yeem txuas thiab thauj mus rau OS. Tom qab thauj lub OS koj yuav tsum pib dua diskchecker.pl, tab sis nrog kev sib cav xyuas.

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

Thaum kawg ntawm daim tshev koj yuav pom cov lej yuam kev. Yog tias muaj 0, ces lub disk tau dhau qhov kev xeem. Txhawm rau tshem tawm qhov muaj hmoo coincidence rau lub disk, qhov kev sim tuaj yeem rov ua dua ob peb zaug.

Peb S4500 tsis pom qhov yuam kev thaum lub zog poob, lub ntsiab lus nws tau npaj rau kev ua haujlwm nrog ntau fsync hu.

xaus

Thaum xaiv cov disks lossis tag nrho cov kev teeb tsa npaj txhij, koj yuav tsum nco ntsoov qhov tshwj xeeb ntawm cov teeb meem uas yuav tsum tau daws. Thaum xub thawj siab ib muag, nws zoo nkaus li pom tseeb tias NVMe, uas yog, SSD nrog PCIe interface, nrawm dua li "classic" SATA SSD. Txawm li cas los xij, raws li peb tau kawm niaj hnub no, hauv cov xwm txheej tshwj xeeb thiab nrog qee yam haujlwm no yuav tsis yog qhov teeb meem.

Koj ua li cas kuaj cov khoom siv server thaum xauj los ntawm IaaS tus muab kev pabcuam?
Peb tab tom tos koj hauv cov lus pom.

Vim li cas kuv NVMe qeeb dua kuv SSD?

Tau qhov twg los: www.hab.com

Ntxiv ib saib