Kuwa na wikendi njema kila mtu! Tunakualika kwenye somo la onyesho lisilolipishwa , wakiongozwa na Andrey Buranov, mtaalamu wa mifumo ya UNIX katika Mail.Ru Group. Pia tunachapisha makala ya Jonathan Corbet, Mhariri Mtendaji katika LWN.net.
Mifumo ya faili ya uandishi huahidi wasimamizi wa mfumo wa bure kutokana na shida ya uharibifu wa diski wakati wa uharibifu wa mfumo, hata bila kuendesha ukaguzi wa uadilifu wa mfumo wa faili. Walakini, kwa ukweli, mambo ni ngumu zaidi. Na kama mjadala wa hivi majuzi unavyoonyesha, inaweza kuwa ngumu zaidi kuliko wengi wetu tunavyotambua, kwani kuhakikisha uadilifu wa mifumo ya faili ya uandishi huathiri utendakazi.
Mfumo wa faili kama ext3 hutumia eneo tofauti kwenye diski inayoitwa jarida. Mabadiliko yanapofanywa kwa metadata ya mfumo wa faili, mabadiliko haya kwanza huandikwa kwa jarida bila kurekebisha mfumo wote wa faili. Baada ya mabadiliko yote kuandikwa kwa jarida, "kizuizi cha ahadi" kinaongezwa kwake, kuonyesha kukamilika kwa shughuli hiyo. Ni baada tu ya kizuizi cha ahadi kuandikwa ndipo muamala unafanywa na metadata iliyorekebishwa kuandikwa kwa diski. Ikiwa mfumo utawahi kuacha kufanya kazi, maelezo katika jarida huruhusu kuzima kwa usalama na huepuka uharibifu wa mfumo wa faili kutokana na kusasishwa kwa sehemu tu ya metadata.
Walakini, kuna mtego: kabla ya kuandika kizuizi cha ahadi, nambari ya mfumo wa faili lazima iwe na uhakika kabisa kuwa habari zote za muamala tayari zimeandikwa kwenye logi. Kuandika shughuli kwa mpangilio sahihi haitoshi—diski za kisasa hudumisha akiba kubwa za ndani na kupanga upya shughuli ili kuboresha utendaji. Kwa hivyo, kabla ya kuzuia ahadi, ni muhimu kuweka data yote ya kumbukumbu kwenye diski. Ikiwa kizuizi cha ahadi kimeandikwa mapema, logi inaweza kupotoshwa. Ili kutatua tatizo hili, vikwazo hutumiwa. Kimsingi, kizuizi huzuia kuandika vizuizi vyovyote baada ya kizuizi hadi vizuizi vyote vilivyoandikwa kabla ya kizuizi kuandikwa kwa diski. Kwa kutumia vizuizi, mifumo ya faili inahakikisha uthabiti wa miundo ya faili.
Lakini kuna shida nyingine: mifumo ya faili ya ext3 na ext4 haitumii vizuizi kwa chaguo-msingi. Chaguo lipo, lakini isipokuwa kama msimamizi atawawezesha kwa uwazi, mifumo hii ya faili hufanya kazi bila vizuizi, ingawa ugawaji fulani (kama vile SUSE) una chaguo-msingi tofauti. Eric Sandeen hivi karibuni aliamua kwamba hali hii inahitaji kubadilishwa na , kurekebisha mipangilio chaguo-msingi ya ext3 na ext4. Na kisha mjadala mkali ulianza.
Andrew Morton kwa undani sana , kwa nini dhamana ya msingi ni kama hii:
Mara ya mwisho tulipojaribu kubadilisha hii, utendaji kwenye mizigo mingi ya kazi ulishuka kwa 30%, kwa hivyo nilitupa viraka hivyo vyote kwa mshtuko. Sidhani kama tunaweza kufanya hivi na kupunguza kasi ya mashine zote kiasi hicho…
Hakuna suluhisho kamili hapa, na nina mwelekeo wa kumruhusu mbwa huyu anayelala kulala na kuacha mipangilio chaguo-msingi kwa hiari ya watengenezaji wa usambazaji.
Kwa hivyo, vizuizi vimezimwa kwa chaguo-msingi, kwani vinaathiri sana utendaji. Zaidi ya hayo, mifumo ya faili inaweza kutumika kwa mafanikio kabisa bila vikwazo. Ripoti za ufisadi wa mfumo wa faili wa ext3 ni chache sana.
Lakini sio bahati tu. Ted Ts'o Sababu ni kwamba jarida la ext3/ext4 kawaida linaambatana. Kwanza, kiendeshi cha mfumo wa faili hujaribu kuifanya iwe ya kuunganishwa. Pili, jarida kawaida huundwa kwa wakati mmoja na mfumo wa faili, wakati nafasi ya kuunganishwa inapatikana kwa urahisi. Mshikamano na mpangilio ni wa manufaa si tu kwa utendaji lakini pia kwa kuzuia kupanga upya. Kwa kawaida, kizuizi cha ahadi kitawekwa mara tu baada ya data iliyobaki ya jarida, kwa hivyo diski haina sababu ya kuipanga tena. Kizuizi cha ahadi kimeandikwa kwa diski mara tu baada ya maingizo mengine ya jarida.
Walakini, hakuna mtu anayedai kuwa hii itakuwa hivyo kila wakati. Anatoa za diski zinaweza kufanya kazi tofauti. Zaidi ya hayo, logi ni buffer ya mviringo. Kwa hivyo, wakati shughuli imeandikwa hadi mwisho wa logi, kizuizi cha ahadi kinaweza kuishia kwenye kizuizi cha mapema, kabla ya maingizo mengine ya kumbukumbu. Kwa hiyo daima kuna nafasi ya rushwa. Kwa kweli, Chris Mason ana suluhisho kwa hili. Hakuna shaka kwamba kufanya kazi bila vikwazo ni salama kidogo kuliko kufanya kazi nao.
Ikiwa uko tayari kukubali utendakazi, unaweza kuwasha vizuizi. Hiyo ni, kwa kweli, ikiwa mfumo wako wa faili sio msingi wa LVM (kama ilivyo chaguo msingi kwenye usambazaji fulani). Inabadilika kuwa ramani ya kifaa haiauni vizuizi. Katika hali nyingine, itakuwa nzuri kupunguza hit ya utendaji, na inaonekana kama hii inaweza kufanywa.
Utekelezaji wa sasa wa ext3 (vizuizi vinapowezeshwa) hufanya mlolongo ufuatao wa shughuli kwa kila shughuli:
Data imeandikwa kwenye logi
Kizuizi kinatekelezwa
Kizuizi cha ahadi kimeandikwa
Kizuizi kinachofuata kinatimizwa
Baadaye, metadata inafutwa kwenye diski.
Katika ext4, kizuizi cha kwanza (hatua ya 2) kinaweza kuachwa kwa sababu mfumo wa faili wa ext4 hudumisha hesabu za hundi kwenye jarida.
Ikiwa data ya kumbukumbu na kizuizi cha ahadi zimepangwa upya na operesheni ikasitishwa kwa sababu ya kutofaulu, ukaguzi wa kumbukumbu hautalingana na ile iliyohifadhiwa kwenye kizuizi cha ahadi, na shughuli hiyo itakataliwa.
Chris Mason , kwamba itakuwa "salama kwa ujumla" kuondoa kizuizi hiki katika ext3 pia, isipokuwa iwezekanavyo kwamba jarida linafikia mwisho na kuanza kuandika tangu mwanzo.
Wazo lingine la kuharakisha shughuli ni kuahirisha shughuli za kizuizi kila inapowezekana. Ikiwa hakuna haja ya haraka ya kufuta data kwenye diski mara moja, unaweza kuunda shughuli kadhaa kwenye logi na kuziweka kwenye diski kwa kutumia kizuizi kimoja.
Pia kuna uwezekano wa kuboreshwa kwa kuagiza shughuli kwa uangalifu ili vizuizi (ambavyo kawaida hutekelezwa kama "sogeza ombi zote zinazosubiri kwenye diski") visilazimishe uandishi wa vizuizi ambavyo havihitaji kuagiza.
Inaonekana ni wakati wa kufikiria jinsi ya kufanya gharama ya vizuizi kukubalika. Ted Tso inaonekana :
Nadhani tunapaswa kuwezesha vizuizi katika ext3/4, na kisha tufanye kazi katika kupunguza juu katika ext4/jbd2. Uwezekano mkubwa zaidi, idadi kubwa ya mifumo haifanyi kazi chini ya hali kama zile Chris alitumia kuonyesha tatizo, na usalama wa mfumo wa faili kwa chaguo-msingi unapaswa kuwa kipaumbele.
Akili ya kawaida inaniambia mbwa huyu tayari yuko macho na labda atabweka kwa muda. Inaweza kuwasumbua majirani wengine, lakini ni bora kuliko kuiruhusu kuuma.
Je, una nia ya kuendeleza katika mwelekeo huu? Jisajili kwa somo la onyesho lisilolipishwa na kushiriki katika matangazo , ambayo itaongozwa na Pavel Vikiryuk, mwendeshaji wa mawasiliano ya simu wa MVNO na mhandisi wa DevOps.
Chanzo: mapenzi.com
