Програмери из Цлоудфларе-а о обављању послова на оптимизацији перформанси шифровања диска у Линук кернелу. Као резултат тога, били су припремљени за подсистем и Црипто АПИ, који је омогућио више него удвостручење протока читања и писања у синтетичком тесту, као и преполовљење латенције. Приликом тестирања на стварном хардверу, трошкови шифровања су смањени на скоро ниво који је примећен када се ради са диском без коришћења шифровања података.
Цлоудфларе користи дм-црипт за шифровање података на уређајима за складиштење који се користе за кеширање садржаја на ЦДН-у. Дм-црипт ради на нивоу блок уређаја и шифрује И/О захтеве за писање и дешифрује захтеве за читање, делујући као слој између блок уређаја и драјвера система датотека.
Да бисте проценили перформансе дм-црипт користећи пакет Измерили смо брзину рада са шифрованим и нешифрованим партицијама на РАМ диску који се налази у РАМ-у да бисмо елиминисали флуктуације у перформансама диска и фокусирали се на перформансе кода. За нешифроване партиције, перформансе читања и писања су остале на 1126 МБ/с, али је брзина смањена када је шифровање омогућено КСНУМКС у времену и износио је 147 МБ/с.
У почетку се појавила сумња у употребу неефикасних алгоритама у криптосистему кернела. Али тестови су користили најбржи алгоритам, аес-ктс, са 256 кључева за шифровање, чије су перформансе при покретању „криптсетуп бенцхмарк“-а више него двоструко веће од резултата добијеног приликом тестирања РАМ диска. Експерименти са дм-црипт заставицама за подешавање перформанси нису дали резултате: када се користи заставица „--перф-саме_цпу_црипт“, перформансе су чак смањене на 136 МБ/с, а када се наведе заставица „--перф-субмит_фром_црипт_цпус“ само су се повећале до 166 МБ/с.
Дубља анализа оперативне логике показала је да дм-црипт није тако једноставан као што се чини – када од ФС драјвера стигне захтев за писање, дм-црипт га не обрађује одмах, већ га смешта у ред „кцриптд“, што се не анализира одмах, већ када је погодан тренутак. Из реда, захтев се шаље Линук Црипто АПИ-ју да изврши шифровање. Али пошто Црипто АПИ користи асинхрони модел извршавања, шифровање се такође не врши одмах, већ заобилазећи други ред. Након што је шифровање завршено, дм-црипт може покушати да сортира захтеве за писање на чекању користећи стабло претраге . На крају, засебна нит кернела поново, са одређеним закашњењем, преузима нагомилане И/О захтеве и шаље их у блок уређаја.
Приликом читања, дм-црипт прво додаје захтев у ред „кцриптд_ио“ за примање података са диска. Након неког времена, подаци постају доступни и стављају се у „кцриптд“ ред за дешифровање.
Кцриптд шаље захтев Линук Црипто АПИ-ју, који асинхроно дешифрује информације. Захтеви не пролазе увек кроз све редове, али у најгорем случају, захтев за писање завршава у редовима до 4 пута, а захтев за читање до 3 пута. Сваки погодак у реду изазива кашњења, која су кључни разлог за значајно смањење перформанси дм-црипт.
Коришћење редова је због потребе рада у условима у којима долази до прекида. У 2005. години, када је имплементиран тренутни оперативни модел базиран на реду чекања дм-црипт-а, Црипто АПИ још није био асинхрони. Након што је Црипто АПИ пребачен на асинхрони модел извршавања, почела је да се користи у суштини двострука заштита. Редови су такође уведени да би се уштедела потрошња стека кернела, али након његовог повећања 2014. године, ове оптимизације су изгубиле своју релевантност. Додатни ред "кцриптд_ио" је уведен како би се превазишло уско грло које је резултирало чекањем на доделу меморије када стигне велики број захтева. У 2015. години уведена је додатна фаза сортирања, пошто су захтеви за шифровање на вишепроцесорским системима могли да се доврше ван реда (уместо секвенцијалног приступа диску, приступ је вршен насумичним редоследом, а ЦФК планер није функционисао ефикасно). Тренутно, када се користе ССД дискови, сортирање је изгубило своје значење, а ЦФК планер се више не користи у кернелу.
Узимајући у обзир да су савремени дискови постали бржи и паметнији, систем дистрибуције ресурса у Линук кернелу је ревидиран и неки подсистеми су редизајнирани, Цлоудфларе инжењери дм-црипт има нови режим рада који елиминише употребу непотребних редова и асинхроних позива. Режим је омогућен посебном заставицом „форце_инлине“ и доводи дм-црипт у облик једноставног проксија који шифрује и дешифрује долазне захтеве. Интеракција са Црипто АПИ-јем је оптимизована експлицитним одабиром алгоритама за шифровање који раде у синхроном режиму и не користе редове захтева. Постојао је синхрони рад са Црипто АПИ-јем модул који вам омогућава да користите ФПУ/АЕС-НИ за убрзање и директно прослеђује захтеве за шифровање и дешифровање.
Као резултат тога, приликом тестирања РАМ диска, било је могуће више него удвостручити перформансе дм-црипт - перформансе су порасле са 294 МБ/с (2 к 147 МБ/с) на 640 МБ/с, што је веома близу перформансе голе енкрипције (696 МБ/с).
Приликом тестирања оптерећења на стварним серверима, нова имплементација је показала перформансе веома блиске конфигурацији која ради без шифровања, а омогућавање шифровања на серверима са Цлоудфларе кеш меморијом није имало утицаја на брзину одговора. У будућности, Цлоудфларе планира да пренесе припремљене закрпе на главно језгро Линука, али ће их пре тога морати прерадити, јер су оптимизовани за одређено оптерећење и не покривају све области примене, на пример, шифровање на ниском -енергетски уграђени уређаји.
Извор: опеннет.ру
