Naha NVMe kuring langkung laun tibatan SSD?

Naha NVMe kuring langkung laun tibatan SSD?
Dina tulisan ieu, urang bakal ningali sababaraha nuansa subsistem I / O sareng pangaruhna kana kinerja.

Sababaraha minggu ka tukang kuring naroskeun patarosan naha NVMe dina hiji server langkung laun tibatan SATA dina anu sanés. Kuring nempo ciri tina server na sadar yén éta téh sual trik: NVMe éta ti bagéan pamaké, sarta SSD éta ti bagéan server.

Jelas, éta henteu leres pikeun ngabandingkeun produk tina bagéan anu béda dina lingkungan anu béda, tapi ieu sanés jawaban téknis anu lengkep. Urang bakal diajar dasar-dasar, ngalaksanakeun percobaan sareng masihan jawaban kana patarosan anu diajukeun.

Naon fsync sareng dimana dianggo

Pikeun nyepetkeun karya kalawan drive, data ieu buffered, nyaeta, disimpen dina mémori volatile dugi kasempetan merenah nampilkeun sorangan pikeun nyimpen eusi panyangga kana drive. Kriteria kasempetan ditangtukeun ku sistem operasi sareng ciri drive. Dina kasus panyabutan listrik, sadaya data dina panyangga bakal leungit.

Aya sababaraha pancén dimana anjeun kedah pastikeun yén parobahan dina file ditulis kana drive, sarta ulah bohong dina panyangga panengah. Asuransi ieu tiasa didapet ku nganggo telepon sistem fsync anu patuh POSIX. Sauran fsync maksakeun nyerat tina panyangga ka drive.

Hayu urang nunjukkeun pangaruh panyangga kalayan conto jieunan dina bentuk program C pondok.

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

Komentar ngajelaskeun runtuyan lampah dina program ogé. Téks "jawaban kana patarosan utama kahirupan, jagat raya sareng sadayana" bakal disangga ku sistem operasi, sareng upami anjeun ngabalikan deui server ku mencét tombol Reset nalika "itungan", filena bakal kosong. Dina conto urang, leungitna téks teu jadi masalah, jadi fsync teu diperlukeun. Basis data henteu ngabagi optimisme ieu.

Basis data mangrupikeun program kompléks anu tiasa dianggo sareng seueur file dina waktos anu sami, janten aranjeunna hoyong mastikeun yén data anu ditulisna bakal disimpen dina drive, sabab konsistensi data dina pangkalan data gumantung kana ieu. Basis data dirancang pikeun ngarékam sadaya transaksi anu réngsé sareng siap-siap pikeun pareum listrik iraha waé. Paripolah ieu ngawajibkeun anjeun ngagunakeun fsync terus-terusan dina jumlah anu ageung.

Naon mangaruhan sering ngagunakeun fsync

Kalawan I / O normal, sistem operasi nyoba ngaoptimalkeun komunikasi disk, saprak drive éksternal anu slowest dina hirarki memori. Ku alatan éta, sistem operasi nyoba nulis saloba mungkin data dina hiji aksés ka drive.

Hayu urang nunjukkeun dampak ngagunakeun fsync kalayan conto khusus. Kami ngagaduhan SSD ieu salaku subjek tés:

  • Intel® DC SSD S4500 480 GB, disambungkeun via Kang Tata 3.2, 6 Gb / s;
  • Samsung 970 EVO Ditambah 500GB, disambungkeun via PCIe 3.0 x4, ~ 31 Gbps.

Tés dilaksanakeun dina Intel® Xeon® W-2255 anu ngajalankeun Ubuntu 20.04. Pikeun nguji disk, sysbench 1.0.18 dipaké. Disk ngagaduhan partisi tunggal anu diformat salaku ext4. Nyiapkeun pikeun tés nyaéta nyiptakeun file 100 GB:

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

Ngajalankeun tés:

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

Hasil tés dibere dina tabél.

nguji
Intel® S4500
Samsung 970 EVO+

Baca tanpa fsync, MiB/s
5734.89
9028.86

Tulis tanpa fsync, MiB/s
3823.26
6019.24

Maca nganggo fsync, MiB/s
37.76
3.27

Ngarékam sareng fsync, MiB/s
25.17
2.18

Ieu gampang pikeun nempo yén NVMe ti bagean klien confidently ngarah nalika sistem operasi sorangan mutuskeun kumaha dianggo kalayan disk, sarta leungit lamun fsync dipaké. Ieu raises dua patarosan:

  1. Naha laju maca ngaleuwihan rubakpita fisik tautan dina tés tanpa fsync?
  2. Naha bagéan server SSD langkung saé dina nanganan sajumlah ageung pamundut fsync?

Jawaban kana patarosan anu kahiji saderhana: sysbench ngahasilkeun file anu dieusi enol. Ku kituna, tés ieu dilaksanakeun leuwih 100 gigabytes nol. Kusabab data pisan seragam jeung bisa diprediksi, rupa-rupa optimizations OS datang kana antrian, sarta aranjeunna nyata nyepetkeun palaksanaan.

Upami anjeun naroskeun sadayana hasil sysbench, maka anjeun tiasa nganggo 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

nguji
Intel® S4500
Samsung 970 EVO+

Baca tanpa fsync, MiB/s
45.5
178

Tulis tanpa fsync, MiB/s
30.4
119

Maca nganggo fsync, MiB/s
32.6
20.9

Ngarékam sareng fsync, MiB/s
21.7
13.9

Tren nuju turunna kinerja di NVMe nalika nganggo fsync jelas katingali. Anjeun tiasa ngaléngkah ka patarosan kadua.

Optimasi atanapi Bluff

Tadi urang ngomong yén data disimpen dina panyangga a, tapi teu nangtukeun nu mana, saprak éta teu penting. Malah ayeuna urang moal delve kana intricacies tina sistem operasi sarta tunggal kaluar dua jenis umum panyangga:

  • program;
  • hardware.

Panyangga software nujul kana panyangga anu aya dina sistem operasi, jeung panyangga hardware nujul kana mémori volatile tina controller disk. Telepon sistem fsync ngirimkeun paréntah ka drive pikeun nyerat data tina panyanggana ka panyimpenan utama, tapi teu aya jalan pikeun ngontrol palaksanaan paréntah anu leres.

Kusabab SSD ngalaksanakeun langkung saé, dua asumsi tiasa dilakukeun:

  • disk dirancang pikeun beban rencana sarupa;
  • disk "bluffs" na malire paréntah.

Paripolah anu teu jujur ​​tina drive tiasa diperhatoskeun upami anjeun ngalakukeun tés kalayan gagalna listrik. Anjeun tiasa pariksa ieu ku naskah. diskchecker.pl, éta didirikeun di 2005 sataun.

Aksara ieu merlukeun dua mesin fisik - "server" jeung "klien". Klien nyerat sakedik data kana drive anu diuji, nelepon fsync, sareng ngirim inpormasi pangladén ngeunaan naon anu ditulis.

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

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

Saatos ngajalankeun naskah, perlu pikeun de-energize "klien" jeung teu balik kakuatan pikeun sababaraha menit. Kadé megatkeun sambungan subjek test tina listrik, sarta teu ngan ngalakukeun hiji shutdown teuas. Sanggeus sababaraha waktu, server bisa disambungkeun tur dimuat kana OS. Saatos booting OS, anjeun kedah ngamimitian deui diskchecker.pl, tapi kalawan argumen ngabuktoskeun.

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

Dina ahir cék, anjeun bakal ningali jumlah kasalahan. Upami aranjeunna 0, teras disk lulus ujian. Pikeun ngaluarkeun kombinasi kaayaan anu suksés pikeun disk, percobaan tiasa diulang sababaraha kali.

S4500 kami henteu nunjukkeun kasalahan leungitna kakuatan, anu hartosna éta siap pikeun beban kalayan seueur telepon fsync.

kacindekan

Nalika milih disk atanapi sadaya konfigurasi anu siap, anjeun kedah émut spésifik tugas anu kedah direngsekeun. Dina glance kahiji, sigana écés yén NVMe, nyaéta, SSD sareng panganteur PCIe, langkung gancang tibatan SSD SATA "klasik". Nanging, sakumaha anu urang kahartos ayeuna, dina kaayaan spésifik sareng tugas-tugas anu tangtu ieu sanés waé.

Kumaha anjeun nguji komponén server nalika nyéwa ti panyadia IaaS?
Kami ngantosan anjeun dina koméntar.

Naha NVMe kuring langkung laun tibatan SSD?

sumber: www.habr.com

Tambahkeun komentar