Cloudflare vydal záplaty, které dramaticky zrychlují šifrování disku. Linux

Vývojáři z Cloudflare řekl o práci prováděné na optimalizaci výkonu šifrování disku v jádře LinuxV důsledku toho byly připraveny následující: záplaty pro subsystém dm-krypta a rozhraní Crypto API, které v syntetickém testu více než zdvojnásobilo propustnost čtení a zápisu a snížilo latenci na polovinu. Při testování na reálném hardwaru se šifrovací režie snížila téměř na úroveň pozorovanou při přístupu k disku bez šifrování.

Cloudflare používá dm-crypt k šifrování dat na úložných zařízeních používaných k ukládání obsahu do mezipaměti v jeho síti CDN. Dm-crypt pracuje na úrovni blokových zařízení, šifruje požadavky na zápis I/O a dešifruje požadavky na čtení, čímž funguje jako vrstva mezi blokovým zařízením a ovladačem souborového systému.

Cloudflare vydal záplaty, které dramaticky zrychlují šifrování disku. Linux

Vyhodnocení výkonu dm-crypt pomocí balíčku Flexibilní tester I/O Byl měřen výkon šifrovaných a nešifrovaných oddílů na RAM disku. Disk byl umístěn v RAM paměti, aby se eliminovaly výkyvy výkonu disku a zaměřilo se na výkon kódu. U nešifrovaných oddílů zůstal výkon čtení a zápisu na 1126 MB/s, ale rychlost se snížila, když bylo šifrování povoleno. 7 v čase a činila 147 MB/s.

Zpočátku existovaly obavy z použití neefektivních algoritmů v kryptosystému jádra. Testy však používaly nejrychlejší algoritmus, aes-xts, s 256klíčovým šifrovacím klíčem, jehož výkon při spuštění „cryptsetup benchmarku“ byl více než dvojnásobný oproti testu RAM disku. Experimenty s příznaky ladění výkonu dm-crypt byly neúčinné: s příznakem „--perf-same_cpu_crypt“ se výkon ve skutečnosti snížil na 136 MB/s, zatímco s příznakem „--perf-submit_from_crypt_cpus“ se zvýšil pouze na 166 MB/s.

Hlubší analýza logiky odhalila, že dm-crypt není tak jednoduchý, jak se zdá. Když z ovladače souborového systému přijde požadavek na zápis, dm-crypt jej nezpracuje okamžitě, ale umístí jej do fronty „kcryptd“, která není analyzována okamžitě, ale až v pravý čas. Odtud je požadavek odeslán do Linux Rozhraní Crypto API provádí šifrování. Protože však Crypto API používá asynchronní model provádění, šifrování se neprovádí okamžitě, ale obchází jinou frontu. Po dokončení šifrování se dm-crypt může pokusit seřadit čekající požadavky na zápis pomocí vyhledávacího stromu. červená černáNakonec samostatné vlákno jádra, opět s určitým zpožděním, sebere nahromaděné I/O požadavky a odešle je do zásobníku blokových zařízení.

Cloudflare vydal záplaty, které dramaticky zrychlují šifrování disku. Linux

Při čtení dm-crypt nejprve přidá do fronty „kcryptd_io“ požadavek na načtení dat z disku. Po určité době jsou data k dispozici a jsou umístěna do fronty „kcryptd“ k dešifrování.
Kcryptd odesílá požadavek na Linux Kryptografická API, která asynchronně dešifrují data. Požadavky ne vždy procházejí všemi frontami, ale v nejhorším případě se požadavek na zápis zasekne ve frontách až čtyřikrát a požadavek na čtení až třikrát. Každý zásah do fronty představuje latenci, která je hlavním důvodem významného snížení výkonu dm-crypt.

Použití front je dáno potřebou pracovat v podmínkách náchylných k přerušením. V roce 2005, kdy byl implementován současný model dm-crypt založený na frontách, nebylo Crypto API ještě asynchronní. Po převedení Crypto API na asynchronní model provádění byla v podstatě implementována dvojitá ochrana. Fronty byly také zavedeny za účelem snížení spotřeby zásobníku jádra, ale po jeho rozšíření v roce 2014 se tyto optimalizace staly irelevantní. Byla zavedena další fronta „kcryptd_io“, aby se překonal úzký profil, který vedl k čekání na alokaci paměti při přijetí velkého počtu požadavků. V roce 2015 byla navíc zavedena fáze třídění, protože požadavky na šifrování na víceprocesorových systémech mohly být dokončeny mimo pořadí (místo sekvenčního přístupu k disku byl přístup prováděn náhodně a plánovač CFQ byl neúčinný). V současné době již třídění není užitečné při použití SSD disků a plánovač CFQ se v jádře již nepoužívá.

S tím, jak se moderní úložná zařízení stávají rychlejšími a chytřejšími, systém alokace zdrojů v jádře Linux byl přezkoumán a některé subsystémy byly přepracovány, inženýři Cloudflare přidal dm-crypt má nový provozní režim, který eliminuje používání zbytečných front a asynchronních volání. Tento režim je povolen samostatným příznakem „force_inline“ a transformuje dm-crypt na jednoduchý proxy, který šifruje a dešifruje příchozí požadavky. Interakce s Crypto API byla optimalizována explicitním výběrem šifrovacích algoritmů, které fungují v synchronním režimu a nepoužívají fronty požadavků. Synchronního provozu s Crypto API bylo dosaženo prostřednictvím navržený Modul, který umožňuje použití FPU/AES-NI pro akceleraci a přímo přeposílá požadavky na šifrování a dešifrování.

Díky tomu se nám podařilo více než zdvojnásobit výkon dm-crypt při testování RAM disku – výkon se zvýšil z 294 MB/s (2 x 147 MB/s) na 640 MB/s, což se velmi blíží výkonu holého šifrování (696 MB/s).

Cloudflare vydal záplaty, které dramaticky zrychlují šifrování disku. Linux

Cloudflare vydal záplaty, které dramaticky zrychlují šifrování disku. Linux

Cloudflare vydal záplaty, které dramaticky zrychlují šifrování disku. Linux

Během zátěžového testování na reálných serverech nová implementace prokázala výkon velmi blízký konfiguraci běžící bez šifrování a povolení šifrování na serverech s mezipamětí Cloudflare nemělo žádný vliv na dobu odezvy. Cloudflare plánuje v budoucnu integrovat tyto záplaty do jádra. Linux, ale předtím je bude nutné přepracovat, protože jsou optimalizovány pro specifickou pracovní zátěž a nepokrývají všechny oblasti použití, například šifrování na nízkopříkonových vestavěných zařízeních.

Cloudflare vydal záplaty, které dramaticky zrychlují šifrování disku. Linux

Zdroj: opennet.ru

Kupte si spolehlivý hosting pro stránky s DDoS ochranou, VPS VDS servery 🔥 Kupte si spolehlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster