Carson a tha an NVMe agam nas slaodaiche na SSD?

Carson a tha an NVMe agam nas slaodaiche na SSD?
San artaigil seo seallaidh sinn ri cuid de cho-nòsan an fho-shiostam I/O agus a’ bhuaidh aca air coileanadh.

O chionn seachdain no dhà bha a’ cheist mu choinneimh carson a bha NVMe air aon fhrithealaiche nas slaodaiche na SATA air fear eile. Choimhead mi air mion-chomharrachadh an fhrithealaiche agus thuig mi gur e ceist dhoirbh a bha seo: bha NVMe bho roinn an neach-cleachdaidh, agus bha SSD bho roinn an fhrithealaiche.

Gu dearbh, chan eil e cothromach coimeas a dhèanamh eadar toraidhean bho dhiofar roinnean ann an diofar àrainneachdan, ach chan e freagairt theicnigeach iomlan a tha seo. Dèanamaid sgrùdadh air na bunaitean, dèan deuchainnean agus bheir sinn freagairt don cheist a chaidh a chur.

Dè a th’ ann am fsync agus càite a bheil e ga chleachdadh?

Gus obair le dràibhean a luathachadh, tha dàta air a ghleidheadh, is e sin, air a stòradh ann an cuimhne luaineach gus an nochd cothrom goireasach susbaint a’ bhufair a shàbhaladh don draibhear. Tha na slatan-tomhais airson “cothrom” air an co-dhùnadh leis an t-siostam obrachaidh agus feartan an draibhidh. Ma dh’ fhàillig cumhachd, thèid a h-uile dàta sa bhufair a chall.

Tha grunn ghnìomhan ann far am feum thu a bhith cinnteach gu bheil atharrachaidhean air faidhle air an sgrìobhadh chun an dràibhidh agus chan ann ann am bufair eadar-mheadhanach. Faodar an dearbhadh seo fhaighinn le bhith a’ cleachdadh gairm siostam fsync a tha a’ gèilleadh ri POSIX. Le bhith a’ gairm fsync feumaidh tu sgrìobhadh bhon bhufair chun an draibhidh.

Nach seall sinn buaidh bufairean le eisimpleir fuadain ann an cruth prògram goirid ann an 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;
}

Tha na beachdan a’ mìneachadh gu math sreath nan gnìomhan sa phrògram. Bidh an teacsa “am freagairt do phrìomh cheist na beatha, an Cruinne-cè agus a h-uile càil sin” air a bhuain leis an t-siostam obrachaidh, agus ma thòisicheas tu air an t-seirbheisiche ath-thòiseachadh le putadh air a’ phutan Ath-shuidheachadh rè “àireamhachadh”, bidh am faidhle falamh. Anns an eisimpleir againn, chan eil call teacsa na chùis, agus mar sin chan eil feum air fsync. Chan eil stòran-dàta a’ co-roinn an dòchas seo.

Tha stòran-dàta nam prògraman iom-fhillte a bhios ag obair le mòran fhaidhlichean aig an aon àm, agus mar sin tha iad airson a bhith cinnteach gun tèid an dàta a sgrìobhas iad a shàbhaladh air an draibhear, leis gu bheil cunbhalachd an dàta taobh a-staigh an stòr-dàta an urra ri seo. Tha stòran-dàta air an dealbhadh gus a h-uile gnothach crìochnaichte a chlàradh agus a bhith deiseil airson cumhachd a chall aig àm sam bith. Feumaidh an giùlan seo cleachdadh fsync an-còmhnaidh ann am meudan mòra.

Dè a’ bhuaidh a th’ aig cleachdadh tric de fsync?

Rè I/O àbhaisteach, bidh an siostam obrachaidh a’ feuchainn ris a’ chonaltradh as fheàrr a dhèanamh le diosgan, leis gur e draibhearan bhon taobh a-muigh an fheadhainn as slaodaiche san rangachd cuimhne. Mar sin, bidh an siostam obrachaidh a’ feuchainn ri nas urrainn dhut de dhàta a sgrìobhadh ann an aon ruigsinneachd air an draibhear.

Seallaidh sinn buaidh cleachdadh fsync le eisimpleir sònraichte. Tha na SSDan a leanas againn mar dhràibhearan deuchainn:

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

Bithear a’ dèanamh deuchainnean air Intel® Xeon® W-2255 a’ ruith Ubuntu 20.04. Tha Sysbench 1.0.18 air a chleachdadh airson diosgan a dhearbhadh. Chaidh aon sgaradh a chruthachadh air na diosgan, ann an cruth ext4. Tha ullachadh airson na deuchainn a’ toirt a-steach cruthachadh faidhlichean 100 GB:

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

Deuchainnean ruith:

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

Tha toraidhean an deuchainn air an taisbeanadh sa chlàr.

Deuchainn
Intel® S4500
Samsung 970 EVO+

Leughadh gun fsync, MiB/s
5734.89
9028.86

Clàradh gun fsync, MiB/s
3823.26
6019.24

Leughadh le fsync, MiB/s
37.76
3.27

Clàradh le fsync, MiB/s
25.17
2.18

Tha e furasta fhaicinn gu bheil NVMe bhon roinn teachdaiche le misneachd air thoiseach nuair a cho-dhùineas an siostam obrachaidh fhèin mar a dh’ obraicheas e le diosgan, agus a chailleas e nuair a thèid fsync a chleachdadh. Tha seo a’ togail dà cheist:

  1. Carson a tha an astar leughaidh san deuchainn gun fsync nas àirde na leud-bann fiosaigeach an t-seanail?
  2. Carson a tha roinn frithealaiche SSD nas fheàrr air làimhseachadh àireamhan mòra de dh’ iarrtasan fsync?

Tha am freagairt don chiad cheist sìmplidh: bidh sysbench a’ gineadh faidhlichean làn de neamhan. Mar sin, chaidh an deuchainn a dhèanamh thairis air 100 gigabytes de neoni. Leis gu bheil an dàta gu math èideadh agus ro-innseach, thig grunn optimizations OS a-steach agus bidh iad a’ luathachadh coileanadh gu mòr.

Ma chuireas tu ceist air a h-uile toradh sysbench, faodaidh tu fio a chleachdadh.

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

Deuchainn
Intel® S4500
Samsung 970 EVO+

Leughadh gun fsync, MiB/s
45.5
178

Clàradh gun fsync, MiB/s
30.4
119

Leughadh le fsync, MiB/s
32.6
20.9

Clàradh le fsync, MiB/s
21.7
13.9

Tha an claonadh airson coileanadh NVMe a dhol sìos nuair a bhios tu a’ cleachdadh fsync ri fhaicinn gu soilleir. Faodaidh tu gluasad air adhart gu bhith a’ freagairt an dàrna ceist.

Optimization no bluff

Roimhe sin, thuirt sinn gu bheil an dàta air a stòradh ann am bufair, ach cha do shònraich sinn dè am fear, leis nach robh seo cudromach. Fiù ‘s a-nis cha dèan sinn sgrùdadh air iom-fhillteachd nan siostaman obrachaidh agus bheir sinn cuideam air dà sheòrsa bufair coitcheann:

  • prògram;
  • bathar-cruaidh.

Tha am bufair bathar-bog a’ toirt iomradh air na bufairean a tha san t-siostam obrachaidh, agus tha am bufair bathar-cruaidh a’ toirt iomradh air cuimhne luaineach rianadair diosc. Bidh an gairm siostam fsync a’ cur àithne chun an draibhidh gus dàta a sgrìobhadh bhon bhufair aige chun phrìomh stòradh, ach chan eil dòigh ann dearbhadh gu bheil an àithne air a chuir gu bàs gu ceart.

Leis gu bheil an SSD a’ sealltainn na toraidhean as fheàrr, faodar dà bharail a dhèanamh:

  • tha an diosc air a dhealbhadh airson an aon luchd;
  • an diosc “bluffs” agus a’ seachnadh an àithne.

Faodar mothachadh a thoirt air giùlan mì-onarach an draibhidh ma nì thu deuchainn call cumhachd. Faodaidh tu seo a sgrùdadh le sgriobt diskchecker.pl, a bha air a chruthachadh ann an 2005 bliadhna.

Feumaidh an sgriobt seo dà inneal corporra - “frithealaiche” agus “neach-dèiligidh”. Bidh an neach-dèiligidh a’ sgrìobhadh beagan dàta chun diosc fo dheuchainn, a’ gairm fsync, agus a’ cur fiosrachadh chun t-seirbheisiche mu na chaidh a sgrìobhadh.

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

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

Às deidh dhut an sgriobt a ruith, feumaidh tu an cumhachd a thionndadh chun “neach-dèiligidh” agus na cuir air ais an cumhachd airson grunn mhionaidean. Tha e cudromach an neach a tha fo dheuchainn a dhì-cheangal bho dhealan, agus chan ann dìreach dùnadh cruaidh a dhèanamh. Às deidh beagan ùine, faodar an frithealaiche a cheangal agus a luchdachadh a-steach don OS. Às deidh dhut an OS a luchdachadh feumaidh tu tòiseachadh a-rithist diskchecker.pl, ach le argumaid Dearbhaich.

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

Aig deireadh an t-seic chì thu an àireamh de mhearachdan. Ma tha 0 ann, tha an diosc air a dhol seachad air an deuchainn. Gus casg a chuir air co-thuiteamas fortanach airson an diosc, faodar an deuchainn a dhèanamh a-rithist grunn thursan.

Cha do sheall an S4500 againn mearachdan sam bith nuair a chaidh cumhachd a chall, a’ ciallachadh gu bheil e deiseil airson eallach obrach le tòrr fiosan fsync.

co-dhùnadh

Nuair a bhios tu a’ taghadh diosgan no rèiteachaidhean deiseil, bu chòir dhut cuimhneachadh air mion-fhiosrachadh nan duilgheadasan a dh’ fheumar fhuasgladh. Aig a’ chiad sealladh, tha e follaiseach gu bheil NVMe, is e sin, SSD le eadar-aghaidh PCIe, nas luaithe na an “clasaigeach” SATA SSD. Ach, mar a dh’ ionnsaich sinn an-diugh, ann an suidheachaidhean sònraichte agus le gnìomhan sònraichte is dòcha nach bi seo fìor.

Ciamar a nì thu deuchainn air co-phàirtean frithealaiche nuair a gheibh thu màl bho sholaraiche IaaS?
Tha sinn a’ feitheamh riut anns na beachdan.

Carson a tha an NVMe agam nas slaodaiche na SSD?

Source: www.habr.com

Cuir beachd ann