ZFS బేసిక్స్: నిల్వ మరియు పనితీరు

ZFS బేసిక్స్: నిల్వ మరియు పనితీరు

ఈ వసంతకాలంలో మేము ఇప్పటికే కొన్ని పరిచయ అంశాలను చర్చించాము, ఉదాహరణకు, మీ డ్రైవ్‌ల వేగాన్ని ఎలా తనిఖీ చేయాలి и RAID అంటే ఏమిటి. వాటిలో రెండవదానిలో, మేము ZFSలో వివిధ బహుళ-డిస్క్ టోపోలాజీల పనితీరును అధ్యయనం చేయడాన్ని కొనసాగిస్తామని కూడా వాగ్దానం చేసాము. ఇది ఇప్పుడు ప్రతిచోటా అమలు చేయబడుతున్న తదుపరి తరం ఫైల్ సిస్టమ్: నుండి ఆపిల్ కు ఉబుంటు.

బాగా, ఈ రోజు ZFS, పరిశోధనాత్మక పాఠకులతో పరిచయం పొందడానికి ఉత్తమమైన రోజు. OpenZFS డెవలపర్ మాట్ అహ్రెన్స్ యొక్క వినయపూర్వకమైన అభిప్రాయం ప్రకారం, "ఇది నిజంగా కష్టం" అని తెలుసుకోండి.

కానీ మేము సంఖ్యలను పొందే ముందు - మరియు అవి, నేను వాగ్దానం చేస్తాను - ఎనిమిది-డిస్క్ 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 వ్రాత కేటాయింపు పద్ధతులలో నిర్మించిన యుటిలైజేషన్ డిటెక్షన్ మెకానిజం, అసాధారణంగా అధిక లోడ్ సమయంలో జాప్యాన్ని తగ్గిస్తుంది మరియు నిర్గమాంశను పెంచుతుంది - కానీ అది కాదు కార్టే బ్లాంచే ఒక పూల్‌లో నెమ్మదిగా HDDలు మరియు వేగవంతమైన SSDల అసంకల్పిత మిక్సింగ్‌పై. అటువంటి అసమాన పూల్ ఇప్పటికీ నెమ్మదిగా ఉన్న పరికరం యొక్క వేగంతో పనిచేస్తుంది, అంటే ఇది పూర్తిగా అటువంటి పరికరాలతో కూడి ఉన్నట్లుగా ఉంటుంది.

vdev

ప్రతి స్టోరేజ్ పూల్‌లో ఒకటి లేదా అంతకంటే ఎక్కువ వర్చువల్ పరికరాలు ఉంటాయి (వర్చువల్ పరికరం, vdev). ప్రతిగా, ప్రతి vdev ఒకటి లేదా అంతకంటే ఎక్కువ నిజమైన పరికరాలను కలిగి ఉంటుంది. చాలా వర్చువల్ పరికరాలు సాధారణ డేటా నిల్వ కోసం ఉపయోగించబడతాయి, అయితే CACHE, LOG మరియు SPECIALతో సహా అనేక vdev సహాయక తరగతులు ఉన్నాయి. ఈ vdev రకాల్లో ప్రతి ఒక్కటి ఐదు టోపోలాజీలలో ఒకదాన్ని కలిగి ఉండవచ్చు: ఒకే పరికరం (ఒకే పరికరం), RAIDz1, RAIDz2, RAIDz3 లేదా అద్దం (మిర్రర్).

RAIDz1, RAIDz2 మరియు RAIDz3 అనేవి పాత-టైమర్‌లు డబుల్ (వికర్ణ) పారిటీ RAID అని పిలిచే ప్రత్యేక రకాలు. 1, 2 మరియు 3 ప్రతి డేటా స్ట్రిప్‌కు ఎన్ని పారిటీ బ్లాక్‌లు కేటాయించబడతాయో సూచిస్తాయి. పారిటీ కోసం ప్రత్యేక డిస్క్‌లకు బదులుగా, RAIDz వర్చువల్ పరికరాలు ఈ పారిటీని డిస్క్‌ల అంతటా సెమీ-సమానంగా పంపిణీ చేస్తాయి. ఒక RAIDz శ్రేణికి ఎన్ని డిస్క్‌లు ఉన్నాయో, అది పారిటీ బ్లాక్‌లను కలిగి ఉంటుంది; అది మరొకదాన్ని పోగొట్టుకుంటే, అది క్రాష్ అవుతుంది మరియు దానితో పాటు స్టోరేజ్ పూల్‌ను తీసుకుంటుంది.

ప్రతిబింబించిన వర్చువల్ పరికరాలలో (మిర్రర్ vdev), ప్రతి బ్లాక్ vdevలోని ప్రతి పరికరంలో నిల్వ చేయబడుతుంది. రెండు-వెడల్పు అద్దాలు సర్వసాధారణం అయినప్పటికీ, ఏదైనా ఏకపక్ష సంఖ్యలో పరికరాలు అద్దంలో ఉండవచ్చు - మెరుగైన రీడ్ పనితీరు మరియు తప్పు సహనం కోసం ట్రిపుల్స్ తరచుగా పెద్ద ఇన్‌స్టాలేషన్‌లలో ఉపయోగించబడతాయి. vdevలో కనీసం ఒక పరికరం పని చేస్తూనే ఉన్నంత వరకు vdev అద్దం ఏదైనా వైఫల్యాన్ని తట్టుకుంటుంది.

ఒకే vdevలు అంతర్గతంగా ప్రమాదకరమైనవి. అటువంటి వర్చువల్ పరికరం ఒకే వైఫల్యాన్ని మనుగడ సాగించదు - మరియు నిల్వ లేదా ప్రత్యేక vdevగా ఉపయోగించినట్లయితే, దాని వైఫల్యం మొత్తం పూల్ యొక్క నాశనానికి దారి తీస్తుంది. ఇక్కడ చాలా చాలా జాగ్రత్తగా ఉండండి.

CACHE, LOG మరియు SPECIAL VAలు పైన పేర్కొన్న టోపోలాజీలలో దేనినైనా ఉపయోగించి సృష్టించబడతాయి - కానీ SPECIAL VA కోల్పోవడం అంటే పూల్‌ను కోల్పోవడమేనని గుర్తుంచుకోండి, కాబట్టి రిడెండెంట్ టోపోలాజీ ఎక్కువగా సిఫార్సు చేయబడింది.

పరికరం

ఇది బహుశా ZFSలో అర్థం చేసుకోవడానికి సులభమైన పదం - ఇది అక్షరాలా బ్లాక్ రాండమ్ యాక్సెస్ పరికరం. వర్చువల్ పరికరాలు వ్యక్తిగత పరికరాలతో రూపొందించబడిందని గుర్తుంచుకోండి, అయితే పూల్ వర్చువల్ పరికరాలతో రూపొందించబడింది.

డిస్క్‌లు - అయస్కాంత లేదా ఘన స్థితి - vdev యొక్క బిల్డింగ్ బ్లాక్‌లుగా ఉపయోగించే అత్యంత సాధారణ బ్లాక్ పరికరాలు. అయినప్పటికీ, /devలో డిస్క్రిప్టర్ ఉన్న ఏ పరికరం అయినా చేస్తుంది, కాబట్టి మొత్తం హార్డ్‌వేర్ RAID శ్రేణులు ప్రత్యేక పరికరాలుగా ఉపయోగించబడతాయి.

ఒక సాధారణ ముడి ఫైల్ అనేది vdevని నిర్మించగల అతి ముఖ్యమైన ప్రత్యామ్నాయ బ్లాక్ పరికరాలలో ఒకటి. నుండి పరీక్ష కొలనులు చిన్న ఫైళ్లు పూల్ ఆదేశాలను తనిఖీ చేయడానికి మరియు ఇచ్చిన టోపోలాజీ యొక్క పూల్ లేదా వర్చువల్ పరికరంలో ఎంత స్థలం అందుబాటులో ఉందో చూడటానికి ఇది చాలా సులభమైన మార్గం.

ZFS బేసిక్స్: నిల్వ మరియు పనితీరు
మీరు కొన్ని సెకన్లలో స్పేర్ ఫైల్‌ల నుండి టెస్ట్ పూల్‌ను సృష్టించవచ్చు - అయితే మొత్తం పూల్ మరియు దాని భాగాలను తొలగించడం మర్చిపోవద్దు

మీరు ఎనిమిది డిస్క్‌లలో సర్వర్‌ని ఉంచాలనుకుంటున్నారని అనుకుందాం మరియు 10 TB డిస్క్‌లను (~9300 GiB) ఉపయోగించడానికి ప్లాన్ చేయాలనుకుంటున్నారు - కానీ మీ అవసరాలకు ఏ టోపోలాజీ బాగా సరిపోతుందో మీకు ఖచ్చితంగా తెలియదు. పై ఉదాహరణలో, మేము అరుదైన ఫైల్‌ల నుండి ఒక టెస్ట్ పూల్‌ను సెకన్లలో నిర్మిస్తాము - మరియు ఇప్పుడు ఎనిమిది 2 TB డిస్క్‌ల RAIDz10 vdev 50 TiB ఉపయోగించగల సామర్థ్యాన్ని అందిస్తుంది.

పరికరాల యొక్క మరొక ప్రత్యేక తరగతి SPARE (విడి). హాట్-స్వాప్ పరికరాలు, సాధారణ పరికరాల వలె కాకుండా, మొత్తం పూల్‌కు చెందినవి మరియు ఒకే వర్చువల్ పరికరానికి కాదు. పూల్‌లోని 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 - చివరి ఎంట్రీతో సహా, వీటిలో ప్రధాన భాగం కావచ్చు ఉపయోగించని స్థలం.

zvolsకి ఆస్తి లేదు recordsize - బదులుగా వారికి సమానమైన ఆస్తి ఉంది volblocksize.

రంగాలు

చివరి, అత్యంత ప్రాథమిక బిల్డింగ్ బ్లాక్ సెక్టార్. ఇది అంతర్లీన పరికరం నుండి వ్రాయగలిగే లేదా చదవగలిగే అతి చిన్న భౌతిక యూనిట్. అనేక దశాబ్దాలుగా, చాలా డిస్క్‌లు 512-బైట్ సెక్టార్‌లను ఉపయోగించాయి. ఇటీవల, చాలా డిస్క్‌లు 4 KiB సెక్టార్‌ల కోసం కాన్ఫిగర్ చేయబడ్డాయి మరియు కొన్ని - ముఖ్యంగా SSDలు - 8 KiB సెక్టార్‌లు లేదా అంతకంటే ఎక్కువ ఉన్నాయి.

ZFS సిస్టమ్‌లో సెక్టార్ పరిమాణాన్ని మాన్యువల్‌గా సెట్ చేయడానికి మిమ్మల్ని అనుమతించే ఆస్తి ఉంది. ఈ ఆస్తి ashift. కొంత గందరగోళంగా, షిఫ్ట్ అనేది రెండు శక్తి. ఉదాహరణకి, ashift=9 అంటే 2^9 లేదా 512 బైట్‌ల సెక్టార్ పరిమాణం.

ZFS ఆపరేటింగ్ సిస్టమ్‌ను కొత్త vdevకి జోడించినప్పుడు ప్రతి బ్లాక్ పరికరానికి సంబంధించిన వివరణాత్మక సమాచారం కోసం ప్రశ్నిస్తుంది మరియు ఆ సమాచారం ఆధారంగా ఆషిఫ్ట్‌ని స్వయంచాలకంగా స్వయంచాలకంగా ఇన్‌స్టాల్ చేస్తుంది. దురదృష్టవశాత్తూ, Windows XP (ఇతర రంగ పరిమాణాలతో డ్రైవ్‌లను అర్థం చేసుకోలేకపోయింది)తో అనుకూలతను కొనసాగించడానికి చాలా డ్రైవ్‌లు వాటి సెక్టార్ పరిమాణం గురించి అబద్ధాలు చెబుతున్నాయి.

దీని అర్థం ZFS అడ్మినిస్ట్రేటర్ వారి పరికరాల యొక్క వాస్తవ సెక్టార్ పరిమాణాన్ని తెలుసుకోవాలని మరియు మాన్యువల్‌గా సెట్ చేయమని గట్టిగా సలహా ఇస్తున్నారు ashift. ఆషిఫ్ట్ చాలా తక్కువగా సెట్ చేయబడి ఉంటే, అప్పుడు రీడ్ / రైట్ ఆపరేషన్ల సంఖ్య ఖగోళపరంగా పెరుగుతుంది. కాబట్టి, 512-బైట్ "సెక్టార్‌లను" నిజమైన 4 కిబి సెక్టార్‌లోకి రాయడం అంటే మొదటి "సెక్టార్"ని రాయాలి, ఆపై 4 కిబి సెక్టార్‌ని చదవాలి, రెండవ 512-బైట్ "సెక్టార్"తో దాన్ని సవరించాలి, దాన్ని తిరిగి కొత్తదానికి రాయాలి ప్రతి ప్రవేశానికి 4 KiB సెక్టార్ మరియు మొదలైనవి.

వాస్తవ ప్రపంచంలో, అటువంటి పెనాల్టీ Samsung EVO SSDలను తాకుతుంది, దీని కోసం ashift=13, కానీ ఈ SSDలు వాటి సెక్టార్ పరిమాణం గురించి అబద్ధం చెబుతాయి, కాబట్టి డిఫాల్ట్ సెట్ చేయబడింది ashift=9. అనుభవజ్ఞుడైన సిస్టమ్ అడ్మినిస్ట్రేటర్ ఈ సెట్టింగ్‌ని మార్చకపోతే, ఈ SSD పని చేస్తుంది నెమ్మదిగా సంప్రదాయ మాగ్నెటిక్ HDD.

పోలిక కోసం, చాలా పెద్ద పరిమాణం కోసం ashift ఆచరణాత్మకంగా పెనాల్టీ లేదు. నిజమైన పనితీరు పెనాల్టీ లేదు మరియు ఉపయోగించని స్థలంలో పెరుగుదల అనంతమైనది (లేదా కుదింపు ప్రారంభించబడిన సున్నా). కాబట్టి, 512-బైట్ సెక్టార్‌లను ఉపయోగించే డ్రైవ్‌లు కూడా ఇన్‌స్టాల్ చేయాలని మేము గట్టిగా సిఫార్సు చేస్తున్నాము 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, లేదా సెకండరీ లాగ్ పరికరం, కేవలం ప్రత్యేకమైనది - మరియు అత్యంత వేగంగా - vdev, ఇక్కడ ZIL ప్రధాన నిల్వ నుండి విడిగా నిల్వ చేయబడుతుంది

ZFS బేసిక్స్: నిల్వ మరియు పనితీరు
క్రాష్ అయిన తర్వాత, ZILలోని మొత్తం డర్టీ డేటా రీప్లే చేయబడుతుంది - ఈ సందర్భంలో, ZIL SLOGలో ఉంది, కనుక అది అక్కడ నుండి మళ్లీ ప్లే చేయబడుతుంది.

వ్రాత కార్యకలాపాలలో రెండు ప్రధాన వర్గాలు ఉన్నాయి - సింక్రోనస్ (సమకాలీకరణ) మరియు అసమకాలిక (అసింక్). చాలా వర్క్‌లోడ్‌ల కోసం, చాలా వరకు వ్రాతలు అసమకాలికమైనవి - ఫైల్ సిస్టమ్ వాటిని సమగ్రపరచడానికి మరియు బ్యాచ్‌లలో జారీ చేయడానికి అనుమతిస్తుంది, ఫ్రాగ్మెంటేషన్‌ను తగ్గిస్తుంది మరియు నిర్గమాంశను బాగా పెంచుతుంది.

సమకాలీకరించబడిన రికార్డింగ్‌లు పూర్తిగా భిన్నమైన విషయం. ఒక అప్లికేషన్ సింక్రోనస్ రైట్‌ని అభ్యర్థించినప్పుడు, అది ఫైల్ సిస్టమ్‌కి ఇలా చెబుతుంది: "మీరు దీన్ని అస్థిర మెమరీకి కట్టుబడి ఉండాలి ప్రస్తుతంఅప్పటి వరకు నేను చేయగలిగిందేమీ లేదు." కాబట్టి, సింక్రోనస్ రైట్‌లు వెంటనే డిస్క్‌కి కట్టుబడి ఉండాలి-మరియు అది ఫ్రాగ్మెంటేషన్‌ను పెంచినా లేదా నిర్గమాంశను తగ్గించినా, అలానే ఉంటుంది.

సాధారణ ఫైల్ సిస్టమ్‌ల కంటే ZFS సింక్రోనస్ వ్రాతలను విభిన్నంగా నిర్వహిస్తుంది-వెంటనే వాటిని సాధారణ నిల్వకు అప్పగించే బదులు, ZFS వాటిని ZFS ఇంటెంట్ లాగ్ లేదా ZIL అని పిలిచే ప్రత్యేక నిల్వ ప్రాంతానికి కట్టుబడి ఉంటుంది. గమ్మత్తు ఏమిటంటే ఈ రికార్డులు కూడా స్మృతిలో ఉండి, సాధారణ అసమకాలిక వ్రాత అభ్యర్థనలతో పాటు సమగ్రపరచబడి, తర్వాత సంపూర్ణ సాధారణ TXGలుగా (లావాదేవీ సమూహాలు) నిల్వకు ఫ్లష్ చేయబడుతుంది.

సాధారణ ఆపరేషన్‌లో, ZIL వ్రాయబడుతుంది మరియు మళ్లీ చదవదు. కొన్ని క్షణాల తర్వాత, ZIL నుండి రికార్డులు RAM నుండి సాధారణ TXGలలో ప్రధాన నిల్వకు కట్టుబడి ఉన్నప్పుడు, అవి ZIL నుండి వేరు చేయబడతాయి. పూల్ దిగుమతి అయినప్పుడు మాత్రమే ZIL నుండి ఏదైనా చదవబడుతుంది.

ZFS విఫలమైతే - ఆపరేటింగ్ సిస్టమ్ క్రాష్ లేదా విద్యుత్తు అంతరాయం - ZILలో డేటా ఉన్నప్పుడు, ఆ డేటా తదుపరి పూల్ దిగుమతి సమయంలో (ఉదాహరణకు, అత్యవసర వ్యవస్థ పునఃప్రారంభించబడినప్పుడు) చదవబడుతుంది. ZILలోని ఏదైనా చదవబడుతుంది, TXGలుగా వర్గీకరించబడుతుంది, ప్రధాన నిల్వకు కట్టుబడి ఉంటుంది మరియు దిగుమతి ప్రక్రియ సమయంలో ZIL నుండి వేరు చేయబడుతుంది.

vdev సహాయక తరగతులలో ఒకదాన్ని LOG లేదా SLOG అని పిలుస్తారు, ఇది LOG యొక్క ద్వితీయ పరికరం. దీనికి ఒక ప్రయోజనం ఉంది - ZILని ప్రధాన vdev స్టోర్‌లో నిల్వ చేయడానికి బదులుగా, ZILని నిల్వ చేయడానికి ప్రత్యేక, మరియు చాలా వేగవంతమైన, చాలా వ్రాత-నిరోధక vdevని పూల్ అందించడం. ZIL ఎక్కడ నిల్వ చేసినా అదే విధంగా ప్రవర్తిస్తుంది, కానీ LOG vdev చాలా ఎక్కువ వ్రాత పనితీరును కలిగి ఉంటే, సమకాలీకరణ వ్రాతలు వేగంగా ఉంటాయి.

పూల్‌కు LOGతో vdevని జోడించడం పని చేయదు కాదు అసమకాలిక వ్రాత పనితీరును మెరుగుపరచండి - మీరు అన్ని వ్రాతలను ZILకి బలవంతం చేసినప్పటికీ zfs set sync=always, అవి ఇప్పటికీ TXGలోని ప్రధాన నిల్వకు అదే విధంగా మరియు లాగ్ లేకుండా అదే వేగంతో లింక్ చేయబడతాయి. సింక్రోనస్ రైట్‌ల జాప్యం మాత్రమే ప్రత్యక్ష పనితీరు మెరుగుదల (ఎందుకంటే వేగవంతమైన లాగ్ కార్యకలాపాలను వేగవంతం చేస్తుంది). sync).

అయినప్పటికీ, ఇప్పటికే చాలా సింక్రోనస్ రైట్‌లు అవసరమయ్యే వాతావరణంలో, vdev LOG అసమకాలిక వ్రాతలను మరియు కాష్ చేయని రీడ్‌లను పరోక్షంగా వేగవంతం చేస్తుంది. ZIL ఎంట్రీలను ప్రత్యేక vdev LOGకి ఆఫ్‌లోడ్ చేయడం అంటే ప్రాథమిక నిల్వపై IOPS కోసం తక్కువ వివాదాన్ని కలిగిస్తుంది, ఇది అన్ని రీడ్ మరియు రైట్‌ల పనితీరును కొంత మేరకు మెరుగుపరుస్తుంది.

స్నాప్‌షాట్‌లు

కాపీ-ఆన్-రైట్ మెకానిజం ZFS అటామిక్ స్నాప్‌షాట్‌లు మరియు ఇంక్రిమెంటల్ అసమకాలిక ప్రతిరూపణకు అవసరమైన పునాది. యాక్టివ్ ఫైల్ సిస్టమ్ పాయింటర్ ట్రీని కలిగి ఉంది, అది ప్రస్తుత డేటాతో అన్ని రికార్డులను గుర్తు చేస్తుంది - మీరు స్నాప్‌షాట్ తీసుకున్నప్పుడు, మీరు ఈ పాయింటర్ ట్రీ యొక్క కాపీని తయారు చేస్తారు.

సక్రియ ఫైల్ సిస్టమ్‌పై రికార్డ్ ఓవర్‌రైట్ చేయబడినప్పుడు, ZFS మొదట కొత్త బ్లాక్ వెర్షన్‌ను ఉపయోగించని స్థలానికి వ్రాస్తుంది. ఇది ప్రస్తుత ఫైల్ సిస్టమ్ నుండి బ్లాక్ యొక్క పాత సంస్కరణను వేరు చేస్తుంది. కానీ కొన్ని స్నాప్‌షాట్ పాత బ్లాక్‌ని సూచిస్తే, అది ఇప్పటికీ మారదు. ఈ బ్లాక్‌ను సూచించే అన్ని స్నాప్‌షాట్‌లు నాశనం చేయబడే వరకు పాత బ్లాక్ వాస్తవానికి ఖాళీ స్థలంగా పునరుద్ధరించబడదు!

ప్రతిరూపం

ZFS బేసిక్స్: నిల్వ మరియు పనితీరు
2015లో నా స్టీమ్ లైబ్రరీ 158 GiB మరియు 126 ఫైల్‌లను కలిగి ఉంది. ఇది rsync కోసం సరైన పరిస్థితికి చాలా దగ్గరగా ఉంది - నెట్‌వర్క్‌లో ZFS రెప్లికేషన్ "మాత్రమే" 927% వేగంగా ఉంది.

ZFS బేసిక్స్: నిల్వ మరియు పనితీరు
అదే నెట్‌వర్క్‌లో, ఒకే 40GB Windows 7 వర్చువల్ మెషిన్ ఇమేజ్ ఫైల్‌ను ప్రతిరూపం చేయడం పూర్తిగా భిన్నమైన కథ. ZFS రెప్లికేషన్ rsync కంటే 289 రెట్లు వేగంగా ఉంటుంది - లేదా మీరు --inplaceతో rsyncకి కాల్ చేయడానికి తగినంత అవగాహన ఉంటే "మాత్రమే" 161 రెట్లు వేగంగా ఉంటుంది.

ZFS బేసిక్స్: నిల్వ మరియు పనితీరు
VM ఇమేజ్ స్కేల్ చేయబడినప్పుడు, rsync దానితో స్కేల్ చేస్తుంది. ఆధునిక VM ఇమేజ్‌కి 1,9 TiB అంత పెద్దది కాదు - కానీ rsync --inplace వాదనతో కూడా ZFS రెప్లికేషన్ rsync కంటే 1148 రెట్లు వేగంగా ఉంటుంది.

స్నాప్‌షాట్‌లు ఎలా పని చేస్తాయో మీరు అర్థం చేసుకున్న తర్వాత, ప్రతిరూపణ యొక్క సారాంశాన్ని సులభంగా గ్రహించవచ్చు. స్నాప్‌షాట్ అనేది రికార్డ్‌లకు పాయింటర్ల ట్రీ మాత్రమే కాబట్టి, మనం అలా చేస్తే అది అనుసరిస్తుంది zfs send స్నాప్‌షాట్, ఆపై మేము ఈ చెట్టు మరియు దానితో అనుబంధించబడిన అన్ని రికార్డులను పంపుతాము. మేము దీన్ని పంపినప్పుడు 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 4 KiB సెక్టార్‌లు అవసరం, మరియు డిస్క్‌లోని ఈ స్థలంలో ఒక సెక్టార్ మాత్రమే రిజర్వ్ చేయబడింది.

ZFSకి ఈ సమస్య లేదు, ఎందుకంటే సవరించిన రికార్డ్‌లు ఎల్లప్పుడూ ఉపయోగించని ప్రదేశానికి వ్రాయబడతాయి - అసలు బ్లాక్ ఒక 4 KiB సెక్టార్‌ను మాత్రమే ఆక్రమిస్తుంది మరియు కొత్త రికార్డ్ 256ని ఆక్రమిస్తుంది, కానీ ఇది సమస్య కాదు - " నుండి ఇటీవల సవరించిన భాగం ఫైల్ యొక్క మిడిల్" దాని పరిమాణం మారినదా లేదా అనే దానితో సంబంధం లేకుండా ఉపయోగించని స్థలానికి వ్రాయబడుతుంది, కాబట్టి ZFS కోసం ఇది చాలా సాధారణ పరిస్థితి.

స్థానిక ZFS కంప్రెషన్ డిఫాల్ట్‌గా నిలిపివేయబడింది మరియు సిస్టమ్ ప్లగ్ చేయదగిన అల్గారిథమ్‌లను అందిస్తుంది-ప్రస్తుతం LZ4, gzip (1-9), LZJB మరియు ZLE.

  • LZ4 స్ట్రీమింగ్ అల్గోరిథం చాలా వేగవంతమైన కంప్రెషన్ మరియు డికంప్రెషన్ మరియు చాలా వినియోగ సందర్భాలలో పనితీరు ప్రయోజనాలను అందిస్తుంది - చాలా నెమ్మదిగా ఉన్న CPUలలో కూడా.
  • GZIP Unix వినియోగదారులందరికీ తెలిసిన మరియు ఇష్టపడే గౌరవనీయమైన అల్గోరిథం. ఇది కంప్రెషన్ స్థాయిలు 1-9తో అమలు చేయబడుతుంది, కంప్రెషన్ రేషియో మరియు CPU వినియోగం స్థాయి 9కి చేరుకునే కొద్దీ పెరుగుతుంది. అల్గోరిథం అన్ని టెక్స్ట్ (లేదా ఇతర అత్యంత కంప్రెసిబుల్) వినియోగ సందర్భాలకు బాగా సరిపోతుంది, అయితే తరచుగా CPU సమస్యలకు కారణమవుతుంది - దీన్ని ఉపయోగించండి జాగ్రత్తగా, ముఖ్యంగా ఉన్నత స్థాయిలలో.
  • LZJB ZFSలో అసలైన అల్గోరిథం. ఇది నిలిపివేయబడింది మరియు ఇకపై ఉపయోగించబడదు, LZ4 దానిని అన్ని విధాలుగా అధిగమిస్తుంది.
  • చెడుగా - సున్నా స్థాయి ఎన్‌కోడింగ్, జీరో లెవల్ ఎన్‌కోడింగ్. ఇది సాధారణ డేటాను అస్సలు తాకదు, కానీ సున్నాల పెద్ద సీక్వెన్స్‌లను కంప్రెస్ చేస్తుంది. పూర్తిగా కుదించలేని డేటాసెట్‌లకు (JPEG, MP4 లేదా ఇప్పటికే కంప్రెస్ చేయబడిన ఇతర ఫార్మాట్‌లు వంటివి) ఉపయోగపడుతుంది, ఎందుకంటే ఇది అసంపూర్తి డేటాను విస్మరిస్తుంది, కానీ ఫలితంగా రికార్డ్‌లలో ఉపయోగించని స్థలాన్ని కుదిస్తుంది.

మేము దాదాపు అన్ని వినియోగ సందర్భాలలో LZ4 కంప్రెషన్‌ని సిఫార్సు చేస్తున్నాము; కుదించలేని డేటాను ఎదుర్కొన్నప్పుడు పనితీరు పెనాల్టీ చాలా చిన్నది, మరియు వృద్ధి సాధారణ డేటా పనితీరు ముఖ్యమైనది. Windows ఆపరేటింగ్ సిస్టమ్ యొక్క కొత్త ఇన్‌స్టాలేషన్ కోసం వర్చువల్ మెషీన్ ఇమేజ్‌ని కాపీ చేయడం (తాజాగా ఇన్‌స్టాల్ చేయబడిన OS, లోపల ఇంకా డేటా లేదు) compression=lz4 తో కంటే 27% వేగంగా ఉత్తీర్ణత సాధించారు compression=noneలో 2015లో ఈ పరీక్ష.

ARC - అనుకూల భర్తీ కాష్

ZFS అనేది మనకు తెలిసిన ఏకైక ఆధునిక ఫైల్ సిస్టమ్, ఇది RAMలో ఇటీవల రీడ్ బ్లాక్‌ల కాపీలను నిల్వ చేయడానికి ఆపరేటింగ్ సిస్టమ్ యొక్క పేజీ కాష్‌పై ఆధారపడకుండా దాని స్వంత రీడ్ కాషింగ్ మెకానిజంను ఉపయోగిస్తుంది.

స్థానిక కాష్ దాని సమస్యలు లేకుండా లేనప్పటికీ - ZFS కొత్త మెమరీ కేటాయింపు అభ్యర్థనలకు కెర్నల్ వలె త్వరగా స్పందించదు, కాబట్టి కొత్త సవాలు malloc() ప్రస్తుతం ARC ఆక్రమించిన RAM అవసరమైతే మెమరీ కేటాయింపు విఫలం కావచ్చు. కానీ మీ స్వంత కాష్‌ని ఉపయోగించడానికి మంచి కారణాలు ఉన్నాయి, కనీసం ఇప్పటికైనా.

MacOS, Windows, Linux మరియు BSDతో సహా అన్ని తెలిసిన ఆధునిక ఆపరేటింగ్ సిస్టమ్‌లు, పేజీ కాష్‌ను అమలు చేయడానికి LRU (తక్కువ ఇటీవల ఉపయోగించిన) అల్గారిథమ్‌ను ఉపయోగిస్తాయి. ఇది ఒక ఆదిమ అల్గారిథం, ఇది ప్రతి రీడ్ తర్వాత కాష్ చేయబడిన బ్లాక్‌ను "క్యూ పైకి" నెట్టివేస్తుంది మరియు కొత్త కాష్ మిస్‌లను జోడించడానికి అవసరమైన విధంగా బ్లాక్‌లను "క్యూలో డౌన్" నెట్టివేస్తుంది (డిస్క్ నుండి చదవాల్సిన బ్లాక్‌లు, కాష్ నుండి కాకుండా) పైకి.

అల్గోరిథం సాధారణంగా బాగా పని చేస్తుంది, కానీ పెద్ద పని చేసే డేటాసెట్‌లు ఉన్న సిస్టమ్‌లలో, LRU సులభంగా త్రాషింగ్‌కు దారి తీస్తుంది - కాష్ నుండి మళ్లీ చదవబడని బ్లాక్‌లకు చోటు కల్పించడానికి తరచుగా అవసరమైన బ్లాక్‌లను తొలగించడం.

ARC అనేది చాలా తక్కువ అమాయక అల్గారిథమ్, దీనిని "వెయిటెడ్" కాష్‌గా భావించవచ్చు. కాష్ చేయబడిన బ్లాక్ చదివిన ప్రతిసారీ, అది కొంచెం "భారీగా" మరియు తొలగించడం కష్టతరం అవుతుంది - మరియు బ్లాక్‌ను తొలగించిన తర్వాత కూడా ట్రాక్ చేయబడింది ఒక నిర్దిష్ట వ్యవధిలో. తొలగించబడిన బ్లాక్‌ను కాష్‌లోకి తిరిగి చదవాల్సిన అవసరం కూడా "భారీ" అవుతుంది.

వీటన్నింటికీ అంతిమ ఫలితం చాలా ఎక్కువ హిట్ నిష్పత్తితో కూడిన కాష్, కాష్ హిట్‌ల మధ్య నిష్పత్తి (కాష్ నుండి ప్రదర్శించబడిన రీడ్‌లు) మరియు కాష్ మిస్‌లు (డిస్క్ నుండి చదవబడుతుంది). ఇది చాలా ముఖ్యమైన గణాంకం - కాష్ హిట్‌లు మాగ్నిట్యూడ్ ఆర్డర్‌లను వేగంగా అందించడమే కాకుండా, కాష్ మిస్‌లు కూడా వేగంగా అందించబడతాయి, ఎందుకంటే ఎక్కువ కాష్ హిట్‌లు, తక్కువ ఏకకాల డిస్క్ అభ్యర్థనలు మరియు మిగిలిన మిస్‌ల కోసం జాప్యం తక్కువగా ఉంటుంది. డిస్క్‌తో అందించబడుతుంది.

తీర్మానం

ZFS యొక్క ప్రాథమిక సెమాంటిక్స్ - కాపీ-ఆన్-రైట్ ఎలా పని చేస్తుంది, అలాగే స్టోరేజ్ పూల్‌లు, వర్చువల్ పరికరాలు, బ్లాక్‌లు, సెక్టార్‌లు మరియు ఫైల్‌ల మధ్య సంబంధాలు - వాస్తవ సంఖ్యలతో వాస్తవ-ప్రపంచ పనితీరు గురించి చర్చించడానికి మేము సిద్ధంగా ఉన్నాము.

తర్వాతి భాగంలో, మేము అన్వేషించిన సాంప్రదాయ Linux కెర్నల్ RAID టోపోలాజీలకు వ్యతిరేకంగా ప్రతిబింబించే vdevలు మరియు RAIDzతో పూల్స్ యొక్క వాస్తవ పనితీరును పరిశీలిస్తాము. ముందు.

మొదట, మేము ప్రాథమిక అంశాలను మాత్రమే కవర్ చేయాలనుకుంటున్నాము - ZFS టోపోలాజీలు - కానీ తర్వాత ఇటువంటి ఒక L2ARC, SLOG మరియు ప్రత్యేక కేటాయింపు వంటి సహాయక vdev రకాలను ఉపయోగించడంతో సహా ZFS యొక్క మరింత అధునాతన సెటప్ మరియు ట్యూనింగ్ గురించి మాట్లాడటానికి సిద్ధంగా ఉండండి.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి