Cloudflare on ette valmistanud paigad, mis kiirendavad oluliselt ketta krüptimist Linuxis

Cloudflare'i arendajad rääkinud Linuxi tuumas ketta krüptimise optimeerimise töö tegemisest. Selle tulemusena valmistati nad ette plaastrid allsüsteemi jaoks dm-krüpt ja Crypto API, mis võimaldas sünteetilises testis lugemis- ja kirjutamisvõimsust enam kui kahekordistada ning latentsust poole võrra vähendada. Päris riistvaraga testimisel vähenes krüptimise üldkulu peaaegu tasemele, mida täheldati ilma andmete krüptimiseta kettaga töötamisel.

Cloudflare kasutab dm-krüpti andmete krüptimiseks salvestusseadmetel, mida kasutatakse CDN-i sisu vahemällu salvestamiseks. Dm-crypt töötab plokkseadme tasemel ja krüpteerib kirjutamis-sisendi- ja dekrüpteerimistaotlused, toimides kihina plokkseadme ja failisüsteemi draiveri vahel.

Cloudflare on ette valmistanud paigad, mis kiirendavad oluliselt ketta krüptimist Linuxis

Dm-crypt toimivuse hindamine paketi abil Paindlik I/O tester Mõõtsime RAM-is asuva RAM-ketta krüpteeritud ja krüptimata partitsioonidega töötamise kiirust, et kõrvaldada ketta jõudluse kõikumised ja keskenduda koodi jõudlusele. Krüptimata partitsioonide puhul jäi lugemise ja kirjutamise jõudlus 1126 MB/s juurde, kuid krüpteerimise lubamisel kiirus vähenes 7 aeg ja ulatus 147 MB/s-ni.

Algul tekkis kahtlus ebaefektiivsete algoritmide kasutamises tuuma krüptosüsteemis. Kuid testides kasutati kiireimat algoritmi aes-xts, 256 krüpteerimisvõtmega, mille jõudlus "cryptsetup etaloni" käivitamisel on rohkem kui kaks korda kõrgem kui RAM-ketta testimisel saadud tulemus. Katsed dm-crypt lippudega jõudluse häälestamiseks ei andnud tulemusi: lipu "--perf-same_cpu_crypt" kasutamisel langes jõudlus isegi 136 MB/s-ni ja lipu "--perf-submit_from_crypt_cpus" määramisel ainult tõusis. kuni 166 MB/s.

Tööloogika sügavam analüüs näitas, et dm-crypt ei ole nii lihtne, kui tundub - kui FS-draiverilt saabub kirjutamistaotlus, ei töötle dm-crypt seda kohe, vaid asetab selle “kcryptd” järjekorda, mis ei sõeluta kohe, vaid sobival hetkel. Järjekorrast saadetakse taotlus krüptimise teostamiseks Linuxi krüpto API-le. Aga kuna Crypto API kasutab asünkroonset täitmismudelit, siis ei teostata ka krüptimist kohe, vaid teisest järjekorrast mööda minnes. Pärast krüptimise lõpetamist võib dm-crypt proovida ootel olevaid kirjutamispäringuid otsingupuu abil sortida punane-must. Lõpus korjab taas eraldi kerneli lõim teatud viivitusega üles kogunenud I/O päringud ja saadab need plokkseadmete virna.

Cloudflare on ette valmistanud paigad, mis kiirendavad oluliselt ketta krüptimist Linuxis

Lugemisel lisab dm-crypt esmalt järjekorda "kcryptd_io" draivilt andmete vastuvõtmise päringu. Mõne aja pärast muutuvad andmed kättesaadavaks ja asetatakse dekrüpteerimiseks kcryptd järjekorda.
Kcryptd saadab päringu Linux Crypto API-le, mis dekrüpteerib teabe asünkroonselt. Päringud ei käi alati kõiki järjekordi läbi, kuid halvimal juhul satub kirjutamissoov järjekordadesse kuni 4 korda, lugemissoov aga kuni 3 korda. Iga tabamus järjekorda põhjustab viivitusi, mis on dm-krüpti jõudluse olulise vähenemise peamine põhjus.

Järjekordade kasutamine on tingitud vajadusest töötada tingimustes, kus esineb katkestusi. 2005. aastal, kui dm-crypti praegune järjekorrapõhine töömudel rakendati, ei olnud Crypto API veel asünkroonne. Pärast seda, kui Crypto API viidi üle asünkroonsele täitmismudelile, hakati kasutama sisuliselt topeltkaitset. Järjekorrad võeti kasutusele ka kerneli virna tarbimise säästmiseks, kuid pärast selle suurenemist 2014. aastal kaotasid need optimeerimised oma tähtsuse. Täiendav järjekord "kcryptd_io" võeti kasutusele, et ületada kitsaskoht, mille tulemuseks on mälu eraldamise ootamine, kui saabub suur hulk päringuid. 2015. aastal võeti kasutusele täiendav sortimise faas, kuna mitme protsessoriga süsteemides sai krüpteerimispäringuid lõpule viia (kettale järjestikuse juurdepääsu asemel toimus juurdepääs juhuslikus järjekorras ja CFQ planeerija ei töötanud tõhusalt). Praegu on SSD-draivide kasutamisel sorteerimine oma mõtte kaotanud ja CFQ planeerijat enam tuumas ei kasutata.

Arvestades, et kaasaegsed draivid on muutunud kiiremaks ja nutikamaks, on Linuxi kerneli ressursside jaotussüsteemi muudetud ja mõned alamsüsteemid on ümber kujundatud, ütles Cloudflare'i insenerid. lisatud dm-cryptil on uus töörežiim, mis välistab tarbetute järjekordade ja asünkroonsete kõnede kasutamise. Režiimi lubab eraldi lipp "force_inline" ja see muudab dm-crypt lihtsa puhverserveri kujul, mis krüpteerib ja dekrüpteerib sissetulevad päringud. Koostoime Crypto API-ga on optimeeritud, valides selgesõnaliselt krüpteerimisalgoritmid, mis töötavad sünkroonrežiimis ja ei kasuta päringujärjekordi. Krüpto API-ga sünkroonseks töötamiseks oli olemas pakutud moodul, mis võimaldab kasutada kiirendamiseks FPU/AES-NI ja edastab otse krüpteerimis- ja dekrüpteerimistaotlused.

Selle tulemusena oli RAM-ketta testimisel võimalik dm-crypt jõudlust enam kui kahekordistada – jõudlus kasvas 294 MB/s (2 x 147 MB/s) 640 MB/s-ni, mis on väga lähedane tühja krüptimise jõudlus (696 MB / s).

Cloudflare on ette valmistanud paigad, mis kiirendavad oluliselt ketta krüptimist Linuxis

Cloudflare on ette valmistanud paigad, mis kiirendavad oluliselt ketta krüptimist Linuxis

Cloudflare on ette valmistanud paigad, mis kiirendavad oluliselt ketta krüptimist Linuxis

Pärisserverite koormuse testimisel näitas uus teostus jõudlust, mis on väga sarnane krüptimiseta töötavale konfiguratsioonile ja krüptimise lubamine Cloudflare'i vahemäluga serverites ei mõjutanud reageerimiskiirust. Tulevikus plaanib Cloudflare ettevalmistatud plaastrid üle kanda Linuxi põhikernelile, kuid enne seda tuleb need ümber töötada, kuna need on optimeeritud konkreetse koormuse jaoks ega kata kõiki rakendusvaldkondi, näiteks krüpteerimist madalal tasemel. - toite sisseehitatud seadmed.

Cloudflare on ette valmistanud paigad, mis kiirendavad oluliselt ketta krüptimist Linuxis

Allikas: opennet.ru

Lisa kommentaar