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

Programeri iz Cloudflarea rekao o izvođenju radova na optimizaciji performansi šifriranja diska u jezgri Linuxa. Kao rezultat toga, bili su pripremljeni zakrpe za podsustav 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. Prilikom testiranja na stvarnom hardveru, troškovi šifriranja smanjeni su gotovo na razinu uočenu pri radu s diskom bez enkripcije podataka.

Cloudflare koristi dm-crypt za šifriranje podataka na uređajima za pohranu koji se koriste za predmemoriju sadržaja na CDN-u. Dm-crypt radi na razini blok uređaja i šifrira I/O zahtjeve za pisanje i dekriptira zahtjeve za čitanje, djelujući kao sloj između blok uređaja i upravljačkog programa datotečnog sustava.

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

Za procjenu performansi dm-crypta pomoću paketa Fleksibilni I/O tester Mjerili smo brzinu rada s šifriranim i nekriptiranim particijama na RAM disku smještenom u RAM-u kako bismo eliminirali fluktuacije u performansama diska i usredotočili se na performanse koda. Za nekriptirane particije performanse čitanja i pisanja ostale su na 1126 MB/s, ali se brzina smanjila kada je enkripcija bila omogućena 7 u vremenu i iznosila je 147 MB/s.

Isprva se pojavila sumnja u korištenje neučinkovitih algoritama u kriptosustavu kernela. Ali testovi su koristili najbrži algoritam, aes-xts, s 256 ključeva za šifriranje, čija je izvedba pri pokretanju “cryptsetup benchmarka” više nego dvostruko veća od rezultata dobivenog pri testiranju RAM diska. Eksperimenti s dm-crypt zastavicama za podešavanje performansi nisu dali rezultate: pri korištenju zastavice “--perf-same_cpu_crypt” izvedba se čak smanjila na 136 MB/s, a kod određivanja zastavice “--perf-submit_from_crypt_cpus” samo se povećala do 166 MB/s.

Dublja analiza logike rada pokazala je da dm-crypt nije tako jednostavan kao što se čini - kada zahtjev za pisanje stigne od FS drajvera, dm-crypt ga ne obrađuje odmah, već ga stavlja u red čekanja “kcryptd”, što ne raščlanjuje se odmah, već u pogodnom trenutku. Iz reda čekanja zahtjev se šalje Linux Crypto API-ju za izvođenje enkripcije. Ali budući da Crypto API koristi model asinkronog izvršavanja, enkripcija se također ne izvodi odmah, već zaobilazeći drugi red čekanja. Nakon dovršetka enkripcije, dm-crypt može pokušati razvrstati zahtjeve za pisanje na čekanju pomoću stabla pretraživanja crveno-crno. Na kraju, zasebna nit jezgre ponovno, s određenom odgodom, preuzima akumulirane I/O zahtjeve i šalje ih na stog blok uređaja.

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

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

Korištenje čekanja je zbog potrebe rada u uvjetima u kojima dolazi do prekida. U 2005. godini, kada je implementiran trenutni operativni model dm-crypt-a temeljen na čekanju, Crypto API još nije bio asinkroni. Nakon što je Crypto API prebačen na model asinkronog izvršavanja, počela se koristiti zapravo dvostruka zaštita. Redovi čekanja također su uvedeni kako bi se uštedjela potrošnja kernel stack-a, ali nakon povećanja u 2014., te su optimizacije izgubile na važnosti. Uveden je dodatni red čekanja "kcryptd_io" kako bi se prevladalo usko grlo koje rezultira čekanjem na dodjelu memorije kada stigne veliki broj zahtjeva. U 2015. uvedena je dodatna faza sortiranja, budući da se zahtjevi za enkripciju na višeprocesorskim sustavima mogu završiti nepravilno (umjesto sekvencijalnog pristupa disku, pristup se vršio nasumičnim redoslijedom, a CFQ planer nije radio učinkovito). Trenutno, kada koristite SSD diskove, sortiranje je izgubilo svoje značenje, a CFQ planer se više ne koristi u kernelu.

S obzirom da su moderni diskovi postali brži i pametniji, sustav distribucije resursa u Linux kernelu je revidiran, a neki podsustavi redizajnirani, inženjeri Cloudflarea dodano dm-crypt ima novi način rada koji eliminira korištenje nepotrebnih čekanja i asinkronih poziva. Način je omogućen zasebnom zastavom "force_inline" i dovodi dm-crypt u oblik jednostavnog proxyja koji šifrira i dekriptira dolazne zahtjeve. Interakcija s Crypto API-jem optimizirana je eksplicitnim odabirom algoritama šifriranja koji rade u sinkronom načinu rada i ne koriste redove zahtjeva. Postojao je sinkroni rad s Crypto API-jem zaprosio modul koji vam omogućuje korištenje FPU/AES-NI za ubrzanje i izravno prosljeđuje zahtjeve za šifriranje i dešifriranje.

Kao rezultat toga, pri testiranju RAM diska bilo je moguće više nego udvostručiti performanse dm-crypta - performanse su porasle s 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 enkripciju diska u Linuxu

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

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

Prilikom testiranja opterećenja na stvarnim poslužiteljima, nova implementacija pokazala je performanse vrlo bliske konfiguraciji koja radi bez enkripcije, a omogućavanje enkripcije na poslužiteljima s Cloudflare predmemorije nije imalo utjecaja na brzinu odgovora. U budućnosti Cloudflare planira prenijeti pripremljene zakrpe na glavnu jezgru Linuxa, ali će ih prije toga trebati preraditi, budući da su optimizirane za određeno opterećenje i ne pokrivaju sva područja primjene, na primjer, enkripciju na niskom nivou -napajanje ugrađenih uređaja.

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

Izvor: opennet.ru

Dodajte komentar