முதலியன போதுமான செயல்திறனுக்காக ஃபியோ மூலம் வட்டுகளை எவ்வாறு சரிபார்க்கலாம்

குறிப்பு. மொழிபெயர்: இந்த கட்டுரை, etcd தரவுத்தளத்தின் செயல்பாடு தொடர்பான உண்மையான பிரச்சனைக்கு தீர்வு காண ஐபிஎம் கிளவுட் இன்ஜினியர்களால் மேற்கொள்ளப்பட்ட சிறு-ஆராய்ச்சியின் விளைவாகும். இதேபோன்ற பணி எங்களுக்கு பொருத்தமானது, இருப்பினும், ஆசிரியர்களின் பிரதிபலிப்புகள் மற்றும் செயல்களின் போக்கு ஒரு பரந்த சூழலில் சுவாரஸ்யமாக இருக்கலாம்.

முதலியன போதுமான செயல்திறனுக்காக ஃபியோ மூலம் வட்டுகளை எவ்வாறு சரிபார்க்கலாம்

முழு கட்டுரையின் சுருக்கமான சுருக்கம்: fio மற்றும் etc

ஒரு etcd கிளஸ்டரின் செயல்திறன் அடிப்படை சேமிப்பகத்தின் வேகத்தைப் பொறுத்தது. செயல்திறனைக் கண்காணிக்க, etcd பல்வேறு Prometheus அளவீடுகளை ஏற்றுமதி செய்கிறது. அவற்றில் ஒன்று wal_fsync_duration_seconds. etcd ஆவணத்தில் அது கூறுகிறதுஇந்த அளவீட்டின் 99வது சதவிகிதம் 10 எம்எஸ்க்கு மிகாமல் இருந்தால், சேமிப்பகம் போதுமானதாக இருக்கும் என்று கருதலாம்…

நீங்கள் லினக்ஸ் கணினிகளில் etcd கிளஸ்டரை அமைப்பதைக் கருத்தில் கொண்டால் மற்றும் இயக்கிகள் (எஸ்எஸ்டி போன்றவை) போதுமான வேகத்தில் உள்ளனவா என்பதைச் சோதிக்க விரும்பினால், பிரபலமான I/O டெஸ்டரைப் பயன்படுத்த பரிந்துரைக்கிறோம் நம்பிக்கை. பின்வரும் கட்டளையை இயக்கினால் போதும் (டைரக்டரி test-data சோதிக்கப்பட்ட இயக்ககத்தின் ஏற்றப்பட்ட பகிர்வில் அமைந்திருக்க வேண்டும்):

fio --rw=write --ioengine=sync --fdatasync=1 --directory=test-data --size=22m --bs=2300 --name=mytest

வெளியீட்டைப் பார்த்து, 99வது சதவிகிதம் பொருந்துகிறதா என்பதைச் சரிபார்க்க மட்டுமே உள்ளது fdatasync 10 எம்.எஸ். அப்படியானால், உங்கள் டிரைவ் வேகமானது. இங்கே ஒரு எடுத்துக்காட்டு வெளியீடு:

fsync/fdatasync/sync_file_range:
  sync (usec): min=534, max=15766, avg=1273.08, stdev=1084.70
  sync percentiles (usec):
   | 1.00th=[ 553], 5.00th=[ 578], 10.00th=[ 594], 20.00th=[ 627],
   | 30.00th=[ 709], 40.00th=[ 750], 50.00th=[ 783], 60.00th=[ 1549],
   | 70.00th=[ 1729], 80.00th=[ 1991], 90.00th=[ 2180], 95.00th=[ 2278],
   | 99.00th=[ 2376], 99.50th=[ 9634], 99.90th=[15795], 99.95th=[15795],
   | 99.99th=[15795]

சில குறிப்புகள்:

  1. மேலே உள்ள எடுத்துக்காட்டில், நாங்கள் அளவுருக்களை சரிசெய்துள்ளோம் --size и --bs ஒரு குறிப்பிட்ட வழக்குக்கு. அர்த்தமுள்ள முடிவுகளைப் பெற fio, உங்கள் பயன்பாட்டுக்கு பொருத்தமான மதிப்புகளைக் குறிப்பிடவும். அவற்றை எவ்வாறு தேர்வு செய்வது என்பது கீழே விவாதிக்கப்படும்.
  2. சோதனையின் போது மட்டுமே fio வட்டு துணை அமைப்பை ஏற்றுகிறது. நிஜ வாழ்க்கையில், பிற செயல்முறைகள் வட்டில் எழுதப்படும் (தொடர்புடையவை தவிர wal_fsync_duration_seconds) இந்த கூடுதல் சுமை அதிகரிக்கலாம் wal_fsync_duration_seconds. வேறு வார்த்தைகளில் கூறுவதானால், 99 சதவிகிதம் சோதனை மூலம் பெறப்பட்டால் fio, 10 ms ஐ விட சற்று குறைவாக மட்டுமே, சேமிப்பக செயல்திறன் போதுமானதாக இல்லை என்பதற்கான நல்ல வாய்ப்பு உள்ளது.
  3. சோதனைக்கு உங்களுக்கு பதிப்பு தேவைப்படும் fio 3.5 க்கும் குறைவாக இல்லை, ஏனெனில் பழைய பதிப்புகள் முடிவுகளை ஒருங்கிணைக்காது fdatasync சதவீதம் வடிவில்.
  4. மேலே உள்ள முடிவு பொது முடிவில் இருந்து ஒரு சிறிய பகுதி மட்டுமே fio.

fio மற்றும் etcd பற்றி மேலும்

WALs போன்றவை பற்றி சில வார்த்தைகள்

பொதுவாக, தரவுத்தளங்கள் பயன்படுத்துகின்றன செயலில் பதிவு செய்தல் (எழுதுவதற்கு முன் பதிவு செய்தல், WAL). போன்றவையும் பாதிக்கப்படுகிறது. WAL பற்றிய விவாதம் இந்த கட்டுரையின் எல்லைக்கு அப்பாற்பட்டது, ஆனால் எங்கள் நோக்கங்களுக்காக, நீங்கள் தெரிந்து கொள்ள வேண்டியது என்னவென்றால், ஒவ்வொரு etcd கிளஸ்டர் உறுப்பினரும் WAL ஐ நிலையான சேமிப்பகத்தில் சேமித்து வைக்கிறார்கள். etcd சில முக்கிய மதிப்பு சேமிப்பக செயல்பாடுகளை (புதுப்பிப்புகள் போன்றவை) WAL க்கு செயல்படுத்தும் முன் எழுதுகிறது. ஸ்னாப்ஷாட்களுக்கு இடையே ஒரு நோட் செயலிழந்து மறுதொடக்கம் செய்தால், WAL இன் உள்ளடக்கங்களின் அடிப்படையில் முந்தைய ஸ்னாப்ஷாட்டில் இருந்து பரிமாற்றங்களை etcd மீட்டெடுக்க முடியும்.

இவ்வாறு, ஒவ்வொரு முறையும் ஒரு கிளையன்ட் KV ஸ்டோரில் ஒரு விசையைச் சேர்க்கும் போது அல்லது ஏற்கனவே உள்ள விசையின் மதிப்பைப் புதுப்பிக்கும் போது, ​​etcd ஆனது WAL இல் செயல்பாட்டின் விளக்கத்தைச் சேர்க்கிறது, இது நிலையான ஸ்டோரில் இருக்கும் வழக்கமான கோப்பாகும். etcd தொடரும் முன் WAL உள்ளீடு உண்மையில் சேமிக்கப்பட்டுள்ளதா என்பதை 100% உறுதியாகக் கொண்டிருக்க வேண்டும். லினக்ஸில் இதை அடைய, கணினி அழைப்பைப் பயன்படுத்தினால் போதாது write, இயற்பியல் ஊடகங்களுக்கு எழுதும் செயல்பாடு தாமதமாகலாம் என்பதால். எடுத்துக்காட்டாக, லினக்ஸ் ஒரு WAL உள்ளீட்டை நினைவகத்தில் உள்ள கர்னல் தற்காலிக சேமிப்பில் (எ.கா., பக்க தற்காலிக சேமிப்பில்) சிறிது நேரம் வைத்திருக்கலாம். தரவு மீடியாவில் எழுதப்படுவதை உறுதிசெய்ய, எழுதப்பட்ட பிறகு கணினி அழைப்பை மேற்கொள்ள வேண்டும் fdatasync - இதைத்தான் etcd செய்கிறது (பின்வரும் வெளியீட்டில் நீங்கள் பார்க்க முடியும் strace; இங்கே 8 - WAL கோப்பு விளக்கம்):

21:23:09.894875 lseek(8, 0, SEEK_CUR)   = 12808 <0.000012>
21:23:09.894911 write(8, ".20210220361223255266632$1020103026"34"rn3fo"..., 2296) = 2296 <0.000130>
21:23:09.895041 fdatasync(8)            = 0 <0.008314>

துரதிர்ஷ்டவசமாக, நிலையான சேமிப்பகத்திற்கு எழுதுவதற்கு சிறிது நேரம் எடுக்கும். fdatasync அழைப்புகளை நீண்டகாலமாக செயல்படுத்துவது etcd இன் செயல்திறனை பாதிக்கலாம். களஞ்சிய ஆவணத்தில் சுட்டிக்காட்டப்பட்டதுபோதுமான செயல்திறனுக்காக அனைத்து அழைப்புகளின் காலத்தின் 99 வது சதவிகிதம் அவசியம் fdatasync WAL கோப்பில் எழுதும் போது 10 ms க்கும் குறைவாக இருந்தது. மற்ற சேமிப்பகம் தொடர்பான அளவீடுகள் உள்ளன, ஆனால் இந்தக் கட்டுரை அதில் கவனம் செலுத்தும்.

fio உடன் சேமிப்பகத்தை மதிப்பிடுதல்

ஒரு குறிப்பிட்ட சேமிப்பகம் போன்றவற்றைப் பயன்படுத்திப் பயன்படுத்துவதற்கு ஏற்றதா என்பதை நீங்கள் மதிப்பீடு செய்யலாம் நம்பிக்கை — ஒரு பிரபலமான I/O சோதனையாளர். வட்டு I/O பல்வேறு வழிகளில் நிகழலாம் என்பதை நினைவில் கொள்ளவும்: ஒத்திசைவு/ஒத்திசைவு, பல்வேறு syscal classகள் மற்றும் பல. நாணயத்தின் மறுபக்கம் அது fio பயன்படுத்த மிகவும் கடினம். பயன்பாட்டில் பல அளவுருக்கள் உள்ளன, மேலும் அவற்றின் மதிப்புகளின் வெவ்வேறு சேர்க்கைகள் முற்றிலும் மாறுபட்ட முடிவுகளுக்கு வழிவகுக்கும். etcdக்கான நியாயமான மதிப்பீட்டைப் பெற, fio ஆல் உருவாக்கப்பட்ட எழுதும் சுமை, etcd இன் WAL கோப்பு எழுதும் சுமைக்கு முடிந்தவரை நெருக்கமாக இருப்பதை உறுதிசெய்ய வேண்டும்:

  • இதன் பொருள் உருவாக்கப்பட்டது fio சுமை குறைந்தபட்சம் கோப்பில் தொடர்ச்சியாக எழுதும் தொடராக இருக்க வேண்டும், அங்கு ஒவ்வொரு எழுத்தும் கணினி அழைப்பைக் கொண்டிருக்கும். writeதொடர்ந்து fdatasync.
  • தொடர் எழுத்தை இயக்க, நீங்கள் கொடியைக் குறிப்பிட வேண்டும் --rw=write.
  • என்று fio அழைப்புகளைப் பயன்படுத்தி எழுதினார் write (மற்ற கணினி அழைப்புகளை விட - எடுத்துக்காட்டாக, pwrite), கொடியைப் பயன்படுத்தவும் --ioengine=sync.
  • இறுதியாக, கொடி --fdatasync=1 ஒவ்வொரு பின்னும் உத்தரவாதம் அளிக்கிறது write இருக்க வேண்டும் fdatasync.
  • எங்கள் எடுத்துக்காட்டில் மற்ற இரண்டு அளவுருக்கள்: --size и --bs - குறிப்பிட்ட பயன்பாட்டு வழக்கைப் பொறுத்து மாறுபடலாம். அடுத்த பகுதி அவற்றின் கட்டமைப்பை விவரிக்கும்.

நாங்கள் ஏன் ஃபியோவைத் தேர்ந்தெடுத்தோம், அதை எப்படி அமைப்பது என்று கற்றுக்கொண்டோம்

இந்த குறிப்பு நாம் சந்தித்த ஒரு உண்மையான வழக்கில் இருந்து வருகிறது. குபெர்னெட்டஸ் v1.13 இல் ப்ரோமிதியஸில் கண்காணிப்புடன் ஒரு கிளஸ்டர் இருந்தது. etcd v3.2.24க்கான சேமிப்பகமாக SSDகள் பயன்படுத்தப்பட்டன. Etcd அளவீடுகள் மிக அதிக தாமதங்களைக் காட்டின fdatasync, கொத்து சும்மா இருந்த போதும். எங்களுக்கு, இந்த அளவீடுகள் மிகவும் சந்தேகத்திற்குரியதாகத் தோன்றின, மேலும் அவை எதைப் பிரதிநிதித்துவப்படுத்துகின்றன என்பது எங்களுக்குத் தெரியவில்லை. கூடுதலாக, கிளஸ்டர் மெய்நிகர் இயந்திரங்களைக் கொண்டிருந்தது, எனவே தாமதம் மெய்நிகராக்கத்தால் ஏற்பட்டதா அல்லது SSD காரணமா என்று சொல்ல முடியவில்லை.

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

இதைச் செய்ய, இரண்டு சிக்கல்கள் தீர்க்கப்பட வேண்டும்:

  • முதலில், WAL கோப்புகளுக்கு எழுதும் போது etcd மூலம் உருவாக்கப்படும் I/O லோட் எப்படி இருக்கும்? என்ன கணினி அழைப்புகள் பயன்படுத்தப்படுகின்றன? பதிவுத் தொகுதிகளின் அளவு என்ன?
  • இரண்டாவதாக, மேலே உள்ள கேள்விகளுக்கான பதில்கள் எங்களிடம் உள்ளன என்று வைத்துக்கொள்வோம். அதனுடன் தொடர்புடைய சுமைகளை எவ்வாறு இனப்பெருக்கம் செய்வது fio? அனைத்து பிறகு fio - ஏராளமான அளவுருக்கள் கொண்ட மிகவும் நெகிழ்வான பயன்பாடு (இதைச் சரிபார்க்க எளிதானது, எடுத்துக்காட்டாக, இங்கே - தோராயமாக மொழிபெயர்ப்பு.).

ஒரே கட்டளை அடிப்படையிலான அணுகுமுறையைப் பயன்படுத்தி இரண்டு சிக்கல்களையும் நாங்கள் தீர்த்தோம் lsof и strace:

  • உதவியுடன் lsof செயல்முறையால் பயன்படுத்தப்படும் அனைத்து கோப்பு விளக்கங்களையும், அவை குறிப்பிடும் கோப்புகளையும் நீங்கள் பார்க்கலாம்.
  • உதவியுடன் strace நீங்கள் ஏற்கனவே இயங்கும் செயல்முறையை பகுப்பாய்வு செய்யலாம் அல்லது ஒரு செயல்முறையை இயக்கலாம் மற்றும் அதை கவனிக்கலாம். கட்டளை இந்த செயல்முறையால் செய்யப்பட்ட அனைத்து கணினி அழைப்புகளையும், விருப்பமாக, அதன் சந்ததியினரையும் காட்டுகிறது. பிந்தையது ஃபோர்க்கிங் செய்யும் செயல்முறைகளுக்கு முக்கியமானது, மேலும் etcd என்பது அத்தகைய செயல்முறைகளில் ஒன்றாகும்.

நாங்கள் செய்த முதல் விஷயம், பயன்படுத்த வேண்டும் strace குபெர்னெட்டஸ் கிளஸ்டரில் உள்ள etcd சர்வர் செயலற்ற நிலையில் இருக்கும்போது அதை ஆய்வு செய்ய.

எனவே WAL பதிவுத் தொகுதிகள் மிகவும் அடர்த்தியாகத் தொகுக்கப்பட்டுள்ளன, பெரும்பான்மையின் அளவு 2200-2400 பைட்டுகள் வரம்பில் இருந்தது. அதனால்தான் இந்தக் கட்டுரையின் தொடக்கத்தில் உள்ள கட்டளை கொடியைப் பயன்படுத்துகிறது --bs=2300 (bs ஒவ்வொரு எழுதும் தொகுதியின் பைட்டுகளின் அளவு fio).

பதிப்பு, வரிசைப்படுத்தல், அளவுரு மதிப்புகள் போன்றவற்றைப் பொறுத்து etcd எழுதும் தொகுதிகளின் அளவு மாறுபடலாம் என்பதை நினைவில் கொள்ளவும். - இது காலத்தை பாதிக்கிறது fdatasync. உங்களிடம் இதே போன்ற பயன்பாட்டு வழக்கு இருந்தால், உடன் பகுப்பாய்வு செய்யவும் strace புதுப்பித்த மதிப்புகளைப் பெற உங்கள் etcd செயல்முறைகள்.

பின்னர், கோப்பு முறைமையுடன் etcd எவ்வாறு செயல்படுகிறது என்பதைப் பற்றிய தெளிவான மற்றும் விரிவான புரிதலைப் பெற, நாங்கள் அதை கீழே இருந்து இயக்கினோம். strace கொடிகளுடன் -ffttT. இது குழந்தை செயல்முறைகளைப் பிடிக்கவும், ஒவ்வொன்றின் வெளியீட்டையும் தனித்தனி கோப்பில் எழுதவும் முடிந்தது. கூடுதலாக, ஒவ்வொரு கணினி அழைப்பின் தொடக்க நேரம் மற்றும் கால அளவு பற்றிய விரிவான தகவல்கள் பெறப்பட்டன.

கட்டளையையும் பயன்படுத்தினோம் lsofவெளியீடு பற்றிய உங்கள் புரிதலை உறுதிப்படுத்த strace எந்த கோப்பு விளக்கி எந்த நோக்கத்திற்காக பயன்படுத்தப்பட்டது என்பதன் அடிப்படையில். எனக்கு முடிவு கிடைத்தது strace, மேலே உள்ளதைப் போன்றது. ஒத்திசைவு நேரங்களுடனான புள்ளியியல் கையாளுதல்கள் மெட்ரிக் என்பதை உறுதிப்படுத்தியது wal_fsync_duration_seconds etcd மேட்ச் அழைப்புகளிலிருந்து fdatasync WAL கோப்பு விளக்கங்களுடன்.

உடன் உருவாக்க fio etcd இல் உள்ளதைப் போன்ற ஒரு பணிச்சுமை, பயன்பாட்டின் ஆவணங்கள் ஆய்வு செய்யப்பட்டு, எங்கள் பணிக்கு ஏற்ற அளவுருக்கள் தேர்ந்தெடுக்கப்பட்டன. சரியான சிஸ்டம் அழைப்புகள் செயலில் உள்ளதா என்பதைச் சரிபார்த்து, இயங்குவதன் மூலம் அவற்றின் கால அளவை உறுதிப்படுத்தியுள்ளோம் fio из strace (இது போன்றவற்றில் செய்யப்பட்டது போல).

அளவுருவின் மதிப்பை தீர்மானிப்பதில் குறிப்பிட்ட கவனம் செலுத்தப்பட்டது --size. இது ஃபியோ பயன்பாட்டால் உருவாக்கப்பட்ட மொத்த I/O சுமையைக் குறிக்கிறது. எங்கள் விஷயத்தில், இது மீடியாவுக்கு எழுதப்பட்ட மொத்த பைட்டுகளின் எண்ணிக்கை. இது அழைப்புகளின் எண்ணிக்கைக்கு நேரடியாக விகிதாசாரமாகும் write (மற்றும் fdatasync) ஒரு குறிப்பிட்ட விஷயத்திற்கு bs அழைப்புகளின் எண்ணிக்கை fdatasync உள்ளது size / bs.

சதவீதத்தில் நாங்கள் ஆர்வமாக இருந்ததால், மாதிரிகளின் எண்ணிக்கை புள்ளியியல் முக்கியத்துவத்திற்கு போதுமானதாக இருப்பதை உறுதிசெய்ய முயன்றோம். மற்றும் அவர்கள் அதை முடிவு செய்தனர் 10^4 (இது 22 எம்பி அளவிற்கு ஒத்துள்ளது) போதுமானதாக இருக்கும். சிறிய அளவுரு மதிப்புகள் --size அதிக உச்சரிக்கப்படும் சத்தம் கொடுத்தது (உதாரணமாக, அழைப்புகள் fdatasync, இது வழக்கத்தை விட அதிக நேரம் எடுக்கும் மற்றும் 99வது சதவீதத்தை பாதிக்கிறது).

அது உன் இஷ்டம்

எப்படி பயன்படுத்துவது என்பதை கட்டுரை காட்டுகிறது fio etcd உடன் பயன்படுத்தப்படும் ஊடகம் போதுமான வேகமானதா என்பதை ஒருவர் தீர்மானிக்க முடியும். இப்போது அது உங்களுடையது! சேவையில் SSD அடிப்படையிலான சேமிப்பகத்துடன் மெய்நிகர் இயந்திரங்களை நீங்கள் ஆராயலாம் ஐபிஎம் கிளவுட்.

மொழிபெயர்ப்பாளரிடமிருந்து பி.எஸ்

பயன்பாட்டின் ஆயத்த எடுத்துக்காட்டுகளுடன் fio மற்ற சிக்கல்களைத் தீர்ப்பதற்கு இதில் காணலாம் ஆவணங்கள் அல்லது நேரடியாக திட்ட களஞ்சியங்கள் (ஆவணத்தில் குறிப்பிடப்பட்டுள்ளதை விட இன்னும் பல உள்ளன).

மொழிபெயர்ப்பாளரிடமிருந்து பி.பி.எஸ்

எங்கள் வலைப்பதிவிலும் படிக்கவும்:

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

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