Cloudflare-ko garatzaileak
Cloudflare-k dm-crypt erabiltzen du CDN-ko edukia cacheatzeko erabiltzen diren biltegiratze-gailuetako datuak enkriptatzeko. Dm-crypt-ek bloke-gailuen mailan funtzionatzen du eta idazketa-I/O-eskaerak enkriptatzen ditu eta irakurketa-eskaerak deszifratzen ditu, bloke-gailuaren eta fitxategi-sistemaren kontrolatzailearen arteko geruza gisa jokatuz.
Paketea erabiliz dm-crypt-en errendimendua ebaluatzeko
Hasieran, susmoa sortu zen nukleoko kriptosisteman algoritmo eraginkorrak ez erabiltzearen inguruan. Baina probek algoritmo azkarrena erabili zuten, aes-xts, 256 enkriptazio-gakorekin, zeinaren errendimendua "cryptsetup benchmark" exekutatzen denean RAM disko bat probatzean lortutako emaitza baino bi aldiz handiagoa da. Errendimendua doitzeko dm-crypt markekin egindako esperimentuek ez zuten emaitzarik eman: "--perf-same_cpu_crypt" marka erabiltzean, errendimendua 136 MB/s-ra ere jaitsi zen, eta "--perf-submit_from_crypt_cpus" marka zehaztean bakarrik handitu zen. 166 MB/s-ra.
Logika operatiboaren azterketa sakonago batek erakutsi zuen dm-crypt ez dela dirudien bezain erraza - FS kontrolatzailetik idazketa eskaera bat iristen denean, dm-crypt ez du berehala prozesatzen, baizik eta "kcryptd" ilaran jartzen du. ez da berehala analizatzen, une egokia denean baizik. Ilaratik, eskaera Linux Crypto APIra bidaltzen da enkriptatzea egiteko. Baina Crypto APIak exekuzio eredu asinkronoa erabiltzen duenez, enkriptatzea ere ez da berehala egiten, beste ilara bat saihestuz baizik. Enkriptatzea amaitu ondoren, dm-crypt-ek zain dauden idazketa-eskaerak bilaketa-zuhaitz baten bidez ordenatzen saia daiteke
Irakurtzean, dm-crypt-ek lehenik eskaera bat gehitzen du "kcryptd_io" ilarara unitateko datuak jasotzeko. Denbora pixka bat igaro ondoren, datuak eskuragarri egongo dira eta "kcryptd" ilaran jartzen dira deszifratzeko.
Kcryptd-ek eskaera bat bidaltzen du Linux Crypto APIra, eta horrek informazioa modu asinkronoan deszifratzen du. Eskaerak ez dira beti ilara guztietatik pasatzen, baina kasurik txarrenean, idazketa-eskaera bat ilaran amaitzen da 4 aldiz gehienez, eta irakurketa-eskaera 3 aldiz gehienez. Ilaran egindako hit bakoitzak atzerapenak eragiten ditu, eta horiek dira dm-crypt errendimenduaren murrizketa nabarmenaren arrazoi nagusia.
Ilarak erabiltzea etenaldiak gertatzen diren baldintzetan lan egin beharragatik da. 2005ean, dm-crypt-en egungo ilaran oinarritutako eredu eragilea ezarri zenean, Crypto APIa ez zen oraindik asinkronoa. Crypto API exekuzio eredu asinkrono batera transferitu ondoren, funtsean babes bikoitza erabiltzen hasi zen. Ilarak ere sartu ziren nukleoen pila-kontsumoa aurrezteko, baina 2014an handitu ondoren, optimizazio hauek garrantzia galdu zuten. "kcryptd_io" ilara gehigarri bat sartu zen, eskaera ugari iristen direnean memoria esleitzearen zain egotearen ondorioz botila-lepoa gainditzeko. 2015ean, sailkapen-fase gehigarri bat sartu zen, prozesadore anitzeko sistemen enkriptazio-eskaerak ordenarik gabe bete zitezkeelako (diskorako sarbide sekuentziala egin beharrean, sarbidea ausazko ordenan egiten zen, eta CFQ programatzaileak ez zuen eraginkortasunez funtzionatzen). Gaur egun, SSD unitateak erabiltzean, ordenatzeak zentzua galdu du eta CFQ programatzailea ez da gehiago erabiltzen nukleoan.
Unitate modernoak azkarrago eta adimentsuagoak bihurtu direla kontuan hartuta, Linux nukleoko baliabideak banatzeko sistema berrikusi eta azpisistema batzuk birdiseinatu dira, Cloudflare ingeniariek
Ondorioz, RAM disko bat probatzean, dm-crypt-en errendimendua bikoiztu baino gehiago izan zen - errendimendua 294 MB/s (2 x 147 MB/s) izatetik 640 MB/s-ra igo zen, hau da, oso hurbil. zifratze hutsaren errendimendua (696 MB/s).
Zerbitzari errealetan karga probatzean, inplementazio berriak enkriptatutako konfiguraziotik oso gertu zegoen errendimendua erakutsi zuen, eta Cloudflare cachea duten zerbitzarietan enkriptatzea gaitzeak ez zuen erantzunen abiaduran eraginik izan. Etorkizunean, Cloudflare-k prestatutako adabakiak Linux kernel nagusira transferitzeko asmoa du, baina aurretik berriro landu beharko dira, karga zehatz baterako optimizatuta baitaude eta ez baitute aplikazio-eremu guztiak estaltzen, adibidez, enkriptatzea. -Potentzia txertatutako gailuak.
Iturria: opennet.ru