„Cloudflare“ parengė pataisas, kurios žymiai pagreitina disko šifravimą „Linux“.

Kūrėjai iš Cloudflare pasakojo apie darbą optimizuojant disko šifravimo našumą Linux branduolyje. Dėl to jie pasiruošė pleistrai posistemiui dm-kriptos ir Crypto API, kuri daugiau nei dvigubai padidino skaitymo ir rašymo pralaidumą atliekant sintetinį testą, taip pat perpus sumažino delsą. Bandant naudojant tikrą aparatinę įrangą, šifravimo išlaidos buvo sumažintos iki beveik tokio lygio, kuris stebimas dirbant su disku nenaudojant duomenų šifravimo.

„Cloudflare“ naudoja dm-crypt, kad užšifruotų duomenis diskuose, naudojamuose turiniui saugoti CDN. Dm-crypt veikia blokinio įrenginio lygiu ir užšifruoja I/O rašymo užklausas bei iššifruoja skaitymo užklausas, veikdama kaip sluoksnis tarp blokinio įrenginio ir failų sistemos tvarkyklės.

„Cloudflare“ parengė pataisas, kurios žymiai pagreitina disko šifravimą „Linux“.

Įvertinti dm-crypt našumą naudojant paketą Lankstus I/O testeris Buvo išmatuotas darbo su užšifruotomis ir nešifruotomis skaidiniais RAM diske, esančiame RAM, greitis, siekiant pašalinti disko našumo svyravimus ir sutelkti dėmesį į kodo veikimą. Nešifruotų skaidinių skaitymo ir rašymo našumas buvo 1126 MB / s, tačiau įjungus šifravimą greitis sumažėjo 7 laiku ir siekė 147 MB/s.

Iš pradžių kilo įtarimas, kad branduolio kriptosistemoje naudojami neefektyvūs algoritmai. Tačiau testuose buvo naudojamas greičiausias aes-xts algoritmas su 256 šifravimo raktais, kurių našumas paleidžiant „cryptsetup etaloną“ yra daugiau nei dvigubai didesnis nei rezultatas, gautas testuojant RAM diską. Eksperimentai su dm-crypt vėliavėlėmis našumui derinti nedavė jokio rezultato: naudojant žymą „--perf-same_cpu_crypt“, našumas net sumažėjo iki 136 MB/s, o kai buvo „--perf-submit_from_crypt_cpus“ nurodyta, ji padidėjo tik iki 166 MB/s.

Gilesnė darbo logikos analizė parodė, kad dm-crypt nėra taip paprasta, kaip atrodo – gavus rašymo užklausą iš FS tvarkyklės, dm-crypt jos neapdoroja iš karto, o įdeda į „kcryptd“ eilę. , kuris analizuojamas ne iš karto, o atsiradus patogiam momentui. Iš eilės užklausa siunčiama į Linux Crypto API, kad būtų atliktas šifravimas. Bet kadangi Crypto API naudoja asinchroninį vykdymo modelį, šifravimas taip pat atliekamas ne iš karto, o apeinant kitą eilę. Kai šifravimas bus baigtas, dm-crypt gali bandyti rūšiuoti laukiančias rašymo užklausas naudodamas paieškos medį raudona-juoda. Pabaigoje atskira branduolio gija vėl su tam tikra delsa paima sukauptas įvesties / išvesties užklausas ir siunčia jas į blokinio įrenginio krūvą.

„Cloudflare“ parengė pataisas, kurios žymiai pagreitina disko šifravimą „Linux“.

Skaitydamas pirmiausia, dm-crypt prideda užklausą prie „kcryptd_io“ eilės, kad gautų duomenis iš disko. Po kurio laiko duomenys tampa prieinami ir dedami į „kcryptd“ eilę iššifruoti.
Kcryptd siunčia užklausą Linux Crypto API, kuri asinchroniškai iššifruoja informaciją. Užklausos ne visada praeina per visas eiles, tačiau blogiausiu atveju rašymo užklausa eilėse nusėda iki 4 kartų, o skaitymo – iki 3 kartų. Kiekvienas eilėje esantis įvykis sukelia vėlavimus, kurie yra pagrindinė priežastis, dėl kurios labai pablogėja dm-crypt našumas.

Eilių naudojimas atsiranda dėl būtinybės dirbti pertraukų sąlygomis. 2005 m., kai buvo įdiegtas dabartinis eilėmis pagrįstas dm-crypt modelis, Crypto API dar nebuvo asinchroninė. Perkėlus Crypto API į asinchroninį vykdymo modelį, iš esmės pradėta taikyti dviguba apsauga. Taip pat buvo įvestos eilės, kad būtų taupomas branduolio krūvos suvartojimas, tačiau po jo padidėjimo 2014 m. optimizavimo duomenys prarado savo aktualumą. Buvo įvesta papildoma „kcryptd_io“ eilė, siekiant įveikti kliūtis, dėl kurių atminties paskirstymas laukia, kai gaunama daug užklausų. 2015 m. papildomai buvo įvestas rūšiavimo etapas, nes šifravimo užklausos kelių procesorių sistemose galėjo būti pildomos netvarkingai (vietoj nuoseklios prieigos prie disko, prieiga buvo vykdoma atsitiktine tvarka, o CFQ planuoklis neveikė efektyviai). Šiuo metu rūšiavimas prarado prasmę naudojant SSD, o CFQ planuotojas branduolyje nebenaudojamas.

Atsižvelgiant į tai, kad šiuolaikiniai diskai tapo greitesni ir išmanesni, „Linux“ branduolio išteklių paskirstymo sistema buvo peržiūrėta, o kai kurios posistemės buvo perkurtos, „Cloudflare“ inžinieriai pridėta dm-crypt turi naują veikimo režimą, kuriame nenaudojamos nereikalingos eilės ir asinchroniniai skambučiai. Režimas įjungiamas naudojant atskirą vėliavėlę „force_inline“ ir perkelia dm-crypt į paprastą tarpinį serverį, kuris užšifruoja ir iššifruoja gaunamas užklausas. Sąveika su Crypto API buvo optimizuota aiškiai pasirenkant šifravimo algoritmus, kurie veikia sinchroniniu režimu ir nenaudoja užklausų eilių. Sinchroniniam darbui su Crypto API buvo pasiūlė modulis, leidžiantis naudoti FPU / AES-NI pagreitinimui ir tiesiogiai persiųsti šifravimo ir iššifravimo užklausas.

Dėl to, bandydami RAM diską, mums pavyko daugiau nei dvigubai padidinti dm-crypt našumą - našumas padidėjo nuo 294 MB / s (2 x 147 MB ​​/ s) iki 640 MB / s, o tai yra labai arti. pliko šifravimo veikimui (696 MB/s).

„Cloudflare“ parengė pataisas, kurios žymiai pagreitina disko šifravimą „Linux“.

„Cloudflare“ parengė pataisas, kurios žymiai pagreitina disko šifravimą „Linux“.

„Cloudflare“ parengė pataisas, kurios žymiai pagreitina disko šifravimą „Linux“.

Tikrinant realių serverių apkrovą, naujasis diegimas parodė našumą, labai artimą konfigūracijai, veikiančiai be šifravimo, o šifravimo įjungimas serveriuose su „Cloudflare“ talpykla niekaip nepaveikė atsakymo greičio. Ateityje „Cloudflare“ planuoja išleisti paruoštus pataisymus į pagrindinį „Linux“ branduolį, tačiau prieš tai juos reikės perdirbti, nes jie yra optimizuoti tam tikram darbo krūviui ir neapima visų taikymo sričių, pavyzdžiui, šifravimas žemoje padėtyje. - maitinimo įterptieji įrenginiai.

„Cloudflare“ parengė pataisas, kurios žymiai pagreitina disko šifravimą „Linux“.

Šaltinis: opennet.ru

Добавить комментарий