SSD ஐ விட எனது NVMe ஏன் மெதுவாக உள்ளது?

SSD ஐ விட எனது NVMe ஏன் மெதுவாக உள்ளது?
இந்த கட்டுரையில் I/O துணை அமைப்பின் சில நுணுக்கங்கள் மற்றும் செயல்திறனில் அவற்றின் தாக்கம் ஆகியவற்றைப் பார்ப்போம்.

சில வாரங்களுக்கு முன்பு, ஒரு சர்வரில் உள்ள NVMe இன்னொன்றில் SATA ஐ விட ஏன் மெதுவாக உள்ளது என்ற கேள்வியை நான் எதிர்கொண்டேன். நான் சர்வர் விவரக்குறிப்புகளைப் பார்த்தேன், இது ஒரு தந்திரமான கேள்வி என்பதை உணர்ந்தேன்: NVMe பயனர் பிரிவில் இருந்து வந்தது, மற்றும் SSD சேவையகப் பிரிவில் இருந்து வந்தது.

வெளிப்படையாக, வெவ்வேறு சூழல்களில் வெவ்வேறு பிரிவுகளின் தயாரிப்புகளை ஒப்பிடுவது நியாயமானது அல்ல, ஆனால் இது ஒரு முழுமையான தொழில்நுட்ப பதில் அல்ல. அடிப்படைகளைப் படிப்போம், சோதனைகளை நடத்துவோம் மற்றும் எழுப்பப்பட்ட கேள்விக்கு பதிலைக் கொடுப்போம்.

Fsync என்றால் என்ன, அது எங்கே பயன்படுத்தப்படுகிறது?

டிரைவ்களுடன் வேலை செய்வதை விரைவுபடுத்த, தரவு இடையகப்படுத்தப்படுகிறது, அதாவது, டிரைவில் உள்ள பஃபர் உள்ளடக்கங்களைச் சேமிப்பதற்கான வசதியான வாய்ப்பு கிடைக்கும் வரை கொந்தளிப்பான நினைவகத்தில் சேமிக்கப்படும். "வாய்ப்பு" க்கான அளவுகோல்கள் இயக்க முறைமை மற்றும் இயக்ககத்தின் பண்புகளால் தீர்மானிக்கப்படுகின்றன. மின்சாரம் செயலிழந்தால், பஃபரில் உள்ள அனைத்து தரவுகளும் இழக்கப்படும்.

ஒரு கோப்பிற்கான மாற்றங்கள் இயக்ககத்தில் எழுதப்பட்டவை மற்றும் இடைநிலை இடையகத்தில் அல்ல என்பதை நீங்கள் உறுதிப்படுத்த வேண்டிய பல பணிகள் உள்ளன. POSIX-இணக்கமான 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 ஐப் பயன்படுத்துவதன் தாக்கத்தை விளக்குவோம். எங்களிடம் பின்வரும் 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 வழியாக இணைக்கப்பட்டுள்ளது.

உபுண்டு 2255 இல் இயங்கும் Intel® Xeon® W-20.04 இல் சோதனைகள் நடத்தப்படுகின்றன. வட்டுகளை சோதிக்க Sysbench 1.0.18 பயன்படுத்தப்படுகிறது. வட்டுகளில் ஒரு பகிர்வு உருவாக்கப்பட்டுள்ளது, ext4 ஆக வடிவமைக்கப்பட்டுள்ளது. சோதனைக்குத் தயாராவது 100 ஜிபி கோப்புகளை உருவாக்குவதை உள்ளடக்குகிறது:

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. அதிக எண்ணிக்கையிலான 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
சாம்சங் 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 செயல்திறன் குறைவதற்கான போக்கு தெளிவாகத் தெரியும். நீங்கள் இரண்டாவது கேள்விக்கு பதிலளிக்க செல்லலாம்.

உகப்பாக்கம் அல்லது பிளஃப்

முன்னதாக, தரவு ஒரு இடையகத்தில் சேமிக்கப்படுகிறது என்று நாங்கள் கூறினோம், ஆனால் இது முக்கியமானதல்ல என்பதால் எது என்பதை நாங்கள் குறிப்பிடவில்லை. இப்போது கூட நாம் இயக்க முறைமைகளின் சிக்கல்களை ஆராய மாட்டோம், மேலும் இரண்டு பொதுவான வகை இடையகங்களை முன்னிலைப்படுத்துவோம்:

  • திட்டம்;
  • வன்பொருள்.

மென்பொருள் இடையகமானது இயக்க முறைமையில் இருக்கும் இடையகங்களைக் குறிக்கிறது, மேலும் வன்பொருள் இடையகமானது வட்டு கட்டுப்படுத்தியின் ஆவியாகும் நினைவகத்தைக் குறிக்கிறது. fsync கணினி அழைப்பு அதன் இடையகத்திலிருந்து முக்கிய சேமிப்பகத்திற்கு தரவை எழுதுவதற்கு இயக்ககத்திற்கு ஒரு கட்டளையை அனுப்புகிறது, ஆனால் கட்டளை சரியாக செயல்படுத்தப்பட்டதா என்பதை சரிபார்க்க எந்த வழியும் இல்லை.

SSD சிறந்த முடிவுகளைக் காட்டுவதால், இரண்டு அனுமானங்களைச் செய்யலாம்:

  • வட்டு இதேபோன்ற சுமைக்காக வடிவமைக்கப்பட்டுள்ளது;
  • வட்டு "bluffs" மற்றும் கட்டளையை புறக்கணிக்கிறது.

நீங்கள் ஒரு சக்தி இழப்பு சோதனை நடத்தினால், டிரைவின் நேர்மையற்ற நடத்தை கவனிக்கப்படும். இதை ஸ்கிரிப்ட் மூலம் சரிபார்க்கலாம் 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 வழங்குநரிடமிருந்து வாடகைக்கு எடுக்கும்போது சர்வர் கூறுகளை எவ்வாறு சோதிப்பது?
கருத்துகளில் உங்களுக்காக காத்திருக்கிறோம்.

SSD ஐ விட எனது NVMe ஏன் மெதுவாக உள்ளது?

ஆதாரம்: www.habr.com

கருத்தைச் சேர்