Watengenezaji kutoka Cloudflare
Cloudflare hutumia dm-crypt kusimba data kwa njia fiche kwenye vifaa vya kuhifadhi vinavyotumika kuweka akiba yaliyomo kwenye CDN. Dm-crypt hufanya kazi katika kiwango cha kifaa cha kuzuia na husimba kwa njia fiche kuandika maombi ya I/O na kusimbua maombi yaliyosomwa, ikitenda kama safu kati ya kifaa cha kuzuia na kiendesha mfumo wa faili.
Ili kutathmini utendaji wa dm-crypt kwa kutumia kifurushi
Mwanzoni, mashaka yalitokea juu ya utumiaji wa algorithms isiyofaa katika mfumo wa kernel cryptosystem. Lakini majaribio yalitumia algorithm ya haraka zaidi, aes-xts, na funguo za usimbuaji 256, ambazo utendaji wake wakati wa kuendesha "kigezo cha kuweka cryptsetup" ni zaidi ya mara mbili ya matokeo yaliyopatikana wakati wa kujaribu diski ya RAM. Majaribio ya bendera za dm-crypt kwa urekebishaji wa utendaji hayakuzaa matokeo: wakati wa kutumia bendera ya "--perf-same_cpu_crypt", utendakazi hata ulipungua hadi 136 MB/s, na wakati wa kubainisha alama ya "--perf-submit_from_crypt_cpus" iliongezeka pekee. hadi 166 MB/s.
Mchanganuo wa kina wa mantiki ya kufanya kazi ulionyesha kuwa dm-crypt sio rahisi kama inavyoonekana - wakati ombi la kuandika linafika kutoka kwa dereva wa FS, dm-crypt haifanyi kazi mara moja, lakini huiweka kwenye foleni ya "kcryptd", ambayo haijachanganuliwa mara moja, lakini wakati unaofaa. Kutoka kwenye foleni, ombi hutumwa kwa Linux Crypto API ili kutekeleza usimbaji fiche. Lakini kwa kuwa API ya Crypto hutumia mfano wa utekelezaji wa asynchronous, usimbuaji fiche pia haufanyiki mara moja, lakini kupitisha foleni nyingine. Baada ya usimbaji fiche kukamilika, dm-crypt inaweza kujaribu kupanga maombi yanayosubiri kuandikwa kwa kutumia mti wa utafutaji
Unaposoma, dm-crypt kwanza huongeza ombi kwenye foleni ya "kcryptd_io" ili kupokea data kutoka kwa hifadhi. Baada ya muda, data itapatikana na kuwekwa kwenye foleni ya "kcryptd" kwa usimbuaji.
Kcryptd hutuma ombi kwa Linux Crypto API, ambayo huondoa maelezo kwa njia isiyosawazisha. Maombi sio daima kupitia foleni zote, lakini katika hali mbaya zaidi, ombi la kuandika linaishia kwenye foleni hadi mara 4, na ombi la kusoma hadi mara 3. Kila hit kwenye foleni husababisha ucheleweshaji, ambayo ndiyo sababu kuu ya kupungua kwa utendakazi wa dm-crypt.
Matumizi ya foleni ni kutokana na haja ya kufanya kazi katika hali ambapo usumbufu hutokea. Mnamo 2005, wakati muundo wa sasa wa uendeshaji wa foleni wa dm-crypt ulipotekelezwa, API ya Crypto ilikuwa bado haijasawazishwa. Baada ya API ya Crypto kuhamishiwa kwa mfano wa utekelezaji wa asynchronous, kimsingi ulinzi wa mara mbili ulianza kutumika. Foleni pia zilianzishwa ili kuokoa matumizi ya rafu ya kernel, lakini baada ya kuongezeka kwake mnamo 2014, uboreshaji huu ulipoteza umuhimu wake. Foleni ya ziada "kcryptd_io" ilianzishwa ili kuondokana na tatizo lililosababisha kusubiri mgao wa kumbukumbu wakati idadi kubwa ya maombi inapowasili. Mnamo mwaka wa 2015, awamu ya ziada ya upangaji ilianzishwa, kwani maombi ya usimbuaji kwenye mifumo ya multiprocessor inaweza kukamilika bila mpangilio (badala ya ufikiaji wa mlolongo wa diski, ufikiaji ulifanyika kwa mpangilio wa nasibu, na mpangilio wa CFQ haukufanya kazi kwa ufanisi). Hivi sasa, wakati wa kutumia anatoa za SSD, kupanga kumepoteza maana yake, na mpangilio wa CFQ hautumiwi tena kwenye kernel.
Kwa kuzingatia kwamba viendeshi vya kisasa vimekuwa vya haraka na vyema zaidi, mfumo wa usambazaji wa rasilimali katika kernel ya Linux umerekebishwa na baadhi ya mifumo ndogo imeundwa upya, wahandisi wa Cloudflare.
Matokeo yake, wakati wa kupima diski ya RAM, iliwezekana zaidi ya mara mbili ya utendaji wa dm-crypt - utendaji uliongezeka kutoka 294 MB / s (2 x 147 MB ββ/ s) hadi 640 MB / s, ambayo ni karibu sana na utendaji wa usimbuaji wazi (696 MB / s).
Wakati wa kujaribu mzigo kwenye seva halisi, utekelezaji mpya ulionyesha utendaji karibu sana na usanidi unaoendeshwa bila usimbaji fiche, na kuwezesha usimbaji fiche kwenye seva zilizo na akiba ya Cloudflare hakukuwa na athari kwa kasi ya majibu. Katika siku zijazo, Cloudflare inapanga kuhamisha viraka vilivyotayarishwa kwenye kernel kuu ya Linux, lakini kabla ya hapo watahitaji kufanyiwa kazi tena, kwa kuwa wameboreshwa kwa mzigo maalum na haijumuishi maeneo yote ya maombi, kwa mfano, usimbuaji chini. -vifaa vilivyopachikwa vya nguvu.
Chanzo: opennet.ru