Cloudflare je pripremio zakrpe koje dramatično ubrzavaju šifriranje diska u Linuxu

Programeri iz Cloudflarea rekao o obavljanju poslova na optimizaciji performansi šifriranja diska u Linux kernelu. Kao rezultat toga, bili su pripremljeni zakrpe za podsistem dm-kripta i Crypto API, koji je omogućio više nego udvostručenje propusnosti čitanja i pisanja u sintetičkom testu, kao i prepolovljenje latencije. Kada je testiran na stvarnom hardveru, troškovi enkripcije su smanjeni na gotovo nivo koji je uočen kada se radi s diskom bez šifriranja podataka.

Cloudflare koristi dm-crypt za šifriranje podataka na uređajima za pohranu koji se koriste za keširanje sadržaja na CDN-u. Dm-crypt radi na nivou blok uređaja i šifrira I/O zahtjeve za pisanje i dešifruje zahtjeve za čitanje, djelujući kao sloj između blok uređaja i drajvera sistema datoteka.

Cloudflare je pripremio zakrpe koje dramatično ubrzavaju šifriranje diska u Linuxu

Za procjenu performansi dm-crypt pomoću paketa Fleksibilni I/O tester Izmjerili smo brzinu rada sa šifriranim i nešifriranim particijama na RAM disku koji se nalazi u RAM-u kako bismo eliminirali fluktuacije u performansama diska i fokusirali se na performanse koda. Za nešifrirane particije, performanse čitanja i pisanja ostale su na 1126 MB/s, ali je brzina smanjena kada je šifriranje omogućeno u 7 puta i iznosio je 147 MB/s.

U početku se pojavila sumnja u upotrebu neefikasnih algoritama u kriptosistemu kernela. Ali testovi su koristili najbrži algoritam, aes-xts, sa 256 ključeva za šifrovanje, čije su performanse pri pokretanju “cryptsetup benchmark” više nego dvostruko veće od rezultata dobijenog prilikom testiranja RAM diska. Eksperimenti sa dm-crypt zastavicama za podešavanje performansi nisu dali rezultate: kada se koristi zastavica “--perf-same_cpu_crypt”, performanse su čak smanjene na 136 MB/s, a kada se specificira oznaka “--perf-submit_from_crypt_cpus” samo su se povećale do 166 MB/s.

Dublja analiza operativne logike pokazala je da dm-crypt nije tako jednostavan kao što se čini - kada od FS drajvera stigne zahtjev za pisanje, dm-crypt ga ne obrađuje odmah, već ga smješta u "kcryptd" red, što se ne analizira odmah, već kada je pogodan trenutak. Iz reda čekanja, zahtjev se šalje Linux Crypto API-ju da izvrši šifriranje. Ali pošto Crypto API koristi asinhroni model izvršavanja, šifriranje se također ne izvodi odmah, već zaobilazeći drugi red čekanja. Nakon što je šifriranje završeno, dm-crypt može pokušati sortirati zahtjeve za pisanje na čekanju koristeći stablo pretraživanja crveno-crna. Na kraju, odvojena nit kernela ponovo, sa određenim zakašnjenjem, preuzima akumulirane I/O zahtjeve i šalje ih u stog blok uređaja.

Cloudflare je pripremio zakrpe koje dramatično ubrzavaju šifriranje diska u Linuxu

Prilikom čitanja, dm-crypt prvo dodaje zahtjev u red čekanja “kcryptd_io” za primanje podataka sa diska. Nakon nekog vremena, podaci postaju dostupni i stavljaju se u "kcryptd" red za dešifriranje.
Kcryptd šalje zahtjev Linux Crypto API-ju, koji asinhrono dešifrira informacije. Zahtjevi ne prolaze uvijek kroz sve redove, ali u najgorem slučaju, zahtjev za pisanje završava u redovima do 4 puta, a zahtjev za čitanje do 3 puta. Svaki pogodak u red čekanja uzrokuje kašnjenja, koja su ključni razlog za značajno smanjenje performansi dm-crypt.

Upotreba redova je zbog potrebe rada u uslovima u kojima dolazi do prekida. 2005. godine, kada je implementiran trenutni operativni model baziran na redu čekanja dm-crypta, Crypto API još nije bio asinhroni. Nakon što je Crypto API prebačen na asinhroni model izvršavanja, počela je da se koristi u suštini dvostruka zaštita. Redovi su također uvedeni kako bi se uštedjela potrošnja steka kernela, ali nakon njegovog povećanja 2014. godine, ove optimizacije su izgubile svoju relevantnost. Dodatni red čekanja "kcryptd_io" je uveden kako bi se prevazišlo usko grlo koje je rezultiralo čekanjem na dodjelu memorije kada stigne veliki broj zahtjeva. 2015. godine uvedena je dodatna faza sortiranja, jer su zahtjevi za šifriranje na višeprocesorskim sistemima mogli biti dovršeni van reda (umjesto sekvencijalnog pristupa disku, pristup se vršio slučajnim redoslijedom, a CFQ planer nije radio efikasno). Trenutno, kada se koriste SSD diskovi, sortiranje je izgubilo svoje značenje, a CFQ planer se više ne koristi u kernelu.

Uzimajući u obzir da su moderni diskovi postali brži i pametniji, sistem distribucije resursa u Linux kernelu je revidiran i neki podsistemi su redizajnirani, Cloudflare inženjeri dodano dm-crypt ima novi način rada koji eliminira korištenje nepotrebnih redova čekanja i asinkronih poziva. Režim je omogućen posebnom zastavicom “force_inline” i dovodi dm-crypt u oblik jednostavnog proxyja koji šifrira i dešifruje dolazne zahtjeve. Interakcija s Crypto API-jem optimizirana je eksplicitnim odabirom algoritama za šifriranje koji rade u sinkronom načinu rada i ne koriste redove zahtjeva. Postojao je sinhroni rad sa Crypto API-jem predložio modul koji vam omogućava da koristite FPU/AES-NI za ubrzanje i direktno prosljeđuje zahtjeve za šifriranje i dešifriranje.

Kao rezultat toga, prilikom testiranja RAM diska, bilo je moguće više nego udvostručiti performanse dm-crypt - performanse su porasle sa 294 MB/s (2 x 147 MB/s) na 640 MB/s, što je vrlo blizu performanse gole enkripcije (696 MB/s).

Cloudflare je pripremio zakrpe koje dramatično ubrzavaju šifriranje diska u Linuxu

Cloudflare je pripremio zakrpe koje dramatično ubrzavaju šifriranje diska u Linuxu

Cloudflare je pripremio zakrpe koje dramatično ubrzavaju šifriranje diska u Linuxu

Prilikom testiranja opterećenja na stvarnim serverima, nova implementacija je pokazala performanse vrlo bliske konfiguraciji koja radi bez enkripcije, a omogućavanje enkripcije na serverima sa Cloudflare keš memorijom nije imalo utjecaja na brzinu odgovora. U budućnosti, Cloudflare planira prenijeti pripremljene zakrpe na glavni Linux kernel, ali prije toga će ih trebati preraditi, jer su optimizirani za određeno opterećenje i ne pokrivaju sva područja primjene, na primjer, šifriranje na niskom -power embedded uređaji.

Cloudflare je pripremio zakrpe koje dramatično ubrzavaju šifriranje diska u Linuxu

izvor: opennet.ru

Dodajte komentar