ကျလန်ုပ်၏ NVMe သည် ကျလန်ုပ်၏ SSD ထက် အဘယ်ကဌောင့်နဟေသသနည်သ။

ကျလန်ုပ်၏ NVMe သည် ကျလန်ုပ်၏ SSD ထက် အဘယ်ကဌောင့်နဟေသသနည်သ။
ကဆောင်သပါသတလင် I/O စနစ်ခလဲ၏ ကလဲပဌာသချက်အချို့နဟင့် စလမ်သဆောင်ရည်အပေါ် ၎င်သတို့၏သက်ရောက်မဟုမျာသကို လေ့လာပါမည်။

လလန်ခဲ့သည့် ရက်သတ္တပတ်အနည်သငယ်က ဆာဗာတစ်ခုရဟိ NVMe သည် အခဌာသတစ်ခုရဟိ SATA ထက် အဘယ်ကဌောင့်နဟေသသနည်သဟူသောမေသခလန်သနဟင့် ရင်ဆိုင်ခဲ့ရသည်။ ကျလန်ုပ်သည် ဆာဗာသတ်မဟတ်ချက်မျာသကို ကဌည့်ရဟုပဌီသ ကမေသခလန်သသည် ရဟုပ်ထလေသသောမေသခလန်သဖဌစ်ကဌောင်သ သဘောပေါက်ခဲ့သည်- NVMe သည် အသုံသပဌုသူအပိုင်သမဟဖဌစ်ပဌီသ SSD သည် ဆာဗာအပိုင်သမဟဖဌစ်သည်။

ထင်ရဟာသသည်မဟာ၊ မတူညီသောပတ်ဝန်သကျင်ရဟိ မတူညီသော အစိတ်အပိုင်သမျာသမဟ ထုတ်ကုန်မျာသကို နဟိုင်သယဟဉ်ခဌင်သသည် တရာသမျဟတမဟု မရဟိသော်လည်သ ၎င်သသည် ပဌီသပဌည့်စုံသော နည်သပညာဆိုင်ရာ အဖဌေမဟုတ်ပါ။ အခဌေခံတလေကို လေ့လာ၊ စမ်သသပ်မဟုတလေ ပဌုလုပ်ပဌီသ ဖဌေဆိုခဲ့တဲ့ မေသခလန်သအတလက် အဖဌေကို ရအောင်ယူပါ။

fsync ဆိုတာ ဘာလဲ၊ ဘယ်နေရာမဟာ သုံသတာလဲ။

drives မျာသနဟင့်အလုပ်လုပ်ခဌင်သကို အရဟိန်မဌဟင့်ရန်အတလက်၊ ဆိုလိုသည်မဟာ၊ တည်ငဌိမ်သော memory တလင် သိမ်သဆည်သထာသသော data သည် buffer ၏ contents မျာသကို drive တလင်သိမ်သဆည်သရန် အဆင်ပဌေသောအခလင့်အရေသတစ်ခုပေါ်လာသည်အထိဖဌစ်သည်။ "အခလင့်အလမ်သ" အတလက်စံနဟုန်သမျာသကိုလည်ပတ်မဟုစနစ်နဟင့် drive ၏ဝိသေသလက္ခဏာမျာသဖဌင့်ဆုံသဖဌတ်သည်။ ပါဝါချို့ယလင်သသောအခါ၊ ကဌာသခံရဟိဒေတာအာသလုံသ ဆုံသရဟုံသသလာသပါမည်။

ဖိုင်တစ်ခုသို့ ပဌောင်သလဲမဟုမျာသကို အလယ်အလတ်ကဌာသခံတလင်မဟုတ်ဘဲ drive သို့ရေသထာသကဌောင်သ သေချာစေရန်အတလက် လုပ်ဆောင်စရာမျာသစလာရဟိပါသည်။ POSIX-ကိုက်ညီသော fsync စနစ်ခေါ်ဆိုမဟုကို အသုံသပဌုခဌင်သဖဌင့် ကအာမခံချက်ကို ရယူနိုင်ပါသည်။ fsync ကိုခေါ်ဆိုခဌင်သသည် ကဌာသခံမဟ drive သို့ စာရေသခိုင်သသည်။

C တလင်တိုတောင်သသောပရိုဂရမ်ပုံစံဖဌင့် buffers ၏အကျိုသသက်ရောက်မဟုကို အတုအယောင်ဥပမာတစ်ခုဖဌင့် သရုပ်ပဌကဌပါစို့။

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

မဟတ်ချက်မျာသသည် ပရိုဂရမ်ရဟိ လုပ်ဆောင်ချက်မျာသကို ကောင်သစလာရဟင်သပဌသည်။ "ဘဝ၏အဓိကမေသခလန်သ၏အဖဌေ၊ စကဌဝဠာနဟင့်အရာအာသလုံသ" ဟူသောစာသာသကို operating system မဟကန့်လန့်ခံမည်ဖဌစ်ပဌီသ၊ "တလက်ချက်မဟုမျာသ" အတလင်သပဌန်လည်သတ်မဟတ်ရန်ခလုတ်ကိုနဟိပ်ခဌင်သဖဌင့်ဆာဗာကိုပဌန်လည်စတင်ပါက၊ ဖိုင်သည်ဗလာဖဌစ်လိမ့်မည်။ ကျလန်ုပ်တို့၏ဥပမာတလင်၊ စာသာသဆုံသရဟုံသမဟုသည် ပဌဿနာမဟုတ်ပါ၊ ထို့ကဌောင့် fsync မလိုအပ်ပါ။ ဒေတာဘေ့စ်မျာသသည် ကအကောင်သမဌင်မဟုကို မမျဟဝေပါ။

ဒေတာဘေ့စ်မျာသသည် ဖိုင်မျာသစလာနဟင့် တပဌိုင်နက်အလုပ်လုပ်သည့် ရဟုပ်ထလေသသောပရိုဂရမ်မျာသဖဌစ်သောကဌောင့် ၎င်သတို့ရေသသောဒေတာကို drive တလင် သိမ်သဆည်သမည်ဖဌစ်ကဌောင်သ သေချာစေလိုသောကဌောင့် database အတလင်သရဟိ ဒေတာမျာသ၏ ညီညလတ်မဟုသည် ၎င်သအပေါ်တလင်မူတည်သောကဌောင့် ၎င်သတို့ရေသသာသသည့်ဒေတာကို drive တလင်သိမ်သဆည်သမည်ဖဌစ်ကဌောင်သ သေချာစေလိုပါသည်။ ဒေတာဘေ့စ်မျာသသည် ပဌီသမဌောက်သော လလဟဲပဌောင်သမဟုမျာသအာသလုံသကို မဟတ်တမ်သတင်ရန်နဟင့် အချိန်မရလေသ ပါဝါဆုံသရဟုံသရန် အသင့်ဖဌစ်ရန် ဒီဇိုင်သထုတ်ထာသသည်။ ကအပဌုအမူသည် fsync ကို အမဌောက်အမဌာသ အဆက်မပဌတ် အသုံသပဌုရန် လိုအပ်သည်။

fsync ကို မကဌာခဏ အသုံသပဌုခဌင်သ၏ အကျိုသသက်ရောက်မဟုသည် အဘယ်နည်သ။

သာမာန် I/O ကာလအတလင်သ၊ လည်ပတ်မဟုစနစ်သည် ပဌင်ပဒရိုက်မျာသကို မန်မိုရီအဆင့်တလင် အနဟေသဆုံသဖဌစ်သောကဌောင့်၊ လည်ပတ်မဟုစနစ်သည် ဒစ်ခ်မျာသနဟင့် ဆက်သလယ်မဟုကို အကောင်သဆုံသဖဌစ်အောင် ကဌိုသစာသသည်။ ထို့ကဌောင့်၊ လည်ပတ်မဟုစနစ်သည် drive သို့ဝင်ရောက်ခလင့်တစ်ခုတလင် တတ်နိုင်သမျဟ data မျာသရေသရန်ကဌိုသစာသသည်။

တိကျသောဥပမာတစ်ခုဖဌင့် fsync အသုံသပဌုခဌင်သ၏အကျိုသသက်ရောက်မဟုကို သရုပ်ပဌကဌပါစို့။ ကျလန်ုပ်တို့တလင် စမ်သသပ်ဒရိုက်မျာသအဖဌစ် အောက်ပါ SSD မျာသရဟိသည်။

  • Intel® DC SSD S4500 480 GB၊ SATA 3.2၊ 6 Gbit/s၊
  • Samsung 970 EVO Plus 500GB၊ PCIe 3.0 x4၊ ~31 Gbit/s မဟတစ်ဆင့် ချိတ်ဆက်ထာသသည်။

စစ်ဆေသမဟုမျာသကို Ubuntu 2255 အသုံသပဌုသည့် Intel® Xeon® W-20.04 တလင် ပဌုလုပ်သည်။ Sysbench 1.0.18 ကို disks မျာသကိုစမ်သသပ်ရန်အသုံသပဌုသည်။ အပိုင်သတစ်ခုကို ext4 အဖဌစ် ဖော်မတ်လုပ်ထာသသည့် disk မျာသပေါ်တလင် အပိုင်သတစ်ခုကို ဖန်တီသထာသသည်။ စမ်သသပ်မဟုအတလက် ပဌင်ဆင်ရာတလင် 100 GB ဖိုင်မျာသ ဖန်တီသခဌင်သ ပါဝင်သည်-

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

စမ်သသပ်မဟုမျာသ

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

စာမေသပလဲရလဒ်မျာသကို ဇယာသတလင် ဖော်ပဌထာသသည်။

စမ်သသပ်
Intel® S4500
Samsung 970 EVO+

fsync, MiB/s မပါဘဲ စာဖတ်ခဌင်သ။
5734.89
9028.86

fsync, MiB/s မပါဘဲ အသံသလင်သခဌင်သ။
3823.26
6019.24

fsync, MiB/s ဖဌင့် ဖတ်ခဌင်သ။
37.76
3.27

fsync, MiB/s ဖဌင့် မဟတ်တမ်သတင်ခဌင်သ။
25.17
2.18

လည်ပတ်မဟုစနစ်ကိုယ်တိုင်က disks မျာသနဟင့်မည်သို့အလုပ်လုပ်ရမည်ကိုဆုံသဖဌတ်ပဌီသ fsync ကိုအသုံသပဌုသည့်အခါတလင်ဆုံသရဟုံသသလာသသောအခါ client အပိုင်သမဟ NVMe သည်ယုံကဌည်စိတ်ချစလာညသဆောင်နေကဌောင်သကိုမဌင်ရလလယ်ကူသည်။ ယင်သက မေသခလန်သနဟစ်ခုကို ဖဌစ်ပေါ်စေသည်-

  1. fsync မပါဘဲ စမ်သသပ်မဟုတလင် ဖတ်ရဟုနဟုန်သသည် ချန်နယ်၏ ရုပ်ပိုင်သဆိုင်ရာ လဟိုင်သနဟုန်သထက် အဘယ်ကဌောင့် ကျော်လလန်သနည်သ။
  2. fsync တောင်သဆိုချက်အမျာသအပဌာသကို ကိုင်တလယ်ရာတလင် ဆာဗာအပိုင်သ SSD သည် အဘယ်ကဌောင့် ပိုမိုကောင်သမလန်သနည်သ။

ပထမမေသခလန်သအတလက် အဖဌေက ရိုသရဟင်သသည်- sysbench သည် သုညနဟင့် ပဌည့်နေသော ဖိုင်မျာသကို ထုတ်ပေသသည်။ ထို့ကဌောင့် သုည 100 ဂစ်ဂါဘိုက်ကျော်ကို စမ်သသပ်ခဲ့သည်။ ဒေတာသည် အလလန်တူညီပဌီသ ကဌိုတင်မဟန်သဆနိုင်သောကဌောင့်၊ OS အမျိုသမျိုသကို ပိုမိုကောင်သမလန်အောင်လုပ်ဆောင်မဟုမျာသသည် ပါဝင်လာပဌီသ လုပ်ဆောင်မဟုကို သိသိသာသာ မဌန်ဆန်စေသည်။

sysbench ရလဒ်အာသလုံသကို သင်မေသခလန်သထုတ်ပါက၊ သင်သည် 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

စမ်သသပ်
Intel® S4500
Samsung 970 EVO+

fsync, MiB/s မပါဘဲ စာဖတ်ခဌင်သ။
45.5
178

fsync, MiB/s မပါဘဲ အသံသလင်သခဌင်သ။
30.4
119

fsync, MiB/s ဖဌင့် ဖတ်ခဌင်သ။
32.6
20.9

fsync, MiB/s ဖဌင့် မဟတ်တမ်သတင်ခဌင်သ။
21.7
13.9

fsync ကိုအသုံသပဌုသောအခါ NVMe စလမ်သဆောင်ရည်ကျဆင်သသလာသသည့်သဘောထာသကို ရဟင်သရဟင်သလင်သလင်သမဌင်ရသည်။ ဒုတိယမေသခလန်သကိုဖဌေဖို့ သင်ဆက်သလာသနိုင်ပါတယ်။

ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ သို့မဟုတ် မဟုန်ဝါသခဌင်သ

ဒေတာကို ကဌာသခံတစ်ခုတလင် သိမ်သဆည်သထာသကဌောင်သ ယခင်က ကျလန်ုပ်တို့ပဌောခဲ့ဖူသသော်လည်သ ၎င်သသည် အရေသမကဌီသသောကဌောင့် မည်သည့်အရာကို မသတ်မဟတ်ခဲ့ပါ။ ယခုပင် ကျလန်ုပ်တို့သည် လည်ပတ်မဟုစနစ်မျာသ၏ ရဟုပ်ထလေသနက်နဲမဟုမျာသကို နာသမလည်ဘဲ ယေဘုယျကဌာသခံအမျိုသအစာသနဟစ်မျိုသကို မီသမောင်သထိုသပဌပါမည်။

  • အစီအစဉ်;
  • ဟာ့ဒ်ဝဲ။

software buffer သည် operating system တလင်ရဟိသော buffers မျာသကို ရည်ညလဟန်သပဌီသ hardware buffer သည် disk controller ၏ မတည်ငဌိမ်သော memory ကို ရည်ညလဟန်သသည်။ fsync စနစ်ခေါ်ဆိုမဟုသည် ၎င်သ၏ကဌာသခံမဟ ပင်မသိုလဟောင်မဟုသို့ ဒေတာမျာသရေသရန် drive သို့ အမိန့်တစ်ခုပေသပို့သော်လည်သ အမိန့်ကို မဟန်ကန်စလာလုပ်ဆောင်ကဌောင်သ အတည်ပဌုရန်နည်သလမ်သမရဟိပါ။

SSD သည် အကောင်သဆုံသရလဒ်မျာသကိုပဌသသောကဌောင့်၊ ယူဆချက်နဟစ်ခုကို ပဌုလုပ်နိုင်သည်-

  • disk ကို အလာသတူဝန်အတလက် ဒီဇိုင်သထုတ်ထာသသည်။
  • disk "bluffs" နဟင့် command ကိုလျစ်လျူရဟု။

ပါဝါဆုံသရဟုံသမဟုစမ်သသပ်မဟုပဌုလုပ်ပါက drive ၏မရိုသသာသသောအပဌုအမူကိုသတိပဌုမိနိုင်သည်။ ဒါကို script နဲ့ စစ်ဆေသနိုင်ပါတယ်။ diskchecker.pl, အဲဒါ ထူထောင် 2005 နဟစျတဟငျ။

ကဇာတ်ညလဟန်သသည် ရုပ်ပိုင်သဆိုင်ရာစက်နဟစ်ခု - "ဆာဗာ" နဟင့် "ဖောက်သည်" လိုအပ်သည်။ ကလိုင်သယင့်သည် စမ်သသပ်မဟုအောက်တလင် ဒေတာအနည်သငယ်ကို ဒစ်ထဲသို့ရေသပဌီသ fsync ကိုခေါ်ဆိုကာ ရေသထာသသည့်အရာနဟင့်ပတ်သက်သည့် အချက်အလက်မျာသကို ဆာဗာထံ ပေသပို့သည်။

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

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

ဇာတ်ညလဟန်သကို run ပဌီသနောက်၊ သင်သည် "client" သို့ ပါဝါပိတ်ပဌီသ ပါဝါကို မိနစ်အတော်ကဌာအောင် မပဌန်ပါနဟင့်။ ပဌင်သထန်စလာ ပိတ်ထာသရုံတင်မဟုတ်ဘဲ လျဟပ်စစ်ဓာတ်အာသ စမ်သသပ်နေသူအာသ အဆက်ဖဌတ်ရန် အရေသကဌီသပါသည်။ အချိန်အတော်ကဌာပဌီသနောက်၊ ဆာဗာကို ချိတ်ဆက်ပဌီသ OS တလင် တင်နိုင်သည်။ OS ကို တင်ပဌီသနောက် ၎င်သကို ထပ်မံစတင်ရန် လိုအပ်သည်။ diskchecker.plအငဌင်သအခုံတစ်ခုနဟင့် အတည်ပဌုရန်.

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

စစ်ဆေသမဟုအဆုံသတလင် အမဟာသအယလင်သအရေအတလက်ကို တလေ့ရပါမည်။ 0 ရဟိလျဟင် disk သည်စမ်သသပ်မဟုအောင်မဌင်သည်။ ဒစ်အတလက် ကံကောင်သသော တိုက်ဆိုင်မဟုကို ဖယ်ထုတ်ရန်၊ စမ်သသပ်မဟုကို အကဌိမ်မျာသစလာ ထပ်ခါထပ်ခါ ပဌုလုပ်နိုင်သည်။

ကျလန်ုပ်တို့၏ S4500 သည် ပါဝါဆုံသရဟုံသသလာသသည့်အခါ အမဟာသအယလင်သမျာသမပဌဘဲ၊ ဆိုလိုသည်မဟာ fsync ခေါ်ဆိုမဟုမျာသစလာဖဌင့် အလုပ်မျာသမျာသအတလက် အဆင်သင့်ဖဌစ်နေပါပဌီ။

ကောက်ချက်

ဒစ်ခ်မျာသ သို့မဟုတ် အဆင်သင့်လုပ်ထာသသော ဖလဲ့စည်သမဟုပုံစံမျာသ တစ်ခုလုံသကို ရလေသချယ်သည့်အခါ၊ ဖဌေရဟင်သရန် လိုအပ်သည့် ပဌဿနာမျာသ၏ အတိအကျကို မဟတ်သာသထာသသင့်သည်။ ပထမတစ်ချက်တလင်၊ PCIe မျက်နဟာပဌင်ပါရဟိသော SSD သည် "classic" SATA SSD ထက်ပိုမိုမဌန်ဆန်သည်ဟုထင်ရသည်မဟာထင်ရဟာသသည်။ သို့သော် ယနေ့ကျလန်ုပ်တို့လေ့လာသိရဟိထာသသည့်အတိုင်သ၊ တိကျသောအခဌေအနေမျာသနဟင့် အချို့သောအလုပ်မျာသတလင် ကကိစ္စမျိုသမဖဌစ်နိုင်ပါ။

IaaS ဝန်ဆောင်မဟုပေသသူထံမဟ ငဟာသရမ်သသည့်အခါ ဆာဗာအစိတ်အပိုင်သမျာသကို သင်မည်ကဲ့သို့ စမ်သသပ်သနည်သ။
မဟတ်ချက်မျာသတလင် သင့်အာသ ကျလန်ုပ်တို့ စောင့်မျဟော်နေပါသည်။

ကျလန်ုပ်၏ NVMe သည် ကျလန်ုပ်၏ SSD ထက် အဘယ်ကဌောင့်နဟေသသနည်သ။

source: www.habr.com

မဟတ်ချက် Add