u Cloudflare programeri su najavili informacije o radu koji rade na optimizaciji performansi enkripcije diska u Linux kernelu, za koje navode da su pripremili zakrpe za podsisteme dm-crypt i Crypto API.
S tim, Sintetičkom testu je dozvoljeno da udvostruči propusni opseg za čitanje i pisanje, kao i prepoloviti kašnjenje. Prilikom testiranja na stvarnim računarima, troškovi šifriranja su smanjeni na gotovo nivo koji se vidi kada se radi s diskom bez korištenja šifriranja podataka.
Interes za poboljšanje enkripcije podaci na disku To je zato što Cloudflare koristi dm-crypt za šifriranje podataka na pogonima 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.
Za procjenu učinka iz dm-crypt koristeći fleksibilni I/O test paket, se mjerio brzinu rada sa šifriranim particijama i nešifrirano na RAM disku koji se nalazi u RAM-u kako bi se eliminisale fluktuacije u performansama diska.
Za nešifrovane particije performanse čitanja i pisanja su ostale na 1126 MB/s, ali kada je šifriranje aktivirano, brzina se smanjila za 7 puta i iznosila je 147 MB/s.
Na početku sumnjalo se na upotrebu neefikasnih algoritama u kriptosistemu kernela. Ali testovi su koristili najbrži algoritam aes-xts sa 256 ključeva za šifriranje, čije su performanse pri pokretanju "cryptsetup benchmark" više od dva puta veće od rezultata dobivenog prilikom testiranja RAM diska.
Eksperimenti sa dm-crypt zastavicama podešavanje performansi nije uspelo: Kada koristite oznaku –perf-same_cpu_crypt, performanse su se čak smanjile na 136 MB/s, a kada se koristila –perf-submit_from_crypt_cpus zastavica samo su porasle na 166 MB/s.
Dublja analiza logike rada pokazao da dm-crypt nije tako jednostavan kako izgleda.
Kada se od FS drajvera primi zahtev za pisanje, dm-crypt ga ne obrađuje odmah, već ga stavlja u "kcryptd" red, što se ne razume odmah, ali kada se pojavi. Dobro vreme. Iz reda čekanja, zahtjev se šalje Linux Crypto API-ju da izvrši šifriranje.
Kada prvo čita, dm-crypt dodaje “kcryptd_io” u red čekanja zahtjev za prijem podataka od jedinice. Posle vremenom su podaci dostupni i Oni se stavljaju u "kcryptd" red za dešifrovanje.
Kcryptd šalje zahtjev Linux API-ju za šifriranje, koji asinhrono dešifrira informacije. Zahtjevi ne prolaze uvijek kroz sve redove, ali u najgorem slučaju, Zahtjev za pisanje je u redu čekanja do 4 puta i zahtjev za čitanje do 3 puta. Svaki pogodak u redu dovodi do kašnjenja, koji su ključni razlog za značajno smanjenje performansi dm-crypt.
Uzimajući u obzir da su moderni diskovi postali brži i pametniji, sistem raspodjele resursa u Linux kernelu je revidiran i neki podsistemi su redizajnirani, Cloudflare inženjeri su dodali novi način rada u dm-crypt, eliminirajući korištenje dodatnih redova čekanja i asinkronih poziva.
Režim je omogućen posebnom "force_inline" zastavicom i dovodi dm-crypt u oblik jednostavnog proxyja koji šifrira i dešifruje dolazne zahtjeve. Interakcija s Crypto API-jem optimizirana je kroz eksplicitni izbor algoritama za šifriranje koji rade u sinkronom modu i ne koriste redove zahtjeva.
Prilikom testiranja opterećenja na stvarnim serverima, nova implementacija je pokazala performanse vrlo bliske konfiguraciji koja radi bez enkripcije, a uključivanje enkripcije na serverima s Cloudflare keš memorijom nije utjecalo na brzinu odgovora.
U budućnosti, Cloudflare planira prenijeti pripremljene zakrpe na glavni Linux kernel, ali prije toga će se morati modificirati, jer su optimizirani za određeno opterećenje i ne pokrivaju sva područja primjene.
Izvor: https://blog.cloudflare.com