ولې زما NVMe د SSD په پرتله ورو دی؟

ولې زما NVMe د SSD په پرتله ورو دی؟
پدې مقاله کې به موږ د I / O فرعي سیسټم ځینې لنډیزونه او په فعالیت باندې د دوی اغیزې وګورو.

څو اونۍ دمخه زه یوې پوښتنې ته ورغلم چې ولې په یو سرور کې NVMe په بل کې د SATA په پرتله ورو دی. ما د سرورونو ځانګړتیاوو ته وکتل او پوه شوم چې دا یو چال پوښتنه وه: NVMe د کاروونکي برخې څخه و، او SSD د سرور برخې څخه و.

په ښکاره ډول، دا سمه نده چې په مختلفو چاپیریالونو کې د مختلفو برخو محصولات پرتله کړئ، مګر دا یو بشپړ تخنیکي ځواب ندی. موږ به اساسات مطالعه کړو، تجربې به ترسره کړو او پوښتنې ته به ځواب ورکړو.

fsync څه شی دی او چیرته کارول کیږي

د ډرایو سره د کار ګړندي کولو لپاره ، ډیټا بفر کیږي ، دا په بې ثباته حافظه کې زیرمه کیږي تر هغه چې یو مناسب فرصت ځان ته وړاندې کړي ترڅو ډرایو ته د بفر مینځپانګې خوندي کړي. د فرصت معیارونه د عملیاتي سیسټم او ډرایو ځانګړتیاو لخوا ټاکل کیږي. د بریښنا د ناکامۍ په صورت کې، په بفر کې ټول معلومات به ورک شي.

دلته یو شمیر دندې شتون لري په کوم کې چې تاسو اړتیا لرئ ډاډ ترلاسه کړئ چې په فایل کې بدلونونه ډرایو ته لیکل شوي ، او په منځمهاله بفر کې دروغ مه کوئ. دا ډاډ د POSIX-compliant fsync سیسټم کال په کارولو سره ترلاسه کیدی شي. د fsync کال د بفر څخه ډرایو ته لیکلو ته اړ کوي.

راځئ چې د بفر اغیزې د مصنوعي مثال سره د لنډ 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;
}

تبصرې په پروګرام کې د عملونو ترتیب په ښه توګه تشریح کوي. متن "د ژوند اصلي پوښتنې ته ځواب، کائنات او دا ټول" به د عملیاتي سیسټم لخوا بفر شي، او که تاسو د "حساب کولو" په جریان کې د ری سیٹ تڼۍ په فشارولو سره سرور بیا پیل کړئ، فایل به خالي وي. زموږ په مثال کې، د متن ضایع کومه ستونزه نده، نو fsync ته اړتیا نشته. ډیټابیسونه دا خوشبیني نه شریکوي.

ډیټابیسونه پیچلي برنامې دي چې په ورته وخت کې د ډیری فایلونو سره کار کوي ، نو دوی غواړي ډاډ ترلاسه کړي چې هغه معلومات چې دوی یې لیکي به په ډرایو کې زیرمه شي ، ځکه چې په ډیټابیس کې د ډیټا تسلسل پدې پورې اړه لري. ډیټابیسونه ډیزاین شوي ترڅو ټولې بشپړ شوي لیږدونه ثبت کړي او په هر وخت کې د بریښنا بندیدو لپاره چمتو وي. دا چلند تاسو مجبوروي چې fsync په دوامداره توګه په لوی مقدار کې وکاروئ.

د fsync پرله پسې کارول څه اغیزه کوي

د نورمال I/O سره، عملیاتي سیسټم هڅه کوي د ډیسک ارتباط غوره کړي، ځکه چې بهرني ډرایو د حافظې په درجه بندي کې خورا ورو دي. له همدې امله، عملیاتي سیسټم هڅه کوي چې ډرایو ته په یوه لاسرسي کې د امکان تر حده ډیر معلومات ولیکئ.

راځئ چې د یو ځانګړي مثال سره د fsync کارولو اغیز وښیو. موږ لاندې SSDs د ازموینې مضامینو په توګه لرو:

  • Intel® DC SSD S4500 480 GB، د SATA 3.2، 6 Gb/s له لارې وصل شوی؛
  • سامسنګ 970 EVO پلس 500GB، د PCIe 3.0 x4 له لارې وصل شوی، ~ 31 Gbps.

ازموینې په Intel® Xeon® W-2255 کې ترسره کیږي چې اوبنټو 20.04 چلوي. د ډیسکونو ازموینې لپاره ، sysbench 1.0.18 کارول کیږي. ډیسکونه یو واحد تقسیم لري چې د ext4 بڼه لري. د ازموینې لپاره چمتو کول د 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
سامسنګ 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

دا لیدل اسانه دي چې د پیرودونکي برخې څخه NVMe په ډاډ سره رهبري کوي کله چې عملیاتي سیسټم پخپله پریکړه کوي چې څنګه د ډیسکونو سره کار وکړي ، او له لاسه ورکوي کله چې fsync کارول کیږي. دا دوه پوښتنې راپورته کوي:

  1. ولې د لوستلو سرعت د fsync پرته په ازموینه کې د لینک فزیکي بینډ ویت څخه ډیر دی؟
  2. ولې د سرور برخه SSD د لوی شمیر fsync غوښتنو اداره کولو کې غوره ده؟

د لومړۍ پوښتنې ځواب ساده دی: sysbench د صفر ډک فایلونه تولیدوي. په دې توګه، ازموینه د 100 ګیګابایټ صفر څخه پورته ترسره شوه. څرنګه چې معلومات خورا یونیفورم او د وړاندوینې وړ دي، د OS مختلف اصلاحونه په لوبې کې راځي، او دوی د پام وړ اجرا کول ګړندي کوي.

که تاسو د sysbench ټولې پایلې پوښتنې کوئ، نو تاسو کولی شئ د فیو څخه کار واخلئ.

# Без 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
سامسنګ 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

په NVMe کې د فعالیت کمیدو په لور تمایل کله چې د fsync کارول په ښکاره ډول لیدل کیږي. تاسو کولی شئ دویمې پوښتنې ته لاړ شئ.

اصلاح کول یا بلف

مخکې مو وویل چې معلومات په بفر کې زیرمه شوي، مګر مشخص نه کړل چې په کوم کې، ځکه چې دا مهم نه و. حتی اوس به موږ د عملیاتي سیسټمونو پیچلتیاو ته پام ونه کړو او د بفرونو دوه عمومي ډولونه جلا کړو:

  • پروګرام
  • هارډویر

د سافټویر بفر هغه بفرونو ته اشاره کوي چې په عملیاتي سیسټم کې دي، او د هارډویر بفر د ډیسک کنټرولر بې ثباته حافظې ته اشاره کوي. د fsync سیسټم کال ډرایو ته کمانډ لیږي ترڅو د خپل بفر څخه اصلي ذخیره ته ډیټا ولیکي ، مګر دا د کمانډ سم اجرا کولو کنټرول لپاره هیڅ لاره نلري.

څرنګه چې SSD ښه فعالیت کوي، دوه انګیرنې کیدی شي:

  • ډیسک د ورته پلان د بار لپاره ډیزاین شوی؛
  • ډیسک "بلف" کوي او کمانډ له پامه غورځوي.

د ډرایو بې ایمانه چلند لیدل کیدی شي که تاسو د بریښنا ناکامۍ سره ازموینه ترسره کړئ. تاسو کولی شئ دا د سکریپټ سره چیک کړئ. diskchecker.pl، هغه وو تاسیس شوی په 2005 کال کې.

دا سکریپټ دوه فزیکي ماشینونو ته اړتیا لري - "سرور" او "پیرودونکي". پیرودونکي د ازموینې لاندې ډرایو ته لږ مقدار ډیټا لیکي ، fsync ته زنګ وهي ، او سرور ته د هغه څه په اړه معلومات لیږي چې لیکل شوي.

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

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

د سکریپټ چلولو وروسته، دا اړینه ده چې "پیرودونکي" غیر فعال کړئ او د څو دقیقو لپاره بریښنا بیرته مه ورکوئ. دا مهمه ده چې د ازموینې موضوع له بریښنا څخه منحل کړئ، او نه یوازې یو سخت بند ترسره کړئ. د یو څه وخت وروسته، سرور کولی شي وصل شي او په OS کې بار شي. د OS بوټ کولو وروسته، تاسو اړتیا لرئ چې بیا پیل کړئ diskchecker.pl، مګر د یو دلیل سره تایید.

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

د چک په پای کې، تاسو به د غلطیو شمیر وګورئ. که دوی 0 وي، نو ډیسک ازموینه تیره کړه. د دې لپاره چې د ډیسک لپاره د شرایطو یو ترکیب خارج کړئ، تجربه څو ځله تکرار کیدی شي.

زموږ S4500 د بریښنا له لاسه ورکولو کومه تېروتنه نده ښودلې، پدې معنی چې دا د ډیری fsync تلیفونونو سره بار کولو لپاره چمتو دی.

پایلې

کله چې ډیسکونه یا بشپړ چمتو شوي تشکیلات غوره کړئ ، تاسو باید د دندو مشخصات په پام کې ونیسئ کوم چې باید حل شي. په لومړي نظر کې ، داسې ښکاري چې NVMe ، دا دی ، د PCIe انٹرفیس سره SSD ، د "کلاسیک" SATA SSD څخه ګړندی دی. په هرصورت، لکه څنګه چې موږ نن ورځ پوهیږو، په ځانګړو شرایطو کې او په ځانګړو دندو کې ممکن داسې نه وي.

تاسو څنګه د سرور اجزاو ازموینه کوئ کله چې د IaaS چمتو کونکي څخه کرایه کوئ؟
موږ په نظرونو کې ستاسو په تمه یو.

ولې زما NVMe د SSD په پرتله ورو دی؟

سرچینه: www.habr.com

Add a comment