Pengembang dari Cloudflare
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.
Untuk mengevaluasi kinerja dm-crypt menggunakan paket
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
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
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).
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.
Sumber: opennet.ru