Մշակողները Cloudflare-ից
Cloudflare-ն օգտագործում է dm-crypt՝ տվյալների գաղտնագրման համար պահեստավորման սարքերի վրա, որոնք օգտագործվում են CDN-ում բովանդակությունը քեշավորելու համար: Dm-crypt-ը գործում է բլոկ սարքի մակարդակում և ծածկագրում է մուտքի/ելքի հարցումները և վերծանում ընթերցման հարցումները՝ հանդես գալով որպես շերտ բլոկային սարքի և ֆայլային համակարգի դրայվերի միջև:
Փաթեթի միջոցով dm-crypt-ի կատարումը գնահատելու համար
Սկզբում կասկածներ առաջացան միջուկի կրիպտոհամակարգում անարդյունավետ ալգորիթմների օգտագործման վերաբերյալ։ Սակայն թեստերն օգտագործել են ամենաարագ ալգորիթմը՝ aes-xts, 256 գաղտնագրման ստեղներով, որոնց կատարողականը «cryptsetup benchmark»-ը գործարկելիս ավելի քան երկու անգամ ավելի բարձր է, քան RAM սկավառակի փորձարկման արդյունքում ստացված արդյունքը: «--perf-same_cpu_crypt» դրոշն օգտագործելիս dm-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-ի ինժեներները
Արդյունքում, RAM սկավառակի փորձարկման ժամանակ հնարավոր եղավ ավելի քան կրկնապատկել dm-crypt-ի կատարումը. կատարողականությունը 294 ՄԲ/վ-ից (2 x 147 ՄԲ/վ) բարձրացավ մինչև 640 ՄԲ/վ, ինչը շատ մոտ է: մերկ գաղտնագրման կատարումը (696 ՄԲ/վ):
Իրական սերվերների վրա բեռնվածությունը փորձարկելիս նոր իրականացումը ցույց տվեց կատարողականություն, որը շատ մոտ է առանց կոդավորման գործարկվող կազմաձևին, և Cloudflare քեշով սերվերների վրա գաղտնագրման հնարավորությունը ոչ մի ազդեցություն չուներ արձագանքման արագության վրա: Ապագայում Cloudflare-ը նախատեսում է պատրաստի պատչերը փոխանցել Linux-ի հիմնական միջուկին, սակայն մինչ այդ դրանք պետք է վերամշակվեն, քանի որ դրանք օպտիմիզացված են որոշակի բեռի համար և չեն ընդգրկում կիրառման բոլոր ոլորտները, օրինակ՝ ցածր կոդավորումը։ - էներգիայի ներկառուցված սարքեր:
Source: opennet.ru