Cloudflare je pripravil popravke, ki dramatično pospešijo šifriranje diska v Linuxu

Razvijalci iz Cloudflare povedal o izvajanju dela za optimizacijo delovanja šifriranja diska v jedru Linuxa. Posledično so bili pripravljeni obliži za podsistem dm-kripta in Crypto API, ki je omogočil več kot podvojitev prepustnosti branja in pisanja v sintetičnem testu ter prepolovitev zakasnitve. Pri testiranju na resnični strojni opremi so se stroški šifriranja zmanjšali skoraj na raven, opaženo pri delu z diskom brez šifriranja podatkov.

Cloudflare uporablja dm-crypt za šifriranje podatkov na napravah za shranjevanje, ki se uporabljajo za predpomnjenje vsebine v CDN. Dm-crypt deluje na ravni blokovne naprave in šifrira pisalne V/I zahteve ter dešifrira bralne zahteve, pri čemer deluje kot plast med blokovno napravo in gonilnikom datotečnega sistema.

Cloudflare je pripravil popravke, ki dramatično pospešijo šifriranje diska v Linuxu

Za oceno delovanja dm-crypt z uporabo paketa Prilagodljiv I/O tester Izmerili smo hitrost dela s šifriranimi in nešifriranimi particijami na disku RAM, ki se nahaja v RAM-u, da bi odpravili nihanja v zmogljivosti diska in se osredotočili na zmogljivost kode. Pri nešifriranih particijah je zmogljivost branja in pisanja ostala pri 1126 MB/s, vendar se je hitrost zmanjšala, ko je bilo šifriranje omogočeno 7-krat in je znašala 147 MB/s.

Sprva se je pojavil sum o uporabi neučinkovitih algoritmov v kriptosistemu jedra. Toda pri testiranju je bil uporabljen najhitrejši algoritem aes-xts z 256 šifrirnimi ključi, katerega zmogljivost pri izvajanju »merilnika cryptsetup« je več kot dvakrat višja od rezultata, dobljenega pri testiranju diska RAM. Eksperimenti z zastavicami dm-crypt za uravnavanje zmogljivosti niso dali rezultatov: pri uporabi zastavice “--perf-same_cpu_crypt” se je zmogljivost celo zmanjšala na 136 MB/s, pri določitvi zastavice “--perf-submit_from_crypt_cpus” pa se je le povečala. do 166 MB/s.

Poglobljena analiza logike delovanja je pokazala, da dm-crypt ni tako preprost, kot se zdi – ko iz gonilnika FS pride zahteva za pisanje, je dm-crypt ne obdela takoj, ampak jo postavi v čakalno vrsto “kcryptd”, kar se ne razčleni takoj, ampak v primernem trenutku. Iz čakalne vrste se zahteva pošlje Linux Crypto API za izvedbo šifriranja. Ker pa Crypto API uporablja asinhroni izvedbeni model, se tudi šifriranje ne izvede takoj, ampak mimo druge čakalne vrste. Ko je šifriranje končano, lahko dm-crypt poskuša razvrstiti čakajoče zahteve za pisanje z iskalnim drevesom rdeče-črna. Na koncu ločena nit jedra spet z določeno zakasnitvijo pobere nakopičene I/O zahteve in jih pošlje v sklad blokovnih naprav.

Cloudflare je pripravil popravke, ki dramatično pospešijo šifriranje diska v Linuxu

Pri branju dm-crypt najprej doda zahtevo v čakalno vrsto »kcryptd_io« za sprejem podatkov iz pogona. Čez nekaj časa postanejo podatki na voljo in se postavijo v čakalno vrsto »kcryptd« za dešifriranje.
Kcryptd pošlje zahtevo API-ju Linux Crypto, ki asinhrono dešifrira podatke. Zahteve ne gredo vedno skozi vse čakalne vrste, ampak v najslabšem primeru se zahteva za pisanje znajde v čakalnih vrstah do 4x, zahteva za branje pa do 3x. Vsak zadetek v čakalno vrsto povzroči zamude, ki so ključni razlog za znatno zmanjšanje zmogljivosti dm-crypt.

Uporaba čakalnih vrst je posledica potrebe po delu v razmerah, kjer prihaja do prekinitev. Leta 2005, ko je bil implementiran trenutni operacijski model dm-crypt, ki temelji na čakalni vrsti, Crypto API še ni bil asinhron. Ko je bil Crypto API prenesen na model asinhronega izvajanja, se je začela uporabljati v bistvu dvojna zaščita. Čakalne vrste so bile uvedene tudi za varčevanje s porabo sklada jedra, vendar so po njegovem povečanju leta 2014 te optimizacije izgubile pomen. Dodatna čakalna vrsta "kcryptd_io" je bila uvedena za premagovanje ozkega grla, ki povzroča čakanje na dodelitev pomnilnika, ko prispe veliko število zahtev. V letu 2015 je bila uvedena dodatna faza razvrščanja, saj so se šifrirne zahteve na večprocesorskih sistemih lahko izpolnjevale nepravilno (namesto zaporednega dostopa do diska se je dostop izvajal po naključnem vrstnem redu, razporejevalnik CFQ pa ni deloval učinkovito). Trenutno je pri uporabi pogonov SSD razvrščanje izgubilo svoj pomen, razporejevalnik CFQ pa se v jedru ne uporablja več.

Glede na to, da so sodobni diski postali hitrejši in pametnejši, je bil sistem distribucije virov v jedru Linuxa revidiran in nekateri podsistemi so bili preoblikovani, so inženirji Cloudflare dodano dm-crypt ima nov način delovanja, ki odpravlja uporabo nepotrebnih čakalnih vrst in asinhronih klicev. Način je omogočen z ločeno zastavico »force_inline« in dm-crypt spremeni v obliko preprostega proxyja, ki šifrira in dešifrira dohodne zahteve. Interakcija s Crypto API je bila optimizirana z izrecno izbiro algoritmov šifriranja, ki delujejo v sinhronem načinu in ne uporabljajo čakalnih vrst zahtev. Za sinhrono delo s Crypto API je bilo predlagano modul, ki omogoča uporabo FPU/AES-NI za pospeševanje in neposredno posreduje zahteve za šifriranje in dešifriranje.

Posledično je bilo pri testiranju RAM diska mogoče več kot podvojiti zmogljivost dm-crypt - zmogljivost se je povečala z 294 MB/s (2 x 147 MB/s) na 640 MB/s, kar je zelo blizu zmogljivost golega šifriranja (696 MB/s).

Cloudflare je pripravil popravke, ki dramatično pospešijo šifriranje diska v Linuxu

Cloudflare je pripravil popravke, ki dramatično pospešijo šifriranje diska v Linuxu

Cloudflare je pripravil popravke, ki dramatično pospešijo šifriranje diska v Linuxu

Pri testiranju obremenitve na resničnih strežnikih je nova implementacija pokazala zmogljivost, ki je zelo blizu konfiguraciji, ki deluje brez šifriranja, in omogočanje šifriranja na strežnikih s predpomnilnikom Cloudflare ni vplivalo na hitrost odziva. Cloudflare namerava v prihodnje pripravljene popravke prenesti v glavno jedro Linuxa, vendar jih bo pred tem treba predelati, saj so optimizirani za določeno obremenitev in ne pokrivajo vseh področij uporabe, na primer šifriranja na nizki ravni. -napajalne vgrajene naprave.

Cloudflare je pripravil popravke, ki dramatično pospešijo šifriranje diska v Linuxu

Vir: opennet.ru

Dodaj komentar