fio සහ etcd ගැන කෙටි කතාවක්
පොකුරු කාර්ය සාධනය
fio --rw=write --ioengine=sync --fdatasync=1 --directory=test-data --size=22m --bs=2300 --name=mytest
ඔබට අවශ්ය වන්නේ ප්රතිඵල දෙස බලා කාලසීමාවේ 99 වැනි ප්රතිශතය දැයි පරීක්ෂා කිරීමයි
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]
සටහන්
- අපි අපගේ විශේෂිත අවස්ථාව සඳහා --size සහ --bs විකල්ප අභිරුචිකරණය කර ඇත. fio වෙතින් ප්රයෝජනවත් ප්රතිඵලයක් ලබා ගැනීමට, ඔබේම අගයන් සපයන්න. ඒවා ලබා ගන්නේ කොහෙන්ද? කියවන්න
අපි fio වින්යාස කිරීමට ඉගෙන ගත් ආකාරය . - පරීක්ෂා කිරීමේදී, සියලුම I/O load පැමිණෙන්නේ fio වෙතින්. සැබෑ ජීවිතයකදී, wal_fsync_duration_seconds වලට අදාළ ඒවාට අමතරව වෙනත් ලිවීමේ ඉල්ලීම් ගබඩාවට පැමිණීමට ඉඩ ඇත. අමතර පැටවීම wal_fsync_duration_seconds වල අගය වැඩි කරයි. එබැවින් 99 වැනි ප්රතිශතය 10ms ට ආසන්න නම්, ඔබේ ගබඩාවේ වේගය අවසන් වේ.
- අනුවාදය ගන්න
fio 3.5 ට වඩා අඩු නොවේ (පෙර ඒවා fdatasync කාල ප්රතිශත පෙන්වන්නේ නැත). - ඉහත දක්වා ඇත්තේ fio වෙතින් ලැබෙන ප්රතිඵලවල කොටසක් පමණි.
fio සහ etcd ගැන දිග කතාවක්
ආදියෙහි WAL යනු කුමක්ද?
සාමාන්යයෙන් දත්ත සමුදායන් භාවිතා කරයි
සේවාලාභියෙකු යතුරු-අගය ගබඩාවට යතුරක් එක් කරන විට හෝ පවතින යතුරක අගය යාවත්කාලීන කරන විට, etcd විසින් අඛණ්ඩ ගබඩාවේ ඇති සාමාන්ය ගොනුවක් වන WAL හි ක්රියාකාරිත්වය වාර්තා කරයි. etcd සැකසීම දිගටම කරගෙන යාමට පෙර WAL ප්රවේශය ඇත්ත වශයෙන්ම සිදු වූ බවට සම්පූර්ණයෙන්ම සහතික විය යුතුය. Linux වලදී, මේ සඳහා එක් පද්ධති ඇමතුමක් ප්රමාණවත් නොවේ.
21:23:09.894875 lseek(8, 0, SEEK_CUR) = 12808 <0.000012>
21:23:09.894911 write(8, ". 20210220361223255266632$10 20103026"34"rn3fo"..., 2296) = 2296 <0.000130>
21:23:09.895041 fdatasync(8) = 0 <0.008314>
අවාසනාවකට, ස්ථීර ගබඩාවට ලිවීම ක්ෂණිකව සිදු නොවේ. fdatasync ඇමතුම මන්දගාමී නම්, etcd පද්ධතියේ ක්රියාකාරිත්වය අඩාල වේ.
fio සමඟ ගබඩාව ඇස්තමේන්තු කිරීම
ඔබේ ගබඩාව etcd සඳහා සුදුසු දැයි ඔබට ඇගයීමට අවශ්ය නම්, ඉතා ජනප්රිය I/O load testing මෙවලමක් වන fio භාවිතා කරන්න. තැටි මෙහෙයුම් බෙහෙවින් වෙනස් විය හැකි බව මතක තබා ගත යුතුය: සමමුහුර්ත සහ අසමමුහුර්ත, පද්ධති ඇමතුම් බොහෝ පන්ති, ආදිය. ප්රතිඵලයක් ලෙස, fio භාවිතා කිරීම තරමක් අපහසු වේ. එයට බොහෝ පරාමිති ඇති අතර ඒවායේ අගයන්හි විවිධ සංයෝජන ඉතා වෙනස් I/O වැඩ බරක් නිපදවයි. etcd සඳහා ප්රමාණවත් සංඛ්යා ලබා ගැනීම සඳහා, WAL ගොනු ලිවීමේදී fio වෙතින් වන පරීක්ෂණ ලිවීමේ භාරය etcd වෙතින් වන සත්ය භාරයට හැකි තරම් ආසන්න බව ඔබ සහතික කර ගත යුතුය.
එබැවින්, fio, අවම වශයෙන්, ගොනුවට අඛණ්ඩව ලිවීම් මාලාවක් ආකාරයෙන් බරක් සෑදිය යුතුය, සෑම ලිවීමක්ම පද්ධති ඇමතුමකින් සමන්විත වේ.
ඇයි හරියටම fio සහ අපි එය පිහිටුවීමට ඉගෙන ගත්තේ කෙසේද
මෙම ලිපියෙන් අපි සැබෑ නඩුවක් විස්තර කරමු. අපිට පොකුරක් තියෙනවා
නමුත් මේ සඳහා ගැටළු දෙකක් විසඳිය යුතු විය. පළමුව, WAL වෙත ලිවීමේදී etcd නිර්මාණය කරන I/O load එක මොන වගේද? භාවිතා කරන පද්ධති ඇමතුම් මොනවාද? වාර්තාවල ප්රමාණය කොපමණද? දෙවනුව, අපි මෙම ප්රශ්නවලට පිළිතුරු දෙන්නේ නම්, අපි fio සමඟ සමාන වැඩ ප්රමාණයක් ප්රතිනිෂ්පාදනය කරන්නේ කෙසේද? fio යනු බොහෝ විකල්ප සහිත ඉතා නම්යශීලී මෙවලමක් බව අමතක නොකරන්න. අපි ගැටළු දෙකම එක ප්රවේශයකින් විසඳා ඇත - විධාන භාවිතා කිරීම
පොකුරේ බරක් නොමැති විට Kubernetes සඳහා etcd සේවාදායකය ගවේෂණය කිරීමට අපි මුලින්ම strace භාවිතා කළෙමු. සියලුම WAL වාර්තා පාහේ එකම ප්රමාණයේ බව අපි දුටුවෙමු: බයිට් 2200–2400. එබැවින්, පෝස්ට් ආරම්භයේ ඇති විධානය තුළ, අපි -bs=2300 පරාමිතිය සඳහන් කළෙමු (bs යනු එක් එක් fio ප්රවේශය සඳහා බයිට් වල ප්රමාණය). etcd ප්රවේශයේ ප්රමාණය etcd අනුවාදය, බෙදා හැරීම, පරාමිති අගයන් යනාදිය මත රඳා පවතින අතර fdatasync කාලසීමාවට බලපාන බව සලකන්න. ඔබට සමාන අවස්ථාවක් තිබේ නම්, නිශ්චිත සංඛ්යා සොයා ගැනීමට ඔබේ etcd ක්රියාවලි ස්ට්රේස් සමඟින් පරීක්ෂා කරන්න.
ඉන්පසු, etcd ගොනු පද්ධතිය කරන්නේ කුමක්ද යන්න පිළිබඳ හොඳ අදහසක් ලබා ගැනීම සඳහා, අපි එය strace සහ -ffttT විකල්ප සමඟ ආරම්භ කළෙමු. එබැවින් අපි ළමා ක්රියාවලීන් පරීක්ෂා කර ඒ සෑම එකකම ප්රතිදානය වෙනම ගොනුවක සටහන් කිරීමටත්, එක් එක් පද්ධති ඇමතුම් ආරම්භය සහ කාලසීමාව පිළිබඳ සවිස්තරාත්මක වාර්තා ලබා ගැනීමටත් උත්සාහ කළෙමු. ස්ට්රේස් ප්රතිදානය පිළිබඳ අපගේ විශ්ලේෂණය තහවුරු කිරීමට සහ කුමන කාර්යය සඳහා කුමන ගොනු විස්තරය භාවිතා කරන්නේ දැයි බැලීමට අපි lsof භාවිතා කළෙමු. එබැවින් ස්ට්රේස් ආධාරයෙන්, ඉහත පෙන්වා ඇති ප්රතිඵල ලබා ගන්නා ලදී. wal_fsync_duration_seconds from etcd WAL ගොනු විස්තර සහිත fdatasync ඇමතුම් සමඟ අනුකූල වන බව සමමුහුර්ත කාල සංඛ්යාලේඛන තහවුරු කළේය.
අපි fio සඳහා ප්රලේඛනය හරහා ගොස් අපගේ ස්ක්රිප්ට් සඳහා විකල්ප තෝරා ගත්තෙමු, එවිට fio etcd වලට සමාන බරක් ජනනය කරයි. අපි etcd වලට සමාන strace සිට fio ධාවනය කිරීමෙන් පද්ධති ඇමතුම් සහ ඒවායේ කාලසීමාව ද පරීක්ෂා කළෙමු.
අපි fio වෙතින් සම්පූර්ණ I/O භාරය නියෝජනය කිරීමට --size පරාමිතියෙහි අගය ප්රවේශමෙන් තෝරාගෙන ඇත. අපගේ නඩුවේදී, ගබඩාවට ලියා ඇති මුළු බයිට් ගණන මෙයයි. එය ලිවීමේ (සහ fdatasync) පද්ධති ඇමතුම් ගණනට සෘජුව සමානුපාතික විය. bs හි නිශ්චිත අගයක් සඳහා, fdatasync ඇමතුම් ගණන = විශාලත්වය/bs. අපි ප්රතිශතය ගැන උනන්දු වූ නිසා, අපට සහතික වීමට ප්රමාණවත් සාම්පල තිබිය යුතු අතර, අපට 10^4 ප්රමාණවත් වනු ඇතැයි අපි ගණනය කළෙමු (එය මෙබිබයිට් 22කි). --size කුඩා නම්, පිටස්තර ඇති විය හැක (උදාහරණයක් ලෙස, fdatasync ඇමතුම් කිහිපයක් වෙනදාට වඩා වැඩි කාලයක් ගත වන අතර 99 වැනි ප්රතිශතයට බලපායි).
ඔබම උත්සාහ කරන්න
අපි ඔබට fio භාවිතා කරන්නේ කෙසේද සහ etcd හොඳින් ක්රියා කිරීමට තරම් ආචයනය වේගවත් දැයි බලන්න ආකාරය පෙන්වා දුන්නෙමු. දැන් ඔබට SSD ආචයනය සහිත අතථ්ය යන්ත්ර භාවිතා කර ඔබටම එය අත්හදා බැලිය හැක
මූලාශ්රය: www.habr.com