Cloudflare preparis diakilojn kiuj draste akcelas diskon ĉifradon en Linukso

Programistoj de Cloudflare rakontis pri farado de laboro por optimumigi la agadon de disko-ĉifrado en la Linukso-kerno. Kiel rezulto, ili estis pretaj flikiloj por subsistemo dm-kripto kaj Crypto API, kiu ebligis pli ol duobligi la legadon kaj skriban trairon en la sinteza testo, kaj ankaŭ duonigi latencian. Se provite sur reala aparataro, ĉifrado superkoste estis reduktita al preskaŭ la nivelo observita dum laborado kun disko sen datumĉifrado.

Cloudflare uzas dm-crypt por ĉifri datumojn pri stokaj aparatoj uzataj por konservi enhavon sur la CDN. Dm-kripto funkcias ĉe la blokaparato kaj ĉifras skribajn I/O-petojn kaj deĉifras legopetojn, funkciante kiel tavolo inter la blokaparato kaj la dosiersistemŝoforo.

Cloudflare preparis diakilojn kiuj draste akcelas diskon ĉifradon en Linukso

Por taksi la agadon de dm-crypt uzante la pakaĵon Fleksebla I/O-testilo Ni mezuris la rapidecon labori kun ĉifritaj kaj neĉifritaj subdiskoj sur RAM-disko situanta en RAM por forigi fluktuojn en disko-efikeco kaj koncentriĝi pri koda agado. Por neĉifritaj sekcioj, legado kaj skribado restis je 1126 MB/s, sed la rapideco malpliiĝis kiam ĉifrado estis ebligita. 7 fojojn kaj sumiĝis al 147 MB/s.

Komence, suspekto ekestis pri la uzo de malefikaj algoritmoj en la kerno-kriptosistemo. Sed la testoj uzis la plej rapidan algoritmon, aes-xts, kun 256 ĉifradŝlosiloj, kies agado dum funkciado de la "kriptosetup benchmark" estas pli ol duoble pli alta ol la rezulto akirita dum testado de RAM-disko. Eksperimentoj kun dm-crypt-flagoj por agordado de rendimento ne donis rezultojn: kiam oni uzis la flagon "--perf-same_cpu_crypt", la rendimento eĉ malpliiĝis al 136 MB/s, kaj kiam oni specifis la flagon "--perf-submit_from_crypt_cpus" pliiĝis nur. ĝis 166 MB/s.

Pli profunda analizo de la operacia logiko montris, ke dm-crypt ne estas tiel simpla kiel ŝajnas - kiam skriba peto alvenas de la FS-ŝoforo, dm-crypt ne tuj prilaboras ĝin, sed metas ĝin en la vico "kcryptd", kiu ne estas analizita tuj, sed kiam oportuna momento. De la atendovico, la peto estas sendita al la Linux Crypto API por fari ĉifradon. Sed ĉar la Crypto API uzas nesinkronan ekzekutmodelon, ĉifrado ankaŭ ne estas farita tuj, sed preterpasante alian voston. Post kiam ĉifrado estas kompleta, dm-crypt povas provi ordigi pritraktatajn skribpetojn uzante serĉarbon ruĝa-nigra. Ĉe la fino, aparta kernfadeno denove, kun certa prokrasto, reprenas la akumuligitajn I/O-petojn kaj sendas ilin al la blokaparata stako.

Cloudflare preparis diakilojn kiuj draste akcelas diskon ĉifradon en Linukso

Dum legado, dm-crypt unue aldonas peton al la vico "kcryptd_io" por ricevi datumojn de la disko. Post iom da tempo, la datumoj fariĝas disponeblaj kaj estas metitaj en la vico "kcryptd" por malĉifri.
Kcryptd sendas peton al la Linux Crypto API, kiu malĉifras la informojn nesinkrone. Petoj ne ĉiam trairas ĉiujn atendovicojn, sed en la plej malbona kazo, skribpeto finiĝas en vostoj ĝis 4 fojojn, kaj legopeto ĝis 3 fojojn. Ĉiu sukceso al la atendovico kaŭzas prokrastojn, kiuj estas la ŝlosila kialo de la signifa malkresko en dm-crypt-agado.

La uzo de vostoj estas pro la bezono labori en kondiĉoj kie okazas interrompoj. En 2005, kiam la nuna vic-bazita funkcia modelo de dm-crypt estis efektivigita, la Crypto API ankoraŭ ne estis nesinkrona. Post kiam la Crypto API estis translokigita al nesinkrona ekzekutmodelo, esence duobla protekto komencis esti uzata. Vicoj ankaŭ estis lanĉitaj por ŝpari konsumon de la kernstako, sed post ĝia pliiĝo en 2014, ĉi tiuj optimumigoj perdis sian gravecon. Kroma atendovico "kcryptd_io" estis lanĉita por venki la proplempunkton rezultantan en atendado de memorasigno kiam granda nombro da petoj alvenas. En 2015, kroma ordigfazo estis lanĉita, ĉar ĉifrapetoj sur multiprocesorsistemoj povus esti kompletigitaj sen ordo (anstataŭe de sinsekva aliro al la disko, aliro estis aranĝita en hazarda sinsekvo, kaj la CFQ-planisto ne funkciis efike). Nuntempe, uzante SSD-diskojn, ordigo perdis sian signifon, kaj la CFQ-planilo ne plu estas uzata en la kerno.

Konsiderante, ke modernaj diskoj fariĝis pli rapidaj kaj inteligentaj, la sistemo de distribuo de rimedoj en la Linukso-kerno estis reviziita kaj iuj subsistemoj estis restrukturitaj, inĝenieroj de Cloudflare. aldonis dm-crypt havas novan operacian reĝimon, kiu forigas la uzon de nenecesaj atendovicoj kaj nesinkronaj vokoj. La reĝimo estas ebligita per aparta flago "force_inline" kaj alportas dm-crypt al la formo de simpla prokurilo, kiu ĉifras kaj malĉifras envenantajn petojn. Interago kun la Crypto API estis optimumigita per eksplicite elektante ĉifradajn algoritmojn, kiuj funkcias en sinkrona reĝimo kaj ne uzas petajn atendovicojn. Por labori sinkrone kun la Crypto API ekzistis proponis modulo kiu ebligas al vi uzi FPU/AES-NI por akcelo kaj rekte plusendas ĉifradajn kaj malĉifritajn petojn.

Rezulte, dum testado de RAM-disko, eblis pli ol duobligi la rendimenton de dm-crypt - rendimento pliiĝis de 294 MB/s (2 x 147 MB/s) al 640 MB/s, kio estas tre proksima al la agado de nuda ĉifrado (696 MB/s).

Cloudflare preparis diakilojn kiuj draste akcelas diskon ĉifradon en Linukso

Cloudflare preparis diakilojn kiuj draste akcelas diskon ĉifradon en Linukso

Cloudflare preparis diakilojn kiuj draste akcelas diskon ĉifradon en Linukso

Dum testado de ŝarĝo sur realaj serviloj, la nova efektivigo montris efikecon tre proksima al la agordo funkcianta sen ĉifrado, kaj ebligi ĉifradon sur serviloj kun Cloudflare-kaŝmemoro havis neniun efikon al respondrapideco. Estonte, Cloudflare planas translokigi la preparitajn diakilojn al la ĉefa Linukso-kerno, sed antaŭ tio ili devos esti reverkitaj, ĉar ili estas optimumigitaj por specifa ŝarĝo kaj ne kovras ĉiujn aplikajn kampojn, ekzemple ĉifradon en malalta. -potencaj enigitaj aparatoj.

Cloudflare preparis diakilojn kiuj draste akcelas diskon ĉifradon en Linukso

fonto: opennet.ru

Aldoni komenton