Razvijalci iz Cloudflare
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.
Za oceno delovanja dm-crypt z uporabo paketa
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
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
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).
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.
Vir: opennet.ru