Cloudflare-ийн хөгжүүлэгчид
Cloudflare нь CDN дээрх агуулгыг кэш хийхэд ашигладаг хадгалах төхөөрөмж дээрх өгөгдлийг шифрлэхийн тулд dm-crypt ашигладаг. Dm-crypt нь блок төхөөрөмжийн түвшинд ажилладаг бөгөөд бичих оролт гаралтын хүсэлтийг шифрлэж, унших хүсэлтийг тайлж блок төхөөрөмж болон файлын системийн драйверын хооронд давхаргын үүрэг гүйцэтгэдэг.
Багцыг ашиглан dm-crypt-ийн гүйцэтгэлийг үнэлэх
Эхэндээ цөмийн криптосистемд үр ашиггүй алгоритмуудыг ашигласан тухай сэжиг төрж байв. Гэхдээ туршилтууд нь хамгийн хурдан алгоритм болох aes-xts-ийг 256 шифрлэлтийн түлхүүрээр ашигласан бөгөөд "cryptsetup benchmark"-ыг ажиллуулах явцад гүйцэтгэл нь RAM дискийг турших явцад олж авсан үр дүнгээс хоёр дахин өндөр байна. Гүйцэтгэлийг тааруулахын тулд dm-crypt туг ашиглан хийсэн туршилтууд үр дүнд хүрээгүй: "--perf-same_cpu_crypt" тугийг ашиглах үед гүйцэтгэл бүр 136 MB/s хүртэл буурч, "--perf-submit_from_crypt_cpus" гэсэн тугийг зааж өгөхөд зөвхөн нэмэгдсэн. 166 MB/s хүртэл.
Үйлдлийн логикийн гүнзгий дүн шинжилгээ нь dm-crypt нь санагдсан шиг тийм ч энгийн зүйл биш гэдгийг харуулсан - FS драйвераас бичих хүсэлт ирэхэд dm-crypt үүнийг шууд боловсруулдаггүй, харин "kcryptd" дараалалд оруулдаг. нэн даруй задлан шинжилдэггүй, гэхдээ тохиромжтой үед. Дараалалаас хүсэлтийг Linux Crypto API руу илгээж шифрлэлт хийнэ. Гэхдээ Crypto API нь асинхрон гүйцэтгэлийн загварыг ашигладаг тул шифрлэлт шууд хийгддэггүй, харин өөр дарааллыг алгасдаг. Шифрлэлт дууссаны дараа dm-crypt нь хайлтын модыг ашиглан хүлээгдэж буй бичих хүсэлтийг эрэмбэлэхийг оролдож болно
Унших үед dm-crypt нь эхлээд хөтөчөөс өгөгдөл хүлээн авах хүсэлтийг "kcryptd_io" дараалалд нэмдэг. Хэсэг хугацааны дараа өгөгдөл бэлэн болж, шифрийг тайлах зорилгоор "kcryptd" дараалалд оруулна.
Kcryptd нь Linux Crypto API руу хүсэлт илгээдэг бөгөөд энэ нь мэдээллийг асинхроноор тайлдаг. Хүсэлтүүд үргэлж бүх дарааллаар дамждаггүй, гэхдээ хамгийн муу тохиолдолд бичих хүсэлт 4 хүртэл удаа, унших хүсэлт 3 хүртэл удаа дараалалд ордог. Дараалалд хүрэх бүр нь саатал үүсгэдэг бөгөөд энэ нь dm-crypt-ийн гүйцэтгэл мэдэгдэхүйц буурах гол шалтгаан болдог.
Дараалалыг ашиглах нь тасалдал гарсан нөхцөлд ажиллах шаардлагатай байгаатай холбоотой юм. 2005 онд dm-crypt-ийн одоогийн дараалалд суурилсан үйлдлийн загвар хэрэгжиж байх үед Crypto API хараахан асинхрон биш байсан. Crypto API-г асинхрон гүйцэтгэлийн загварт шилжүүлсний дараа үндсэндээ давхар хамгаалалтыг ашиглаж эхэлсэн. Цөмийн стекийн хэрэглээг хэмнэхийн тулд дарааллыг мөн нэвтрүүлсэн боловч 2014 онд нэмэгдсэний дараа эдгээр оновчлол нь хамааралгүй болсон. Олон тооны хүсэлт ирэх үед санах ойн хуваарилалтыг хүлээхэд хүргэдэг түгжрэлийг арилгахын тулд "kcryptd_io" нэмэлт дарааллыг нэвтрүүлсэн. 2015 онд нэмэлт эрэмбэлэх үе шатыг нэвтрүүлсэн, учир нь олон процессор систем дээрх шифрлэлтийн хүсэлтийг дараалалгүй дуусгах боломжтой байсан (диск рүү дараалсан хандалтын оронд хандалт санамсаргүй дарааллаар хийгдсэн, CFQ хуваарьлагч үр дүнтэй ажиллахгүй байсан). Одоогоор SSD хөтчүүдийг ашиглах үед эрэмбэлэх нь утгаа алдаж, CFQ төлөвлөгчийг цөмд ашиглахаа больсон.
Орчин үеийн хөтчүүд илүү хурдан, ухаалаг болж байгааг харгалзан Линуксийн цөм дэх нөөцийн хуваарилалтын системийг шинэчилж, зарим дэд системүүдийг шинэчилсэн гэж Cloudflare инженерүүд
Үүний үр дүнд RAM дискийг туршиж үзэхэд dm-crypt-ийн гүйцэтгэлийг хоёр дахин нэмэгдүүлэх боломжтой болсон - гүйцэтгэл нь 294 MB/s (2 x 147 MB/s)-аас 640 MB/s хүртэл нэмэгдсэн нь маш ойрхон байна. нүцгэн шифрлэлтийн гүйцэтгэл (696 MB / s).
Бодит серверүүд дээрх ачааллыг шалгах үед шинэ хэрэгжүүлэлт нь шифрлэлтгүйгээр ажиллаж байгаа тохиргоотой маш ойрхон гүйцэтгэлийг харуулсан бөгөөд Cloudflare кэштэй сервер дээр шифрлэлтийг идэвхжүүлсэн нь хариу өгөх хурдад ямар ч нөлөө үзүүлээгүй. Ирээдүйд Cloudflare бэлтгэсэн засваруудыг Линуксийн үндсэн цөм рүү шилжүүлэхээр төлөвлөж байгаа боловч үүнээс өмнө тэдгээрийг дахин боловсруулах шаардлагатай болно, учир нь тэдгээр нь тодорхой ачаалалд тохирсон бөгөөд хэрэглээний бүх талбарыг хамардаггүй, жишээлбэл, шифрлэлт бага түвшинд байна. - цахилгаан суурилуулсан төхөөрөмж.
Эх сурвалж: opennet.ru