ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය

ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය

මෙම වසන්තයේ දී අපි දැනටමත් හඳුන්වාදීමේ මාතෘකා කිහිපයක් සාකච්ඡා කර ඇත, උදා. ඔබගේ ධාවකයේ වේගය පරීක්ෂා කරන්නේ කෙසේද и RAID යනු කුමක්ද?. මෙයින් දෙවැන්නෙහි, ZFS හි විවිධ බහු තැටි ස්ථලකවල ක්‍රියාකාරිත්වය දිගටම අධ්‍යයනය කිරීමට පවා අපි පොරොන්දු විය. මෙය දැන් සෑම තැනකම යොදවා ඇති ඊළඟ පරම්පරාවේ ගොනු පද්ධතියයි Apple ජංගම දුරකථන කිරීමට උබුන්ටු.

හොඳයි, අද ZFS, කුතුහලයෙන් පිරි පාඨකයින් සමඟ දැන හඳුනා ගැනීමට හොඳම දිනයයි. OpenZFS සංවර්ධක Matt Ahrens ගේ නිහතමානී තක්සේරුව තුළ, "එය ඇත්තෙන්ම අමාරුයි" බව දැන ගන්න.

නමුත් අපි සංඛ්‍යා වෙත යාමට පෙර - සහ පවතිනු ඇත, මම පොරොන්දු වෙමි - තැටි අටේ ZFS වින්‍යාසයේ සියලුම ප්‍රභේද සඳහා, අපි කතා කළ යුතුයි ආකාරය සාමාන්යයෙන්, ZFS තැටියේ දත්ත ගබඩා කරයි.

Zpool, vdev සහ උපාංගය

ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය
මෙම සම්පූර්ණ සංචිත රූප සටහනට සහායක vdev තුනක්, එක් එක් පන්තියෙන් එකක් සහ RAIDz2 සඳහා හතරක් ඇතුළත් වේ.

ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය
නොගැලපෙන vdev වර්ග සහ ප්‍රමාණ සංචිතයක් සෑදීමට සාමාන්‍යයෙන් හේතුවක් නැත - නමුත් ඔබට අවශ්‍ය නම්, එසේ කිරීමෙන් ඔබව වළක්වන්නේ නැත

ZFS ගොනු පද්ධතිය සැබවින්ම අවබෝධ කර ගැනීම සඳහා, ඔබ එහි සැබෑ ව්යුහය දෙස සමීපව බැලිය යුතුය. පළමුව, ZFS සම්ප්‍රදායික වෙළුම් සහ ගොනු පද්ධති කළමනාකරණ ස්ථර ඒකාබද්ධ කරයි. දෙවනුව, එය ගනුදෙනු පිටපත්-මත-ලිවීමේ යාන්ත්‍රණයක් භාවිතා කරයි. මෙම විශේෂාංග වලින් අදහස් වන්නේ පද්ධතිය සාම්ප්‍රදායික ගොනු පද්ධති සහ RAID අරා වලට වඩා ව්‍යුහාත්මකව බෙහෙවින් වෙනස් බවයි. තේරුම් ගත යුතු මූලික ගොඩනැඟිලි කොටස්වල පළමු කට්ටලය වන්නේ ගබඩා සංචිතය (zpool), අතථ්‍ය උපාංගය (vdev) සහ සැබෑ උපාංගය (උපාංගය) ය.

zpool

zpool ගබඩා සංචිතය ඉහළම ZFS ව්‍යුහයයි. සෑම තටාකයකම අතථ්‍ය උපාංග එකක් හෝ කිහිපයක් අඩංගු වේ. අනෙක් අතට, ඒ සෑම එකක්ම සැබෑ උපාංග එකක් හෝ කිහිපයක් අඩංගු වේ (උපාංගය). අතථ්‍ය තටාක යනු ස්වයං අන්තර්ගත ඒකක වේ. එක් භෞතික පරිගණකයකට වෙනම තටාක දෙකක් හෝ වැඩි ගණනක් අඩංගු විය හැකි නමුත්, ඒ සෑම එකක්ම අනෙක් ඒවාගෙන් සම්පූර්ණයෙන්ම ස්වාධීන වේ. තටාකවලට අතථ්‍ය උපාංග බෙදාගත නොහැක.

ZFS අතිරික්තය ඇත්තේ තටාක මට්ටමේ නොව අතථ්‍ය උපාංග මට්ටමේය. සංචිත මට්ටමින් කිසිඳු අතිරික්තයක් නොමැත - vdev හෝ කැප වූ vdev එකක් නැති වුවහොත්, ඒ සමඟම මුළු සංචිතයම නැති වී යයි.

නවීන ආචයන තටාකවලට අථත්‍ය උපාංගයක හැඹිලිය හෝ ලොගය නැතිවීමෙන් නොනැසී පැවතිය හැකිය - විදුලිය ඇනහිටීමකදී හෝ පද්ධති බිඳවැටීමකදී vdev ලොගය නැති වුවහොත් ඔවුන්ට කුඩා අපිරිසිදු දත්ත ප්‍රමාණයක් අහිමි විය හැක.

ZFS "දත්ත ඉරි" සම්පූර්ණ සංචිතය හරහා ලියා ඇති බවට පොදු වැරදි මතයක් ඇත. මෙය සත්ය නොවේ. Zpool යනු විහිලු RAID0 නොවේ, එය වඩාත් විහිලු එකකි JBOD සංකීර්ණ විචල්‍ය බෙදා හැරීමේ යාන්ත්‍රණයක් සමඟ.

බොහෝ දුරට, පවතින නිදහස් ඉඩ ප්‍රමාණය අනුව පවතින අතථ්‍ය උපාංග අතර වාර්තා බෙදා හරිනු ලැබේ, එබැවින් න්‍යායාත්මකව ඒවා සියල්ලම එකවර පුරවනු ලැබේ. ZFS හි වඩාත් මෑත අනුවාදයන් වත්මන් vdev භාවිතය (ඉවත දැමීම) සැලකිල්ලට ගනී - එක් අතථ්‍ය උපාංගයක් තවත් එකකට වඩා සැලකිය යුතු ලෙස කාර්යබහුල නම් (උදාහරණයක් ලෙස, කියවීමේ බර නිසා), ඉහළම නිදහස් ඉඩ අනුපාතය තිබියදී එය ලිවීම සඳහා තාවකාලිකව මඟ හරිනු ලැබේ. .

නවීන ZFS ලිවීමේ වෙන් කිරීමේ ක්‍රම තුළ ගොඩනගා ඇති ප්‍රතිචක්‍රීකරණ හඳුනාගැනීමේ යාන්ත්‍රණය අසාමාන්‍ය ලෙස ඉහළ බරක් ඇති කාලවලදී ප්‍රමාදය අඩු කර ප්‍රතිදානය වැඩි කළ හැකිය - නමුත් එය එසේ නොවේ. carte blanche එක් තටාකයක මන්දගාමී HDD සහ වේගවත් SSD ස්වේච්ඡාවෙන් මිශ්‍ර කිරීමට. එවැනි අසමාන සංචිතයක් තවමත් මන්දගාමී උපාංගයේ වේගයෙන් ක්රියාත්මක වනු ඇත, එනම්, එය සම්පූර්ණයෙන්ම එවැනි උපාංගවලින් සමන්විත වේ.

vdev

සෑම ගබඩා සංචිතයක්ම අතථ්‍ය උපාංග එකකින් හෝ වැඩි ගණනකින් (vdev) සමන්විත වේ. අනෙක් අතට, සෑම vdev එකක්ම සැබෑ උපාංග එකක් හෝ කිහිපයක් ඇතුළත් වේ. බොහෝ අතථ්‍ය උපාංග සරල දත්ත ගබඩා කිරීම සඳහා භාවිතා කරයි, නමුත් CACHE, LOG සහ SPECIAL ඇතුළුව vdev උපකාරක පන්ති කිහිපයක් තිබේ. මෙම සෑම vdev වර්ගයකටම ස්ථාන පහකින් එකක් තිබිය හැක: තනි-උපාංගය, RAIDz1, RAIDz2, RAIDz3 හෝ දර්පණය.

RAIDz1, RAIDz2 සහ RAIDz3 යනු පැරණි අය ද්විත්ව (විකර්ණ) සමානාත්මතා RAID ලෙස හඳුන්වන විශේෂ ප්‍රභේද වේ. 1, 2 සහ 3 එක් එක් දත්ත මංතීරුවකට සමානාත්මතා කොටස් කීයක් වෙන් කර තිබේද යන්න සඳහන් කරයි. සමානාත්මතාවය සැපයීම සඳහා වෙනම තැටි තිබීම වෙනුවට, අතථ්‍ය RAIDz උපාංග තැටි හරහා අර්ධ ඒකාකාරව සමානාත්මතාවය බෙදා හරිනු ලැබේ. RAIDz array එකකට සමානාත්මතා කුට්ටි ඇති තරම් තැටි අහිමි විය හැක; එය තවත් එකක් නැති වුවහොත්, එය අසාර්ථක වන අතර එය සමඟ ගබඩා තටාකය රැගෙන යයි.

දර්පණ අථත්‍ය උපාංගවල (mirror vdev), එක් එක් බ්ලොක් එකක් vdev හි එක් එක් උපාංගයේ ගබඩා කර ඇත. ද්වි-පළල් දර්පණ වඩාත් සුලභ වුවද, කැඩපතක ඕනෑම අත්තනෝමතික උපාංග සංඛ්‍යාවක් අඩංගු විය හැකිය - විශාල ස්ථාපනයන්හිදී, කියවීමේ කාර්ය සාධනය සහ වැරදි ඉවසීම වැඩි දියුණු කිරීම සඳහා ත්‍රිත්ව බොහෝ විට භාවිතා වේ. vdev දර්පණයකට අවම වශයෙන් vdev හි එක් උපාංගයක් ක්‍රියාත්මක වන තාක් ඕනෑම අසාර්ථකත්වයකින් බේරී සිටිය හැක.

තනි vdevs ස්වභාවයෙන්ම භයානකයි. එවැනි අතථ්‍ය උපාංගයක් තනි අසාර්ථකත්වයකින් නොනැසී පවතිනු ඇත - සහ ගබඩා කිරීම හෝ විශේෂ vdev ලෙස භාවිතා කරන්නේ නම්, එහි අසාර්ථකත්වය මුළු තටාකයම විනාශ කිරීමට හේතු වේ. මෙතනදි ගොඩක් පරිස්සම් වෙන්න.

CACHE, LOG, සහ SPECIAL අථත්‍ය උපාංග ඉහත ඕනෑම ස්ථලකය තුළ නිර්මාණය කළ හැක - නමුත් මතක තබා ගන්න, විශේෂ අථත්‍ය උපාංගයක් අහිමි වීම යනු සංචිතය අහිමි වීම යන්නයි, එබැවින් අතිරික්ත ස්ථලකය නිර්දේශ කෙරේ.

උපාංගය

ZFS හි තේරුම් ගැනීමට ඇති පහසුම යෙදුම මෙය විය හැකිය - එය වචනාර්ථයෙන් බ්ලොක් සසම්භාවී ප්‍රවේශ උපාංගයකි. අතථ්‍ය උපාංග තනි තනි උපාංගවලින් සෑදී ඇති බවත්, සංචිතයක් අථත්‍ය උපාංගවලින් සෑදී ඇති බවත් මතක තබා ගන්න.

තැටි, චුම්බක හෝ ඝන තත්වය, vdev හි ගොඩනැංවීමේ කොටස් ලෙස භාවිතා කරන වඩාත් පොදු බ්ලොක් උපාංග වේ. කෙසේ වෙතත්, /dev හි විස්තරයක් සහිත ඕනෑම උපාංගයක් එසේ කරනු ඇත - එබැවින් සම්පූර්ණ දෘඪාංග RAID අරාවන් වෙනම උපාංග ලෙස භාවිතා කළ හැක.

සරල අමු ගොනුවක් යනු vdev එකක් සෑදිය හැකි වඩාත්ම වැදගත් විකල්ප බ්ලොක් උපාංගවලින් එකකි. සිට පරීක්ෂණ තටාක විරල ගොනු සංචිත විධාන පරීක්ෂා කිරීමට සහ දී ඇති ස්ථලකයේ සංචිතයක හෝ අතථ්‍ය උපාංගයක කොපමණ ඉඩ ප්‍රමාණයක් තිබේදැයි බැලීමට ඉතා පහසු ක්‍රමයකි.

ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය
ඔබට තත්පර කිහිපයකින් විරල ගොනු වලින් පරීක්ෂණ සංචිතයක් සෑදිය හැක - නමුත් පසුව සම්පූර්ණ සංචිතය සහ එහි සංරචක මකා දැමීමට අමතක නොකරන්න

ඔබට තැටි අටක සේවාදායකයක් අවශ්‍ය යැයි කියමු සහ 10 TB (~9300 GiB) තැටි භාවිතා කිරීමට සැලසුම් කර ඇත - නමුත් ඔබේ අවශ්‍යතාවයට වඩාත් ගැලපෙන ස්ථලකය කුමක්දැයි ඔබට විශ්වාස නැත. ඉහත උදාහරණයේ දී, අපි තත්පර කිහිපයකින් විරල ගොනු වලින් පරීක්ෂණ සංචිතයක් ගොඩනඟමු - සහ දැන් අපි දනිමු 2 TB තැටි අටක RAIDz10 vdev භාවිතා කළ හැකි ධාරිතාව 50 TiB සපයන බව.

තවත් විශේෂ උපාංග පන්තියක් SPARE වේ. Hot-swap උපාංග, සාමාන්‍ය උපාංග මෙන් නොව, තනි අතථ්‍ය උපාංගයකට වඩා සම්පූර්ණ සංචිතයට අයත් වේ. තටාකයේ ඇති ඕනෑම vdev අසමත් වුවහොත් සහ අමතර උපාංගයක් තටාකයට සම්බන්ධ කර තිබේ නම්, එය ස්වයංක්‍රීයව බලපෑමට ලක් වූ vdev වෙත සම්බන්ධ වේ.

බලපෑමට ලක් වූ vdev වෙත සම්බන්ධ වූ පසු, ප්‍රතිස්ථාපන උපාංගය අතුරුදහන් වූ උපාංගයේ තිබිය යුතු දත්තවල පිටපත් හෝ ප්‍රතිනිර්මාණ ලබා ගැනීමට පටන් ගනී. සාම්ප්‍රදායික RAID වලදී මෙය "නැවත ගොඩනැංවීම" ලෙස හඳුන්වනු ලබන අතර ZFS හි එය "ප්‍රතිනිර්මාණය" වේ.

ප්‍රතිස්ථාපන උපකරණ අසාර්ථක වූ උපාංග ස්ථිරවම ප්‍රතිස්ථාපනය නොකරන බව සැලකිල්ලට ගැනීම වැදගත්ය. මෙය vdev පිරිහීමට ගතවන කාලය අඩු කිරීම සඳහා තාවකාලික ආදේශනයක් පමණි. පරිපාලක විසින් අසාර්ථක වූ vdev උපාංගය ප්‍රතිස්ථාපනය කිරීමෙන් පසුව, අතිරික්තය එම ස්ථිර උපාංගයට ප්‍රතිසාධනය කරනු ලබන අතර, SPARE vdev වෙතින් විසන්ධි වී සම්පූර්ණ සංචිතය සඳහා අමතර කොටසක් බවට පත් වේ.

දත්ත කට්ටල, බ්ලොක් සහ අංශ

අපගේ ZFS ගමනේදී තේරුම් ගැනීමට ඇති මීළඟ ගොඩනැඟිලි කොටස් කට්ටලය දෘඪාංගවලට අඩුවෙන් සම්බන්ධ වන අතර දත්ත සංවිධානය කර ගබඩා කර ඇති ආකාරය සමඟ සම්බන්ධ වේ. සමස්ත ව්‍යුහය පිළිබඳ අවබෝධයක් පවත්වා ගනිමින් විස්තර අවුල් කිරීම වළක්වා ගැනීම සඳහා අපි මෙටාස්ලැබ් වැනි - ස්තර කිහිපයක් මෙහි මඟ හරිමු.

දත්ත කට්ටලය

ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය
අපි මුලින්ම දත්ත කට්ටලයක් සාදන විට, එය පවතින සියලුම සංචිත අවකාශය පෙන්වයි. ඉන්පසුව අපි කෝටාව සකස් කර - සවිකිරීමේ ස්ථානය වෙනස් කරන්න. මැජික්!

ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය
Zvol යනු බොහෝ දුරට එහි ගොනු පද්ධති ස්ථරයෙන් ඉවත් කරන ලද දත්ත කට්ටලයක් පමණි, එය අපි මෙහි සම්පූර්ණයෙන්ම සාමාන්‍ය ext4 ගොනු පද්ධතියකින් ප්‍රතිස්ථාපනය කරමු.

ZFS දත්ත කට්ටලය සම්මත සවිකර ඇති ගොනු පද්ධතියකට දළ වශයෙන් සමාන වේ. සාමාන්‍ය ගොනු පද්ධතියක් මෙන්, මුලින්ම බැලූ බැල්මට එය "තවත් ෆෝල්ඩරයක්" ලෙස පෙනේ. නමුත් සාමාන්‍ය සවිකර ඇති ගොනු පද්ධති මෙන්, සෑම ZFS දත්ත කට්ටලයකටම තමන්ගේම මූලික ගුණාංග ඇත.

පළමුවෙන්ම, දත්ත කට්ටලයකට පවරා ඇති පංගුවක් තිබිය හැක. ඔබ ස්ථාපනය කරන්නේ නම් zfs set quota=100G poolname/datasetname, එවිට ඔබට සවිකර ඇති ෆෝල්ඩරයට ලිවීමට නොහැකි වනු ඇත /poolname/datasetname 100 GiB ට වැඩි.

එක් එක් පේළියේ ආරම්භයේ ඇති කප්පාදුව සහ නොපැමිණීම සැලකිල්ලට ගන්න? සෑම දත්ත කට්ටලයකටම ZFS ධුරාවලිය සහ පද්ධති සවිකිරීම් ධුරාවලිය යන දෙකෙහිම තමන්ගේම ස්ථානයක් ඇත. ZFS ධුරාවලියේ ප්‍රමුඛ කප්පාදුවක් නොමැත - ඔබ සංචිත නාමයෙන් ආරම්භ කර එක් දත්තයක සිට ඊළඟට යන මාර්ගයෙන් ආරම්භ කරන්න. උදාහරණ වශයෙන්, pool/parent/child නමින් දත්ත කට්ටලයක් සඳහා child මාපිය දත්ත කට්ටලය යටතේ parent නිර්මාණාත්මක නමක් සහිත තටාකයක pool.

පෙරනිමියෙන්, දත්ත කට්ටලයක සවිකිරීමේ ලක්ෂ්‍යය ZFS ධුරාවලියේ එහි නමට සමාන වනු ඇත, ප්‍රමුඛ ස්ලෑෂ් - සංචිතය නම් කර ඇත. pool ලෙස සවිකර ඇත /pool, දත්ත කට්ටලය parent තුළ සවි කර ඇත /pool/parent, සහ ළමා දත්ත කට්ටලය child තුළ සවි කර ඇත /pool/parent/child. කෙසේ වෙතත්, දත්ත කට්ටලයේ පද්ධති සවිකිරීමේ ස්ථානය වෙනස් කළ හැක.

අපි පෙන්වා දෙනවා නම් zfs set mountpoint=/lol pool/parent/child, පසුව දත්ත කට්ටලය pool/parent/child ලෙස පද්ධතියට සවි කර ඇත /lol.

දත්ත කට්ටල වලට අමතරව, අපි වෙළුම් (zvols) සඳහන් කළ යුතුය. පරිමාවක් දළ වශයෙන් දත්ත කට්ටලයකට සමාන වේ, එය ඇත්ත වශයෙන්ම ගොනු පද්ධතියක් නොමැති බව හැර - එය බ්ලොක් උපාංගයක් පමණි. උදාහරණයක් ලෙස, ඔබට නිර්මාණය කළ හැකිය zvol නමත් එක්ක mypool/myzvol, පසුව එය ext4 ගොනු පද්ධතියකින් සංයුති කරන්න, ඉන්පසු එම ගොනු පද්ධතිය සවි කරන්න - දැන් ඔබට ext4 ගොනු පද්ධතියක් ඇත, නමුත් ZFS හි සියලුම ආරක්ෂක විශේෂාංග සමඟ! මෙය එක් පරිගණකයක විකාරයක් ලෙස පෙනුනද iSCSI උපාංගයක් අපනයනය කිරීමේදී පසුබිමක් ලෙස වඩාත් අර්ථවත් කරයි.

බ්ලොක්

ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය
ගොනුවක් බ්ලොක් එකකින් හෝ වැඩි ගණනකින් නියෝජනය වේ. සෑම බ්ලොක් එකක්ම එක් අතථ්‍ය උපාංගයක ගබඩා කර ඇත. බ්ලොක් ප්රමාණය සාමාන්යයෙන් පරාමිතියට සමාන වේ වාර්තා ප්රමාණය, නමුත් දක්වා අඩු කළ හැක 2^මාරුව, එහි පාරදත්ත හෝ කුඩා ගොනුවක් තිබේ නම්.

ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය
අපි ඇත්තටම ඇත්තටම ඔබ මාරුව ඉතා අඩුවෙන් තැබුවහොත් විශාල කාර්ය සාධන දඬුවම ගැන අපි විහිළු කරන්නේ නැත

ZFS සංචිතයක, පාර-දත්ත ඇතුළුව සියලුම දත්ත කුට්ටි තුළ ගබඩා කර ඇත. එක් එක් දත්ත කට්ටලය සඳහා උපරිම වාරණ ප්රමාණය දේපල තුළ අර්ථ දක්වා ඇත recordsize (වාර්තා ප්රමාණය). වාර්තා ප්‍රමාණය වෙනස් විය හැක, නමුත් මෙය දැනටමත් දත්ත කට්ටලයට ලියා ඇති කිසිදු බ්ලොක් වල ප්‍රමාණය හෝ ස්ථානය වෙනස් නොකරනු ඇත - එය ලියා ඇති පරිදි නව බ්ලොක් වලට පමණක් බලපායි.

වෙනත් ආකාරයකින් සඳහන් කර නොමැති නම්, වත්මන් පෙරනිමි ප්‍රවේශ ප්‍රමාණය 128 KiB වේ. එය කාර්ය සාධනය පරිපූර්ණ නොවන ආකාරයේ දැඩි වෙළඳාමක් වන නමුත්, බොහෝ අවස්ථාවලදී එය භයානක නොවනු ඇත. Recordsize 4K සිට 1M දක්වා ඕනෑම අගයකට සැකසිය හැක (අමතර සිටුවම් සහිතව recordsize ඔබට ඊටත් වඩා ස්ථාපනය කළ හැකිය, නමුත් මෙය කලාතුරකින් හොඳ අදහසකි).

ඕනෑම බ්ලොක් එකක් යනු එක් ගොනුවක දත්ත පමණි - ඔබට විවිධ ගොනු දෙකක් එක බ්ලොක් එකකට මිරිකා ගත නොහැක. සෑම ගොනුවක්ම එහි විශාලත්වය අනුව බ්ලොක් එකක් හෝ වැඩි ගණනකින් සමන්විත වේ. ගොනු ප්‍රමාණය වාර්තා ප්‍රමාණයට වඩා කුඩා නම්, එය කුඩා බ්ලොක් එකක ගබඩා වේ - නිදසුනක් ලෙස, 2 KiB ගොනුවක් සහිත බ්ලොක් එකක් තැටියේ 4 KiB අංශයක් පමණක් ගනී.

ගොනුව බ්ලොක් කිහිපයක් අවශ්‍ය වන තරමට විශාල නම්, එම ගොනුවේ සියලුම ඇතුළත් කිරීම් ප්‍රමාණයෙන් යුක්ත වේ recordsize - අවසාන ප්‍රවේශය ඇතුළුව, එහි ප්‍රධාන කොටස විය හැකිය භාවිතයට නොගත් අවකාශය.

zvol වෙළුම් වල දේපල නොමැත recordsize - ඒ වෙනුවට ඔවුන්ට සමාන දේපලක් ඇත volblocksize.

අංශ

අවසාන, වඩාත්ම මූලික ගොඩනැඟිලි කොටස වන්නේ අංශයයි. එය ධාරක උපාංගයකට ලිවිය හැකි හෝ කියවිය හැකි කුඩාම භෞතික ඒකකය වේ. දශක කිහිපයක් තිස්සේ, බොහෝ තැටි 512-බයිට් අංශ භාවිතා කළේය. මේ දිනවල, බොහෝ ධාවක KiB අංශ 4ක් සඳහා වින්‍යාස කර ඇති අතර සමහරක් - විශේෂයෙන්ම SSDs - KiB අංශ 8ක් හෝ ඊටත් වඩා විශාල ඒවා සඳහා වින්‍යාස කර ඇත.

ZFS සතුව අංශයේ ප්‍රමාණය අතින් සැකසීමට ඔබට ඉඩ සලසන විශේෂාංගයක් ඇත. මෙම දේපල ashift. තරමක් අවුල් සහගත ලෙස, ashift යනු දෙකක බලයකි. උදාහරණ වශයෙන්, ashift=9 අංශ ප්‍රමාණය 2^9, හෝ බයිට් 512 යන්නයි.

ZFS නව vdev එකකට එක් කළ විට එක් එක් බ්ලොක් උපාංගය පිළිබඳ සවිස්තරාත්මක තොරතුරු සඳහා මෙහෙයුම් පද්ධතියෙන් විමසන අතර, එම තොරතුරු මත පදනම්ව න්‍යායාත්මකව ස්වයංක්‍රීයව ashift සුදුසු ලෙස සකසයි. අවාසනාවකට මෙන්, වින්ඩෝස් එක්ස්පී (අනෙකුත් අංශ ප්‍රමාණයන් සමඟ ධාවක තේරුම් ගැනීමට නොහැකි වූ) සමග ගැළපීම පවත්වා ගැනීම සඳහා බොහෝ ධාවක ඔවුන්ගේ අංශ ප්‍රමාණය ගැන බොරු කියයි.

මෙයින් අදහස් කරන්නේ ZFS පරිපාලකයා ඔවුන්ගේ උපාංගවල සත්‍ය අංශ ප්‍රමාණය දැනගෙන අතින් සකස් කර ගැනීම බෙහෙවින් නිර්දේශ කර ඇති බවයි. ashift. ashift ඉතා කුඩා ලෙස සකසා ඇත්නම්, කියවීමේ/ලිවීමේ මෙහෙයුම් ගණන තාරකා විද්‍යාත්මකව වැඩිවේ. එබැවින්, සැබෑ 512 KiB අංශයකට 4-byte "sectors" ලිවීම යන්නෙන් අදහස් වන්නේ පළමු "අංශය" ලිවීමයි, පසුව 4 KiB අංශය කියවා, දෙවන 512-byte "sector" සමඟ එය වෙනස් කර, එය නැවත අලුත් වෙත ලියන්න. 4 KiB අංශය, සහ එක් එක් ප්රවේශය සඳහා.

සැබෑ ලෝකයේ, එවැනි දඬුවමක් Samsung EVO SSD වලට බලපාන අතර, එය අදාළ විය යුතුය ashift=13, නමුත් මෙම SSD ඒවායේ අංශ ප්‍රමාණය ගැන බොරු වන අතර, එබැවින් පෙරනිමිය ලෙස සකසා ඇත ashift=9. පළපුරුදු පද්ධති පරිපාලකයෙකු මෙම සැකසුම වෙනස් නොකරන්නේ නම්, මෙම SSD ක්‍රියා කරයි හිමින් නිතිපතා චුම්බක HDD.

සංසන්දනය කිරීම සඳහා, විශාල වීම සඳහා ashift ප්රායෝගිකව කිසිදු දඬුවමක් නොමැත. සැබෑ කාර්ය සාධන පහරක් නොමැති අතර, භාවිතයට නොගත් අවකාශයේ වැඩිවීම අනන්තය (හෝ සම්පීඩනය සක්‍රීය කර ඇත්නම් බිංදුව). එමනිසා, 512-byte අංශ භාවිතා කරන ධාවකයන් පවා ස්ථාපනය කරන ලෙස අපි තරයේ නිර්දේශ කරමු ashift=12 නැතහොත් පවා ashift=13අනාගතය දෙස විශ්වාසයෙන් බැලීමට.

දේපළ ashift එක් එක් අතථ්‍ය උපාංග vdev සඳහා ස්ථාපනය කර ඇත, සහ තටාකය සඳහා නොවේ, බොහෝ අය වැරදියට සිතන පරිදි - ස්ථාපනය කිරීමෙන් පසු වෙනස් නොවේ. අහම්බෙන් ගැහුවොත් ashift ඔබ තටාකයකට නව vdev එකක් එකතු කරන විට, ඔබ අඩු කාර්ය සාධන උපාංගයකින් එම තටාකය ආපසු හැරවිය නොහැකි ලෙස දූෂණය කර ඇති අතර, රීතියක් ලෙස, සංචිතය විනාශ කර නැවත ආරම්භ කිරීම හැර වෙනත් විකල්පයක් නොමැත. Vdev මකාදැමීම පවා බිඳුණු සැකසුමකින් ඔබව බේරා නොගනී ashift!

පිටපත්-මත-ලිවීමේ යාන්ත්රණය

ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය
සාමාන්‍ය ගොනු පද්ධතියකට දත්ත නැවත ලිවීමට අවශ්‍ය නම්, එය පිහිටා ඇති සෑම බ්ලොක් එකක්ම වෙනස් කරයි

ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය
පිටපත්-මත-ලියන ගොනු පද්ධතියක් බ්ලොක් එකේ නව අනුවාදයක් ලියන අතර පසුව පැරණි අනුවාදය අගුළු හරියි

ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය
සාරාංශයක් ලෙස, අපි කුට්ටිවල සැබෑ භෞතික සැකැස්ම නොසලකා හරින්නේ නම්, අපගේ “දත්ත වල්ගා තරුව” පවතින අවකාශයේ සිතියම හරහා වමේ සිට දකුණට ගමන් කරන “දත්ත පණුවෙකු” බවට සරල කරයි.

ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය
දැන් අපට පිටපත් ලිවීමේ ස්නැප්ෂොට් ක්‍රියා කරන්නේ කෙසේද යන්න පිළිබඳ හොඳ අදහසක් ලබා ගත හැකිය - සෑම වාරණයක්ම බහු ස්නැප්ෂොට් වලට අයත් විය හැකි අතර, සියලුම ආශ්‍රිත ඡායාරූප විනාශ වන තෙක් පවතිනු ඇත.

ලිවීමේ පිටපත (CoW) යාන්ත්‍රණය ZFS මෙතරම් විශ්මිත පද්ධතියක් බවට පත් කරන මූලික පදනමයි. මූලික සංකල්පය සරලයි - ඔබ සාම්ප්‍රදායික ගොනු පද්ධතියකින් ගොනුවක් වෙනස් කරන ලෙස ඉල්ලා සිටියහොත්, එය ඔබ ඉල්ලන දේ හරියටම කරනු ඇත. ඔබ පිටපත්-ඔන්-රයිට් ගොනු පද්ධතියකින් එකම දේ කිරීමට ඉල්ලා සිටියහොත්, එය "හරි" යැයි කියනු ඇත - නමුත් එය ඔබට බොරුවක් වනු ඇත.

ඒ වෙනුවට, පිටපත්-ඔන්-රයිට් ගොනු පද්ධතියක් නවීකරණය කරන ලද බ්ලොක් එකේ නව අනුවාදයක් ලියයි, පසුව පැරණි බ්ලොක් එක විසන්ධි කිරීමට සහ ඔබ දැන් ලියා ඇති නව බ්ලොක් එක සමඟ එය සම්බන්ධ කිරීමට ගොනුවේ පාර-දත්ත යාවත්කාලීන කරයි.

පැරණි බ්ලොක් එක ඉවත් කිරීම සහ නව එක සම්බන්ධ කිරීම එක් මෙහෙයුමකින් සිදු කරයි, එබැවින් එය බාධා කළ නොහැක - මෙය සිදු වූ පසු ඔබ බලය නැවත සකසන්නේ නම්, ඔබට ගොනුවේ නව අනුවාදයක් ඇති අතර, ඔබ පෙර බලය නැවත සකසන්නේ නම්, එවිට ඔබට තිබේ පැරණි අනුවාදය. ඕනෑම අවස්ථාවක, ගොනු පද්ධතියේ ගැටුම් ඇති නොවේ.

ZFS හි පිටපත් කිරීම ගොනු පද්ධති මට්ටමින් පමණක් නොව, තැටි කළමනාකරණ මට්ටමින් ද සිදු වේ. මෙයින් අදහස් කරන්නේ ZFS වාර්තාවේ සුදු අවකාශයට ගොදුරු නොවන බවයි (RAID හි සිදුරක්) - පද්ධතිය බිඳ වැටීමට පෙර තීරුව අර්ධ වශයෙන් පමණක් පටිගත කර ඇති සංසිද්ධිය, නැවත පණගැන්වීමෙන් පසු අරාවට හානි වීම. මෙහි තීරුව පරමාණුකව ලියා ඇත, vdev සෑම විටම අනුක්‍රමික වේ, සහ බොබ් ඔයාගේ මාමා.

ZIL: ZFS අභිප්‍රාය ලොගය

ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය
ZFS සමමුහුර්ත ලිවීම් විශේෂ ආකාරයකින් හසුරුවයි - එය ඒවා තාවකාලිකව ගබඩා කරයි, නමුත් අසමමුහුර්ත ලිවීම් සමඟ ස්ථිරවම ලිවීමට පෙර වහාම ZIL හි ගබඩා කරයි.

ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය
සාමාන්‍යයෙන්, ZIL වෙත ලියා ඇති දත්ත නැවත කිසි දිනක කියවනු නොලැබේ. නමුත් පද්ධතිය අසාර්ථක වීමෙන් පසුව මෙය කළ හැකිය

ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය
SLOG, හෝ ද්විතීයික LOG උපාංගයක්, සරලවම විශේෂ - සහ වඩාත් වේගවත් - vdev වන අතර එහිදී ZIL ප්‍රධාන ගබඩාවෙන් වෙන වෙනම ගබඩා කළ හැක.

ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය
බිඳවැටීමකින් පසු, ZIL හි ඇති සියලුම අපිරිසිදු දත්ත නැවත ධාවනය වේ - මෙම අවස්ථාවේදී, ZIL SLOG හි ඇත, එබැවින් එය නැවත ධාවනය වේ

ලිවීම් ප්‍රධාන කාණ්ඩ දෙකක් ඇත: සමමුහුර්ත (සමමුහුර්ත) සහ අසමමුහුර්ත (අසමමුහුර්ත). බොහෝ වැඩ බර සඳහා, ලිවීම්වලින් අතිමහත් බහුතරයක් අසමමුහුර්ත වේ - ගොනු පද්ධතිය මඟින් ඒවා එකතු කර කොටස් වශයෙන් නිකුත් කිරීමට ඉඩ සලසයි, ඛණ්ඩනය අඩු කිරීම සහ ප්‍රතිදානය සැලකිය යුතු ලෙස වැඩි කරයි.

සමමුහුර්ත පටිගත කිරීම් සම්පූර්ණයෙන්ම වෙනස් කාරණයක්. යෙදුමක් සමමුහුර්ත ලිවීමක් ඉල්ලා සිටින විට, එය ගොනු පද්ධතියට කියයි: "ඔබ මෙය වාෂ්පශීලී නොවන මතකය සඳහා කැප කළ යුතුය. මේ දැන්, එතකන් මට වෙන කරන්න දෙයක් නෑ.” එබැවින්, සමමුහුර්ත ලිවීම් වහාම තැටියට කැපවිය යුතුය - මෙය ඛණ්ඩනය වැඩි කරයි නම් හෝ ප්‍රතිදානය අඩු කරයි නම්, එසේ විය යුතුය.

ZFS සාමාන්‍ය ගොනු පද්ධති වලට වඩා වෙනස් ලෙස සමමුහුර්ත ලිවීම් හසුරුවයි - ඒවා වහාම සාමාන්‍ය ආචයනය වෙත ෆ්ලෂ් කරනවා වෙනුවට, ZFS ඒවා ZFS Intent Log හෝ ZIL ලෙස හඳුන්වන විශේෂ ගබඩා ප්‍රදේශයකට භාර දෙයි. උපක්රමය නම් මෙම වාර්තා වගේම සාමාන්‍ය අසමමුහුර්ත ලිවීමේ ඉල්ලීම් සමඟ එකතු වී, පසුව සම්පුර්ණයෙන්ම සාමාන්‍ය TXG (ගනුදෙනු කණ්ඩායම්) ලෙස ගබඩා කිරීම සඳහා මතකයේ පවතී.

සාමාන්‍ය ක්‍රියාකාරිත්වය අතරතුර, ZIL ලියා ඇති අතර නැවත කිසිදා කියවා නැත. සුළු මොහොතකට පසු, ZIL වෙතින් වාර්තා RAM වෙතින් සාමාන්‍ය TXG වල ප්‍රධාන ආචයනය සඳහා කැප වූ විට, ඒවා ZIL වෙතින් වෙන් වේ. ZIL වෙතින් යමක් කියවනු ලබන්නේ සංචිතයක් ආනයනය කරන විට පමණි.

ZIL හි දත්ත පවතින අතරතුර ZFS අසාර්ථක වීමක් සිදු වුවහොත් - මෙහෙයුම් පද්ධතියේ බිඳ වැටීමක් හෝ විදුලිය ඇනහිටීමක් සිදු වුවහොත්, එම දත්ත ඊළඟ සංචිත ආනයනයේදී (උදාහරණයක් ලෙස, අසාර්ථක පද්ධතිය නැවත ආරම්භ කරන විට) කියවනු ලැබේ. ZIL හි ඇති ඕනෑම දෙයක් කියවා, TXG වලට කාණ්ඩගත කර, ප්‍රධාන ගබඩාවට කැපවී, ආනයන ක්‍රියාවලියේදී ZIL වෙතින් වෙන් කරනු ලැබේ.

vdev උපකාරක පන්ති වලින් එකක් LOG හෝ SLOG ලෙස හැඳින්වේ, ද්විතියික LOG උපාංගයකි. එයට එක් කාර්යයක් ඇත - ප්‍රධාන vdev ආචයනය මත ZIL ගබඩා කිරීම වෙනුවට, ZIL ගබඩා කිරීම සඳහා වෙනම සහ, වඩාත් වේගවත්, ඉතා ඉහළ ලිවීමේ ප්‍රතිරෝධයක් සහිත, vdev උපාංගයක් සහිත සංචිතයක් සැපයීම. ගබඩා ස්ථානය කුමක් වුවත් ZIL එයම හැසිරේ, නමුත් LOG සමඟ vdev ඉතා ඉහළ ලිවීමේ කාර්ය සාධනයක් තිබේ නම්, සමමුහුර්ත ලිවීම් වේගවත් වනු ඇත.

සංචිතයට LOG සමඟ vdev එකතු කිරීම ක්‍රියා නොකරයි බැහැ අසමමුහුර්ත ලිවීමේ කාර්ය සාධනය වැඩි දියුණු කරන්න - ඔබ සියලු ලිවීම් ZIL වෙත බල කළත් zfs set sync=always, ඒවා තවමත් TXG හි ප්‍රධාන ආචයනය වෙත ලොගය නොමැතිව එකම ආකාරයෙන් සහ එකම වේගයකින් සම්බන්ධ වනු ඇත. එකම සෘජු කාර්ය සාධනය වැඩි දියුණු කිරීම සමමුහුර්ත ලිවීමේ ප්‍රමාදයයි (ඉහළ ලඝු-සටහන් වේගය මෙහෙයුම් වේගවත් කරන බැවින් sync).

කෙසේ වෙතත්, දැනටමත් බොහෝ සමමුහුර්ත ලිවීම් අවශ්‍ය වන පරිසරයක් තුළ, vdev LOG හට අසමමුහුර්ත ලිවීම් සහ හැඹිලිගත නොකළ කියවීම් වක්‍රව වේගවත් කළ හැක. ZIL වාර්තා වෙනම vdev LOG එකකට ඕෆ්ලෝඩ් කිරීම යනු ප්‍රාථමික ආචයනය මත IOPS සඳහා අඩු ආරවුලක් වන අතර, එය සියලු කියවීම් සහ ලිවීම්වල ක්‍රියාකාරිත්වය යම් ප්‍රමාණයකට වැඩි දියුණු කරයි.

ස්නැප්ෂොට්

ZFS පරමාණුක ස්නැප්ෂොට් සහ වර්ධක අසමමුහුර්ත ප්‍රතිනිර්මාණය සඳහා පිටපත්-මත-ලිවීමේ යාන්ත්‍රණය අත්‍යවශ්‍ය පදනමකි. සක්‍රිය ගොනු පද්ධතියට වත්මන් දත්ත සමඟ සියලුම ඇතුළත් කිරීම් සලකුණු කරන පොයින්ටර් ගසක් ඇත - ඔබ ස්නැප්ෂොට් එකක් ගන්නා විට, ඔබ මෙම පොයින්ටර් ගසේ පිටපතක් සාදන්න.

සක්‍රිය ගොනු පද්ධතිය මත වාර්තාවක් උඩින් ලියූ විට, ZFS ප්‍රථමයෙන් බ්ලොක් එකේ නව අනුවාදය භාවිත නොකළ අවකාශයට ලියයි. ඉන්පසු බ්ලොක් එකේ පැරණි අනුවාදය වත්මන් ගොනු පද්ධතියෙන් වෙන් කරයි. නමුත් සමහර ස්නැප්ෂොට් පැරණි බ්ලොක් එකක් සඳහන් කරන්නේ නම්, එය තවමත් නොවෙනස්ව පවතී. එම බ්ලොක් එක සඳහන් කරන සියලුම ස්නැප්ෂොට් විනාශ වන තුරු පැරණි කොටස ඇත්ත වශයෙන්ම නිදහස් ඉඩක් ලෙස ප්‍රතිසාධනය නොවනු ඇත!

අනුකරණය

ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය
2015 දී මගේ Steam පුස්තකාලය 158 GiB වූ අතර ගොනු 126 ක් ඇතුළත් විය. මෙය rsync සඳහා ප්‍රශස්ත තත්ත්වයට ඉතා ආසන්නයි - ජාලය හරහා ZFS අනුවර්තනය "පමණක්" 927% වේගවත් විය.

ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය
එකම ජාලයේ, තනි 40GB Windows 7 අථත්‍ය යන්ත්‍ර රූප ගොනුවක් අනුකරණය කිරීම සම්පූර්ණයෙන්ම වෙනස් කතාවකි. ZFS ප්‍රතිනිර්මාණය rsync වලට වඩා 289 ගුණයක් වේගවත් වේ—නැතහොත් --inplace ස්විචය සමඟින් rsync ඇමතීමට ඔබ ප්‍රමාණවත් නම් "පමණක්" 161 ගුණයක් වේගවත් වේ.

ZFS මූලික කරුණු: ගබඩා කිරීම සහ කාර්ය සාධනය
VM රූපයක් පරිමාණය කරන විට, rsync එය සමඟ පරිමාණය නිකුත් කරයි. නවීන VM රූපයක් සඳහා 1,9 TiB ප්‍රමාණය එතරම් විශාල නොවේ - නමුත් එය ප්‍රමාණවත් තරම් විශාල වන අතර ZFS අනුකරණය rsync --inplace තර්කය සමඟ වුවද rsync වලට වඩා 1148 ගුණයකින් වේගවත් වේ.

ස්නැප්ෂොට් ක්‍රියා කරන ආකාරය ඔබ තේරුම් ගත් පසු, අනුකරණයේ සාරය ග්‍රහණය කර ගැනීම පහසු වනු ඇත. ස්නැප්ෂොට් එකක් යනු හුදෙක් වාර්තා පොයින්ටර් ගසක් වන බැවින්, අප එසේ කරන්නේ නම් එය අනුගමනය කරයි zfs send snapshot, පසුව අපි මෙම ගස සහ ඒ හා සම්බන්ධ සියලුම වාර්තා යවමු. අපි මෙය සමත් වූ විට zfs send в zfs receive ඉලක්ක වස්තුව මත, එය බ්ලොක් එකේ සත්‍ය අන්තර්ගතය සහ ඉලක්ක දත්ත කට්ටලයට කුට්ටි යොමු කරන පොයින්ටර් ගස යන දෙකම ලියයි.

දෙවැන්න මත දේවල් වඩාත් රසවත් වේ zfs send. අපට දැන් පද්ධති දෙකක් ඇත, එක් එක් අඩංගු වේ poolname/datasetname@1, සහ ඔබ නව ඡායාරූපයක් ගන්න poolname/datasetname@2. එමනිසා, ඔබ සතුව ඇති මූලාශ්ර සංචිතයේ datasetname@1 и datasetname@2, සහ ඉලක්ක සංචිතයේ ඇත්තේ පළමු ඡායාරූපය පමණි datasetname@1.

මන්ද මූලාශ්‍රය සහ ඉලක්කය අතර අපට පොදු ඡායාරූපයක් ඇත datasetname@1, අපිට එය කල හැකිය වර්ධනාත්මක zfs send එය මත. අපි සිස්ටම් එකට කිව්වම zfs send -i poolname/datasetname@1 poolname/datasetname@2, එය පොයින්ටර් ගස් දෙකක් සංසන්දනය කරයි. තුළ පමණක් පවතින ඕනෑම ඉඟි @2, පැහැදිලිවම නව කොටස් වෙත යොමු වන්න - එබැවින් අපට එම කුට්ටි වල අන්තර්ගතය අවශ්‍ය වනු ඇත.

දුරස්ථ පද්ධතියක, වර්ධක සැකසීම send සරලවම. මුලින්ම අපි ප්‍රවාහයට ඇතුළත් සියලුම නව ඇතුළත් කිරීම් ලියන්නෙමු send, ඉන්පසු මෙම බ්ලොක් වලට පොයින්ටර් එක් කරන්න. Voila, අපිට තියෙනවා @2 නව පද්ධතිය තුළ!

ZFS අසමමුහුර්ත වර්ධක අනුකරණය යනු rsync වැනි පෙර ස්නැප්ෂොට් නොවන ක්‍රමවලට වඩා විශාල දියුණුවකි. අවස්ථා දෙකේදීම, මාරු කළ දත්ත පමණක් මාරු කරනු ලැබේ - නමුත් rsync පළමුව කළ යුතුය කියවන්න එකතුව පරීක්ෂා කර එය සංසන්දනය කිරීමට තැටියෙන් දෙපැත්තේ ඇති සියලුම දත්ත. ඊට ප්‍රතිවිරුද්ධව, ZFS ප්‍රතිනිර්මාණය පොයින්ටර් ගස් හැර වෙනත් කිසිවක් කියවන්නේ නැත-සහ සමස්ත සැණ රුවෙහි නියෝජනය නොවන කුට්ටි.

බිල්ට් සම්පීඩනය

පිටපත්-මත-ලියන යාන්ත්‍රණය ද ගොඩනඟන ලද සම්පීඩන පද්ධතිය සරල කරයි. සාම්ප්‍රදායික ගොනු පද්ධතියක, සම්පීඩනය ගැටළු සහගත වේ - වෙනස් කරන ලද දත්තවල පැරණි අනුවාදය සහ නව අනුවාදය යන දෙකම එකම අවකාශයේ ඇත.

0x00000000 සිට මෙගාබයිට් බිංදුවක් ලෙස ආරම්භ වන ගොනුවක මැද දත්ත කැබැල්ලක් ඔබ සලකන්නේ නම් - එය තැටියේ තනි අංශයකට සම්පීඩනය කිරීම ඉතා පහසුය. නමුත් අපි මෙම ශුන්‍ය මෙගාබයිට් ප්‍රතිස්ථාපනය JPEG හෝ ව්‍යාජ අහඹු ශබ්දය වැනි මෙගාබයිට් නොගැලපෙන දත්ත සමඟ ප්‍රතිස්ථාපනය කළහොත් කුමක් සිදුවේද? හදිසියේම, එම මෙගාබයිට් දත්ත සඳහා එකක් නොව, 256 KiB අංශ 4 ක් අවශ්‍ය වන අතර, එම තැටි අවකාශයේ එක් අංශයක් පමණක් වෙන් කර ඇත.

ZFS හට මෙම ගැටළුවක් නොමැත, මන්ද නවීකරණය කරන ලද වාර්තා සෑම විටම භාවිතා නොකරන ලද ඉඩකට ලියා ඇත - මුල් කොටස 4 KiB අංශයක් පමණක් ගනී, සහ නව ලිවීමකට 256 ක් ගතවනු ඇත, නමුත් මෙය ගැටළුවක් නොවේ - මෑතකදී වෙනස් කරන ලද කොටසකි. ගොනුවේ "මැද" එහි විශාලත්වය වෙනස් වී තිබේද නැද්ද යන්න නොසලකා භාවිත නොකළ ඉඩකට ලියා ඇත, එබැවින් මෙය ZFS සඳහා සම්පූර්ණයෙන්ම සාමාන්‍ය තත්වයකි.

තනා ඇති ZFS සම්පීඩනය පෙරනිමියෙන් අක්‍රිය කර ඇති අතර, පද්ධතිය ප්ලග් කළ හැකි ඇල්ගොරිතම ලබා දෙයි - දැනට LZ4, gzip (1-9), LZJB සහ ZLE ඇතුළුව.

  • LZ4 යනු ප්‍රවාහ ඇල්ගොරිතමයක් වන අතර එය බොහෝ භාවිත අවස්ථා සඳහා අතිශය වේගවත් සම්පීඩනය සහ විසංයෝජනය සහ කාර්ය සාධන ප්‍රතිලාභ ලබා දෙයි - තරමක් මන්දගාමී CPU වල පවා.
  • GZIP සියලුම Unix භාවිතා කරන්නන් දන්නා සහ ආදරය කරන ගෞරවනීය ඇල්ගොරිතමයකි. ඔබ 1 වන මට්ටමට ළඟා වන විට සම්පීඩන අනුපාතය සහ CPU භාවිතය වැඩි වීමත් සමඟ එය සම්පීඩන මට්ටම් 9-9 සමඟ ක්‍රියාත්මක කළ හැක. ඇල්ගොරිතම සියලුම පෙළ (හෝ වෙනත් අධික ලෙස සම්පීඩිත) භාවිත අවස්ථා සඳහා හොඳින් ගැලපේ, නමුත් බොහෝ විට වෙනත් ආකාරයකින් CPU ගැටළු ඇති කරයි - එය භාවිතා කරන්න. ප්‍රවේශමෙන්, විශේෂයෙන් ඉහළ මට්ටම්වල.
  • LZJB - ZFS හි මුල් ඇල්ගොරිතම. එය යල්පැන ඇති අතර තවදුරටත් භාවිතා නොකළ යුතුය, LZ4 සෑම ආකාරයකින්ම උසස් වේ.
  • නරකයි — ශුන්‍ය මට්ටමේ කේතනය, ශුන්‍ය මට්ටමේ කේතීකරණය. එය කිසිසේත් සාමාන්‍ය දත්ත ස්පර්ශ නොකරයි, නමුත් එය විශාල ශුන්‍ය අනුපිළිවෙලවල් සම්පීඩනය කරයි. සම්පුර්ණ අසම්පීඩ දත්ත කට්ටල (JPEG, MP4 හෝ වෙනත් දැනටමත් සම්පීඩිත ආකෘති වැනි) සඳහා ප්‍රයෝජනවත් වන්නේ එය අසම්පීඩ දත්ත නොසලකා හරින නමුත් ප්‍රතිඵලයක් ලෙස ලැබෙන වාර්තාවල භාවිතයට නොගත් ඉඩ සම්පීඩනය කරන බැවිනි.

සියලුම භාවිත අවස්ථා සඳහා LZ4 සම්පීඩනය අපි නිර්දේශ කරමු; සම්පීඩනය කළ නොහැකි දත්ත සමඟ ගනුදෙනු කිරීමේදී කාර්ය සාධන දඬුවම ඉතා කුඩා වන අතර, සහ වර්ධනය සාමාන්ය දත්ත සඳහා කාර්ය සාධනය සැලකිය යුතු ය. වින්ඩෝස් මෙහෙයුම් පද්ධතියේ නව ස්ථාපනයක් සඳහා අතථ්‍ය යන්ත්‍ර රූපයක් පිටපත් කිරීම (නැවුම් ලෙස ස්ථාපනය කර ඇති OS, තවමත් ඇතුළත දත්ත නොමැත) compression=lz4 සමඟ වඩා 27% වේගයෙන් සමත් විය compression=noneඇතුළත මෙම පරීක්ෂණය 2015 සිට.

ARC - අනුවර්තන ආදේශන හැඹිලිය

ZFS යනු අප දන්නා එකම නවීන ගොනු පද්ධතිය වන අතර එය RAM හි මෑතකදී කියවන ලද කොටස්වල පිටපත් ගබඩා කිරීම සඳහා මෙහෙයුම් පද්ධතියේ පිටු හැඹිලිය මත රඳා නොසිට එහිම කියවීමේ හැඹිලි යාන්ත්‍රණය භාවිතා කරයි.

ස්වදේශීය හැඹිලිය එහි ගැටළු නොමැතිව නොතිබුණද - ZFS හට කර්නලය තරම් ඉක්මනින් නව මතක වෙන් කිරීමේ ඉල්ලීම් වලට ප්‍රතිචාර දැක්විය නොහැක, එබැවින් නව ඇමතුමක් malloc() ARC විසින් දැනට භාවිතා කරන RAM අවශ්‍ය නම් මතකය වෙන් කිරීම අසාර්ථක විය හැක. නමුත් අවම වශයෙන් දැනට ඔබේම හැඹිලිය භාවිතා කිරීමට හොඳ හේතු තිබේ.

MacOS, Windows, Linux සහ BSD ඇතුළු සියලුම දන්නා නවීන මෙහෙයුම් පද්ධති, පිටු හැඹිලිය ක්‍රියාත්මක කිරීම සඳහා LRU (අවම වශයෙන් මෑතකදී භාවිතා කරන ලද) ඇල්ගොරිතම භාවිතා කරයි. මෙය ප්‍රාථමික ඇල්ගොරිතමයක් වන අතර එය එක් එක් කියවීමෙන් පසු හැඹිලි සහිත බ්ලොක් එකක් "පෝලිමේ ඉහළට" තල්ලු කරන අතර නව හැඹිලි මගහැරීම් (තැටියෙන් කියවීමට වඩා තැටියෙන් කියවිය යුතු බ්ලොක්) එකතු කිරීමට අවශ්‍ය පරිදි "පෝලිමේ පහළට" කුට්ටි තල්ලු කරයි. හැඹිලියේ සිට) ඉහළට.

සාමාන්‍යයෙන් ඇල්ගොරිතම හොඳින් ක්‍රියා කරයි, නමුත් විශාල ක්‍රියාකාරී දත්ත කට්ටල සහිත පද්ධති මත, LRU පහසුවෙන් thrashing වෙත යොමු කරයි—නැවත කිසිදාක හැඹිලියෙන් කියවිය නොහැකි බ්ලොක් සඳහා ඉඩ සලසා දීම සඳහා නිතර අවශ්‍ය කුට්ටි ඉවත් කරයි.

ARC යනු "බර" හැඹිලියක් ලෙස සැලකිය හැකි ඉතා අඩු බොළඳ ඇල්ගොරිතමයකි. හැඹිලිගත බ්ලොක් එකක් කියවන සෑම අවස්ථාවකම, එය ටිකක් බර සහ ඉවත් කිරීමට අපහසු වේ - සහ අවහිර කිරීම ඉවත් කිරීමෙන් පසුව පවා ලුහුබැඳ ගියේය නිශ්චිත කාලයක් තුළ. ඉවත් කර ඇති නමුත් පසුව හැඹිලිය තුළට නැවත කියවිය යුතු බ්ලොක් එකක් ද බර වනු ඇත.

මේ සියල්ලේ අවසාන ප්‍රතිඵලය වනුයේ ඉතා ඉහළ පහර අනුපාතයක් සහිත හැඹිලියකි—හැඹිලි පහරවල් (හැඹිලියෙන් කියවීම්) සහ මඟහැරීම් (තැටියෙන් කියවීම) අතර අනුපාතය. මෙය අතිශය වැදගත් සංඛ්‍යාලේඛනයකි - හැඹිලි පහරවල් විශාලත්වයේ ඇණවුම් පමණක් නොව, හැඹිලි මගහැරීම්ද වේගයෙන් සේවා සැපයිය හැකිය, මන්දයත් හැඹිලි පහරවල් වැඩි වන බැවින් තැටියට සමාන්තර ඉල්ලීම් අඩු වන අතර ඉතිරි මග හැරීම් සඳහා ප්‍රමාදය අඩු වේ. තැටිය සමඟ සේවා කළ යුතු බව.

නිගමනය

දැන් අපි ZFS හි මූලික අර්ථ ශාස්ත්‍රය ආවරණය කර ඇත—කොපි-ඔන්-රයිට් ක්‍රියා කරන ආකාරය, මෙන්ම ගබඩා තටාක, අතථ්‍ය උපාංග, බ්ලොක්, අංශ සහ ලිපිගොනු අතර සම්බන්ධතා—අපි සැබෑ ලෝකයේ ක්‍රියාකාරීත්වය සාකච්ඡා කිරීමට සූදානම්ව සිටිමු. සැබෑ සංඛ්යා.

මීළඟ කොටසේදී, අපි එකිනෙක හා සසඳන විට දර්පණය කරන ලද vdev සහ RAIDz තටාකවල සත්‍ය කාර්ය සාධනය දෙස බලමු, එමෙන්ම අප විසින් පරීක්ෂා කරන ලද සම්ප්‍රදායික Linux kernel RAID ස්ථාන සමඟ සසඳන විට. කලින්.

මුලදී අපට අවශ්‍ය වූයේ මූලික කරුණු පමණි - ZFS ස්ථලකය - නමුත් පසුව එවැනි L2ARC, SLOG සහ විශේෂ වෙන් කිරීම වැනි සහායක vdev වර්ග භාවිතය ඇතුළුව, ZFS හි වඩාත් දියුණු වින්‍යාස කිරීම සහ සුසර කිරීම ගැන කතා කිරීමට අපි සූදානම් වනු ඇත.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න