Cloudflare telah menyiapkan patch yang secara dramatis mempercepat enkripsi disk di Linux

Pengembang dari Cloudflare diberitahu tentang melakukan pekerjaan untuk mengoptimalkan kinerja enkripsi disk di kernel Linux. Hasilnya, mereka bersiap tambalan untuk subsistem dm-crypt dan Crypto API, yang memungkinkan throughput baca dan tulis lebih dari dua kali lipat dalam pengujian sintetis, serta mengurangi separuh latensi. Saat pengujian pada perangkat keras nyata, overhead enkripsi dikurangi hingga hampir mencapai tingkat yang diamati saat bekerja dengan disk tanpa enkripsi data.

Cloudflare menggunakan dm-crypt untuk mengenkripsi data pada perangkat penyimpanan yang digunakan untuk menyimpan konten dalam cache di CDN. Dm-crypt beroperasi pada tingkat perangkat blok dan mengenkripsi permintaan tulis I/O dan mendekripsi permintaan baca, bertindak sebagai lapisan antara perangkat blok dan driver sistem file.

Cloudflare telah menyiapkan patch yang secara dramatis mempercepat enkripsi disk di Linux

Untuk mengevaluasi kinerja dm-crypt menggunakan paket Penguji I/O yang fleksibel Kami mengukur kecepatan bekerja dengan partisi terenkripsi dan tidak terenkripsi pada disk RAM yang terletak di RAM untuk menghilangkan fluktuasi kinerja disk dan fokus pada kinerja kode. Untuk partisi yang tidak terenkripsi, kinerja baca dan tulis tetap pada 1126 MB/s, namun kecepatannya menurun saat enkripsi diaktifkan 7 dalam waktu dan sebesar 147 MB/s.

Pada awalnya, muncul kecurigaan tentang penggunaan algoritma yang tidak efisien dalam kriptosistem kernel. Namun pengujian tersebut menggunakan algoritma tercepat, aes-xts, dengan 256 kunci enkripsi, yang kinerjanya saat menjalankan “cryptsetup benchmark” dua kali lebih tinggi dari hasil yang diperoleh saat menguji disk RAM. Eksperimen dengan flag dm-crypt untuk penyetelan performa tidak membuahkan hasil: saat menggunakan flag “--perf-same_cpu_crypt”, performa bahkan menurun hingga 136 MB/s, dan saat menentukan flag “--perf-submit_from_crypt_cpus” performa hanya meningkat hingga 166 MB/dtk.

Analisis lebih dalam terhadap logika operasi menunjukkan bahwa dm-crypt tidak sesederhana kelihatannya - ketika permintaan tulis datang dari driver FS, dm-crypt tidak segera memprosesnya, tetapi menempatkannya di antrian “kcryptd”, yang mana tidak diuraikan segera, tetapi pada saat yang tepat. Dari antrian, permintaan dikirim ke Linux Crypto API untuk melakukan enkripsi. Namun karena Crypto API menggunakan model eksekusi asinkron, enkripsi juga tidak langsung dilakukan, melainkan melewati antrean lain. Setelah enkripsi selesai, dm-crypt mungkin mencoba mengurutkan permintaan tulis yang tertunda menggunakan pohon pencarian merah hitam. Pada akhirnya, thread kernel terpisah lagi, dengan penundaan tertentu, mengambil akumulasi permintaan I/O dan mengirimkannya ke tumpukan perangkat blok.

Cloudflare telah menyiapkan patch yang secara dramatis mempercepat enkripsi disk di Linux

Saat membaca, dm-crypt terlebih dahulu menambahkan permintaan ke antrian “kcryptd_io” untuk menerima data dari drive. Setelah beberapa waktu, data tersedia dan ditempatkan di antrian “kcryptd” untuk dekripsi.
Kcryptd mengirimkan permintaan ke Linux Crypto API, yang mendekripsi informasi secara asinkron. Permintaan tidak selalu melewati semua antrian, namun dalam skenario terburuk, permintaan tulis berakhir di antrian hingga 4 kali, dan permintaan baca hingga 3 kali. Setiap antrian menyebabkan penundaan, yang merupakan alasan utama penurunan kinerja dm-crypt secara signifikan.

Penggunaan antrian disebabkan karena adanya kebutuhan untuk bekerja pada kondisi dimana terjadi gangguan. Pada tahun 2005, ketika model operasi berbasis antrean dm-crypt saat ini diterapkan, Crypto API belum sinkron. Setelah Crypto API dipindahkan ke model eksekusi asinkron, perlindungan ganda mulai digunakan. Antrean juga diperkenalkan untuk menghemat konsumsi tumpukan kernel, tetapi setelah peningkatannya pada tahun 2014, pengoptimalan ini kehilangan relevansinya. Antrean tambahan "kcryptd_io" diperkenalkan untuk mengatasi kemacetan yang mengakibatkan menunggu alokasi memori ketika sejumlah besar permintaan tiba. Pada tahun 2015, fase penyortiran tambahan diperkenalkan, karena permintaan enkripsi pada sistem multiprosesor dapat diselesaikan secara tidak berurutan (alih-alih akses berurutan ke disk, akses dilakukan dalam urutan acak, dan penjadwal CFQ tidak bekerja secara efisien). Saat ini, saat menggunakan drive SSD, penyortiran tidak lagi relevan, dan penjadwal CFQ tidak lagi digunakan di kernel.

Mengingat drive modern menjadi lebih cepat dan cerdas, sistem distribusi sumber daya di kernel Linux telah direvisi dan beberapa subsistem telah didesain ulang, para insinyur Cloudflare ditambahkan dm-crypt memiliki mode operasi baru yang menghilangkan penggunaan antrian yang tidak perlu dan panggilan asinkron. Mode ini diaktifkan oleh flag terpisah “force_inline” dan membawa dm-crypt ke bentuk proxy sederhana yang mengenkripsi dan mendekripsi permintaan masuk. Interaksi dengan Crypto API telah dioptimalkan dengan secara eksplisit memilih algoritma enkripsi yang beroperasi dalam mode sinkron dan tidak menggunakan antrian permintaan. Untuk bekerja secara sinkron dengan Crypto API ada diajukan modul yang memungkinkan Anda menggunakan FPU/AES-NI untuk akselerasi dan meneruskan permintaan enkripsi dan dekripsi secara langsung.

Hasilnya, saat menguji disk RAM, kinerja dm-crypt dapat ditingkatkan lebih dari dua kali lipat - kinerja meningkat dari 294 MB/s (2 x 147 MB/s) menjadi 640 MB/s, yang sangat mendekati kinerja enkripsi telanjang (696 MB/s).

Cloudflare telah menyiapkan patch yang secara dramatis mempercepat enkripsi disk di Linux

Cloudflare telah menyiapkan patch yang secara dramatis mempercepat enkripsi disk di Linux

Cloudflare telah menyiapkan patch yang secara dramatis mempercepat enkripsi disk di Linux

Saat menguji beban pada server sebenarnya, implementasi baru menunjukkan kinerja yang sangat mendekati konfigurasi yang berjalan tanpa enkripsi, dan mengaktifkan enkripsi pada server dengan cache Cloudflare tidak berpengaruh pada kecepatan respons. Di masa depan, Cloudflare berencana untuk mentransfer patch yang telah disiapkan ke kernel Linux utama, tetapi sebelum itu patch tersebut perlu dikerjakan ulang, karena patch tersebut dioptimalkan untuk beban tertentu dan tidak mencakup semua area aplikasi, misalnya enkripsi pada kecepatan rendah. -daya perangkat yang tertanam.

Cloudflare telah menyiapkan patch yang secara dramatis mempercepat enkripsi disk di Linux

Sumber: opennet.ru

Tambah komentar