Cloudflare şirkətinin tərtibatçıları Linux kernelində disk şifrələməsinin performansını optimallaşdırmaq üzrə iş aparıldığını bildirir. Nəticədə, hazırlandı sistem üçün və Crypto API, sintetik testdə oxuma və yazma üçün tutumun iki dəfədən çox artırılmasına və gecikmələrin də iki dəfə azaldılmasına imkan verən. Reallıqda test edildikdə, şifrələmə xərclərini demək olar ki, məlumatların şifrələnməsi olmadan disk işlədikdə görülən səviyyəyə endirmək mümkün oldu.
Cloudflare, CDN şəbəkəsində məzmunu öncədən saxlamaq üçün istifadə olunan yaddaşda məlumatları şifrələmək üçün dm-crypt-dən istifadə edir. Dm-crypt blok cihazı səviyyəsində işləyir və yazma üçün girişi şifrələyir və oxuma üçün girişi deşifrə edir, blok cihazı ilə fayl sistemi sürücüsü arasında qat qalxan kimi fəaliyyət göstərir.
Dm-crypt-in performansını qiymətləndirmək üçün şifrələnmiş və şifrələnməmiş bölmələrlə RAM diskində performans sürətini ölçmək məqsədilə test edilmişdir, disk performansının fluktuasiyalarını istisna etmək və kodun performansına fokuslanmaq üçün RAM-da yerləşdirilmişdir. Şifrələnməmiş bölmələr üçün oxuma və yazma performansı 1126 MB/s səviyyəsində saxlanıldı, amma şifrələmə aktiv edildikdə sürət azaldı 7 dəfə və 147 MB/s oldu.
Əvvəlcə kernel kripto sistemində qeyri-effektiv algoritmların istifadəsi şübhəsi yarandı. Ancaq testlərdə, „cryptsetup benchmark“ icra edildikdə, əldə olunan nəticədən daha çox sürətə sahib olan ən sürətli aes-xts 256 şifrələmə açarını istifadə edirdi. Dm-crypt-in performansını tənzimləmə üçün dm-crypt flaqaları ilə eksperimentlər nəticə vermədi: „—perf-same_cpu_crypt“ flaqını istifadə etdikdə performans 136 MB/s-dən az oldu, „—perf-submit_from_crypt_cpus“ flaqını göstərdikdə isə yalnız 166 MB/s-yə yüksəldi.
İş prinsipi daha dərindən araşdırıldıqda, dm-crypt-in göründüyü qədər sadə olmadığı ortaya çıxdı — fayl sistemi sürücüsündən yazma sorğusu gəldikdə, dm-crypt bunu dərhal emal etmir, „kcryptd“ sırasına qoyur, bu isə dərhal işlənmir və sərfəli an gözləyir. Sıradan sorğu Linux Crypto API-yə şifrələmə icra etmək üçün göndərilir. Lakin, Crypto API asinxron icra modeli istifadə etdiyindən, şifrələmə də dərhal baş vermir, bununla yanaşı başqa bir sıraya keçir. Şifrələmə tamamlandıqdan sonra dm-crypt gözləyən yazma sorğularını təsnif etməyə cəhddir, axtarış ağacı istifadə edərək . Sonda, core'nin sonunda belirli bir gecikmeyle birikmiş girdi/çıktı isteklerini alır ve bunları blok cihazı yığınına gönderir.
Okuma sırasında dm-crypt, depolama aygıtından veri istemek için önce "kcryptd_io" kuyruğuna bir istek ekler. Bir süre sonra veriler erişilebilir hale gelir ve "kcryptd" sırasına şifre çözme için yerleştirilir.
Kcryptd, bilgileri asenkron modda şifre çözen Linux Crypto API'ye bir istek gönderir. İstekler her zaman tüm kuyruklardan geçmez, ancak en kötü senaryoda yazma isteği 4 defaya kadar kuyruklarda kalabilir, okuma isteği ise 3 defaya kadar. Her kuyruktaki giriş, gecikmelere yol açar ve bu, dm-crypt'in performansında önemli düşüşlerin temel sebebidir.
Kuyrukların kullanımı, kesintilerin ortaya çıkması durumunda çalışmanın gerekliliği ile belirlenmiştir. 2005 yılında, dm-crypt'in mevcut kuyruk tabanlı çalışma modeli uygulandığında, Crypto API henüz asenkron değildi. Crypto API'nin asenkron çalışmaya geçirilmesinden sonra, esasen çift koruma uygulaması başladı. Ekonomik bellek tüketimi sağlamak için kuyruklar da tanıtıldı, ancak 2014 yılında çekirdek yığınının arttırılmasının ardından bu optimizasyonlar geçerliliğini yitirdi. "Kcryptd_io" adlı ek bir kuyruk, büyük sayıda isteğin geldiğinde bellek tahsisi bekletme dar boğazını aşmak için tanıtıldı. 2015 yılında ayrıca, çok çekirdekli sistemlerde şifreleme isteklerinin gönderim sırasını korumadan sonlanabilmesi nedeniyle sıralama aşaması eklendi (disk erişimi ardışık yerine rastgele gerçekleştirildi ve CFQ planlayıcısı etkin çalışmadı). Şu anda SSD depolayıcılar kullanıldığında sıralamanın önemi kalmadı ve CFQ planlayıcısı artık çekirdekte kullanılmıyor.
Modern depolayıcıların daha hızlı ve daha akıllı hale gelmesi göz önüne alındığında, Linux çekirdeğindeki kaynak dağıtım sistemi yeniden gözden geçirildi ve bazı alt sistemler yeniden tasarlandı, Cloudflare mühendisleri dm-crypt'e gereksiz kuyruklar ve asenkron çağrılardan arındırılmış yeni bir çalışma modu. Bu mod, ayrı bir "force_inline" bayrağı ile etkinleştirilir ve dm-crypt'i gelen istekleri şifreleyen ve şifre çözen basit bir proxy şekline getirir. Crypto API ile etkileşim, kuyruk kullanmayan ve senkron modda çalışan şifreleme algoritmalarının açık seçimi ile optimize edilmiştir. Crypto API ile senkron çalışmak için FPU/AES-NI kullanarak hızlanmayı mümkün kılan ve doğrudan şifreleme ve şifre çözme isteklerini yönlendiren bir modül bulunmaktadır.
Nəticədə RAM diskinin test edilməsi zamanı dm-crypt performansını iki dəfə artırmaq mümkün oldu — performans 294 MB/s (2 x 147 MB/s) -dan 640 MB/s-ə yüksəldi, bu, saf şifrləmə performansına (696 MB/s) çox yaxındır.
Real serverlərdə yük testi zamanı yeni implementasiya şifrləməsiz konfiqurasiya ilə çox yaxın performans göstərdi, Cloudflare ilə önbellek olan serverlərdə şifrləmənin aktivləşdirilməsi cavab sürətinə heç bir təsir etmədi. Gələcəkdə Cloudflare hazırlanan yamaları Linux-nun əsas nüvəsinə göndərməyi planlaşdırır, lakin bunlar müəyyən yük üçün optimallaşdırıldığına görə yenidən işlənməsi lazım olacaq və bütün tətbiq sahələrini əhatə etmir, misal üçün, az güclü inteqrasiyalı cihazlarda şifrləmə.
Mənbə: opennet.ru
