Cloudflare әзірлеушілері
Cloudflare CDN ішіндегі мазмұнды кэштеу үшін пайдаланылатын сақтау құрылғыларындағы деректерді шифрлау үшін dm-crypt пайдаланады. Dm-crypt блоктық құрылғы деңгейінде жұмыс істейді және блоктық құрылғы мен файлдық жүйе драйвері арасындағы қабат рөлін атқара отырып, енгізу/шығару жазу сұрауларын шифрлайды және оқу сұраныстарын шешеді.
Пакет арқылы dm-crypt өнімділігін бағалау
Алдымен ядроның криптожүйесінде тиімсіз алгоритмдерді қолдану туралы күдік туындады. Бірақ сынақтарда 256 шифрлау кілті бар aes-xts ең жылдам алгоритмі қолданылды, оның өнімділігі «cryptsetup эталоны» іске қосылған кездегі жедел жады дискісін сынау кезінде алынған нәтижеден екі есе жоғары. Өнімділікті реттеуге арналған dm-crypt жалаушаларымен жүргізілген эксперименттер нәтиже бермеді: «--perf-same_cpu_crypt» жалауын пайдаланған кезде өнімділік тіпті 136 МБ/с дейін төмендеді, ал «--perf-submit_from_crypt_cpus» жалаушасын көрсеткенде ол тек өсті. 166 МБ/с дейін.
Операциялық логиканы тереңірек талдау 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 жоспарлаушы ядрода енді қолданылмайды.
Заманауи дискілер жылдамырақ және ақылды бола бастағанын ескере отырып, Linux ядросындағы ресурстарды тарату жүйесі қайта қаралды және кейбір ішкі жүйелер қайта жасалды, Cloudflare инженерлері
Нәтижесінде, жедел жады дискісін тестілеу кезінде dm-crypt өнімділігін екі еседен астам арттыруға мүмкіндік туды - өнімділік 294 МБ/с (2 x 147 МБ/с) 640 МБ/с дейін өсті, бұл өте жақын. жалаң шифрлау өнімділігі (696 МБ/с).
Нақты серверлерде жүктемені сынау кезінде жаңа енгізу шифрлаусыз жұмыс істейтін конфигурацияға өте жақын өнімділікті көрсетті және Cloudflare кэші бар серверлерде шифрлауды қосу жауап жылдамдығына әсер етпеді. Болашақта Cloudflare дайындалған патчтарды негізгі Linux ядросына беруді жоспарлап отыр, бірақ оған дейін оларды қайта өңдеу қажет болады, өйткені олар белгілі бір жүктеме үшін оңтайландырылған және қолданбаның барлық салаларын қамтымайды, мысалы, төмен деңгейде шифрлау - қуатты кірістірілген құрылғылар.
Ақпарат көзі: opennet.ru