Kūrėjai iš Cloudflare
„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.
Įvertinti dm-crypt našumą naudojant paketą
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į
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
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).
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.
Šaltinis: opennet.ru