Cloudflare a pregătit corecții care accelerează dramatic criptarea discului în Linux

Dezvoltatori de la Cloudflare a spus despre efectuarea lucrărilor de optimizare a performanței criptării discului în nucleul Linux. Drept urmare, au fost pregătiți petice pentru subsistem dm-crypt și Crypto API, care a făcut posibilă mai mult decât dublarea debitului de citire și scriere în testul sintetic, precum și reducerea latenței la jumătate. Când a fost testată pe hardware real, supraîncărcarea de criptare a fost redusă aproape la nivelul observat atunci când lucrați cu un disc fără criptare a datelor.

Cloudflare folosește dm-crypt pentru a cripta datele de pe dispozitivele de stocare utilizate pentru a stoca în cache conținutul de pe CDN. Dm-crypt operează la nivel de dispozitiv bloc și criptează cererile de I/O de scriere și decriptează cererile de citire, acționând ca un strat între dispozitivul bloc și driverul sistemului de fișiere.

Cloudflare a pregătit corecții care accelerează dramatic criptarea discului în Linux

Pentru a evalua performanța dm-crypt folosind pachetul Tester I/O flexibil Am măsurat viteza de lucru cu partiții criptate și necriptate pe un disc RAM situat în RAM pentru a elimina fluctuațiile în performanța discului și pentru a se concentra pe performanța codului. Pentru partițiile necriptate, performanța de citire și scriere a rămas la 1126 MB/s, dar viteza a scăzut când criptarea a fost activată 7 în timp și s-a ridicat la 147 MB/s.

La început, au apărut suspiciuni cu privire la utilizarea algoritmilor ineficienți în criptosistemul nucleului. Însă testele au folosit cel mai rapid algoritm, aes-xts, cu 256 de chei de criptare, a căror performanță la rularea „cryptsetup benchmark” este de peste două ori mai mare decât rezultatul obținut la testarea unui disc RAM. Experimentele cu steaguri dm-crypt pentru reglarea performanței nu au dat rezultate: atunci când se folosește steagul „--perf-same_cpu_crypt”, performanța a scăzut chiar la 136 MB/s, iar când s-a specificat steagul „--perf-submit_from_crypt_cpus” a crescut doar până la 166 MB/s.

O analiză mai profundă a logicii de operare a arătat că dm-crypt nu este atât de simplu pe cât pare - atunci când sosește o solicitare de scriere de la driverul FS, dm-crypt nu o procesează imediat, ci o plasează în coada „kcryptd”, care nu este analizat imediat, ci când este momentul convenabil. Din coadă, cererea este trimisă către API-ul Linux Crypto pentru a realiza criptarea. Dar, deoarece API-ul Crypto folosește un model de execuție asincron, nici criptarea nu este efectuată imediat, ci ocolind o altă coadă. După ce criptarea este completă, dm-crypt poate încerca să sorteze cererile de scriere în așteptare folosind un arbore de căutare rosu-negru. La sfârșit, un fir de nucleu separat din nou, cu o anumită întârziere, preia cererile de I/O acumulate și le trimite la stiva de dispozitive bloc.

Cloudflare a pregătit corecții care accelerează dramatic criptarea discului în Linux

La citire, dm-crypt adaugă mai întâi o solicitare la coada „kcryptd_io” pentru a primi date de pe unitate. După ceva timp, datele devin disponibile și sunt plasate în coada „kcryptd” pentru decriptare.
Kcryptd trimite o solicitare către API-ul Linux Crypto, care decriptează informațiile în mod asincron. Solicitările nu trec întotdeauna prin toate cozile, dar în cel mai rău caz, o solicitare de scriere ajunge în cozi de până la 4 ori, iar o solicitare de citire de până la 3 ori. Fiecare accesare la coadă cauzează întârzieri, care sunt motivul cheie pentru scăderea semnificativă a performanței dm-crypt.

Utilizarea cozilor se datorează necesității de a lucra în condițiile în care apar întreruperi. În 2005, când a fost implementat actualul model de operare bazat pe cozi de aşteptare al dm-crypt, API-ul Crypto nu era încă asincron. După ce API-ul Crypto a fost transferat la un model de execuție asincron, în esență a început să fie utilizată protecție dublă. Au fost introduse și cozi pentru a economisi consumul stivei de kernel, dar după creșterea acestuia în 2014, aceste optimizări și-au pierdut relevanța. O coadă suplimentară „kcryptd_io” a fost introdusă pentru a depăși blocajul care rezultă în așteptarea alocării memoriei atunci când sosesc un număr mare de solicitări. În 2015, a fost introdusă o fază suplimentară de sortare, deoarece cererile de criptare pe sistemele multiprocesor puteau fi finalizate în afara ordinului (în loc de acces secvenţial la disc, accesul a fost efectuat în ordine aleatorie, iar planificatorul CFQ nu a funcţionat eficient). În prezent, când se utilizează unități SSD, sortarea și-a pierdut sensul, iar planificatorul CFQ nu mai este folosit în nucleu.

Având în vedere că unitățile moderne au devenit mai rapide și mai inteligente, sistemul de distribuție a resurselor din nucleul Linux a fost revizuit și unele subsisteme au fost reproiectate, inginerii Cloudflare adăugat dm-crypt are un nou mod de operare care elimină utilizarea cozilor inutile și a apelurilor asincrone. Modul este activat de un semnal separat „force_inline” și aduce dm-crypt sub forma unui simplu proxy care criptează și decriptează cererile primite. Interacțiunea cu Crypto API a fost optimizată prin alegerea explicită a algoritmilor de criptare care funcționează în modul sincron și nu folosesc cozi de solicitare. Pentru a lucra sincron cu API-ul Crypto a existat propus un modul care vă permite să utilizați FPU/AES-NI pentru accelerare și transmite direct cererile de criptare și decriptare.

Ca rezultat, la testarea unui disc RAM, a fost posibil să se dubleze mai mult decât performanța dm-crypt - performanța a crescut de la 294 MB/s (2 x 147 MB/s) la 640 MB/s, ceea ce este foarte aproape de performanța criptării netede (696 MB/s).

Cloudflare a pregătit corecții care accelerează dramatic criptarea discului în Linux

Cloudflare a pregătit corecții care accelerează dramatic criptarea discului în Linux

Cloudflare a pregătit corecții care accelerează dramatic criptarea discului în Linux

La testarea încărcării pe servere reale, noua implementare a arătat performanțe foarte apropiate de configurația care rulează fără criptare, iar activarea criptării pe servere cu cache Cloudflare nu a avut niciun efect asupra vitezei de răspuns. În viitor, Cloudflare intenționează să transfere patch-urile pregătite pe kernel-ul principal Linux, dar înainte de aceasta vor trebui reluate, deoarece sunt optimizate pentru o anumită încărcare și nu acoperă toate domeniile de aplicație, de exemplu, criptarea la nivel scăzut. -dispozitive integrate cu putere.

Cloudflare a pregătit corecții care accelerează dramatic criptarea discului în Linux

Sursa: opennet.ru

Adauga un comentariu