Pembangun dari Cloudflare
Cloudflare menggunakan dm-crypt untuk menyulitkan data pada peranti storan yang digunakan untuk cache kandungan pada CDN. Dm-crypt beroperasi pada tahap peranti blok dan menyulitkan permintaan I/O tulis dan menyahsulit permintaan baca, bertindak sebagai lapisan antara peranti blok dan pemacu sistem fail.
Untuk menilai prestasi dm-crypt menggunakan pakej
Pada mulanya, syak wasangka timbul tentang penggunaan algoritma yang tidak cekap dalam sistem kripto kernel. Tetapi ujian menggunakan algoritma terpantas, aes-xts, dengan 256 kunci penyulitan, yang prestasinya semasa menjalankan "penanda aras cryptsetup" adalah lebih daripada dua kali lebih tinggi daripada hasil yang diperoleh semasa menguji cakera RAM. Percubaan dengan bendera dm-crypt untuk penalaan prestasi tidak membuahkan hasil: apabila menggunakan bendera "--perf-same_cpu_crypt", prestasi malah menurun kepada 136 MB/s dan apabila menyatakan bendera "--perf-submit_from_crypt_cpus" ia meningkat sahaja kepada 166 MB/s.
Analisis yang lebih mendalam tentang logik operasi menunjukkan bahawa dm-crypt tidak semudah yang kelihatan - apabila permintaan tulis tiba dari pemacu FS, dm-crypt tidak memprosesnya dengan segera, tetapi meletakkannya dalam baris gilir "kcryptd", yang tidak dihuraikan serta-merta, tetapi apabila masa yang sesuai. Dari baris gilir, permintaan dihantar ke Linux Crypto API untuk melakukan penyulitan. Tetapi oleh kerana API Crypto menggunakan model pelaksanaan tak segerak, penyulitan juga tidak dilakukan serta-merta, tetapi memintas baris gilir lain. Selepas penyulitan selesai, dm-crypt mungkin cuba mengisih permintaan tulis yang belum selesai menggunakan pepohon carian
Apabila membaca, dm-crypt terlebih dahulu menambahkan permintaan pada baris gilir "kcryptd_io" untuk menerima data daripada pemacu. Selepas beberapa lama, data menjadi tersedia dan diletakkan dalam baris gilir "kcryptd" untuk penyahsulitan.
Kcryptd menghantar permintaan kepada Linux Crypto API, yang menyahsulit maklumat secara tidak segerak. Permintaan tidak selalu melalui semua baris gilir, tetapi dalam senario terburuk, permintaan tulis berakhir dalam baris gilir sehingga 4 kali dan permintaan baca sehingga 3 kali. Setiap pukulan pada baris gilir menyebabkan kelewatan, yang merupakan sebab utama penurunan ketara dalam prestasi dm-crypt.
Penggunaan baris gilir adalah disebabkan oleh keperluan untuk bekerja dalam keadaan di mana gangguan berlaku. Pada tahun 2005, apabila model operasi berasaskan baris gilir semasa dm-crypt dilaksanakan, API Crypto belum lagi tak segerak. Selepas Crypto API dipindahkan ke model pelaksanaan tak segerak, pada asasnya perlindungan berganda mula digunakan. Barisan gilir juga diperkenalkan untuk menjimatkan penggunaan tindanan kernel, tetapi selepas peningkatannya pada 2014, pengoptimuman ini kehilangan kaitannya. Barisan gilir tambahan "kcryptd_io" telah diperkenalkan untuk mengatasi kesesakan yang mengakibatkan menunggu peruntukan memori apabila sejumlah besar permintaan tiba. Pada tahun 2015, fasa pengisihan tambahan telah diperkenalkan, memandangkan permintaan penyulitan pada sistem berbilang pemproses boleh diselesaikan dengan tidak teratur (daripada akses berurutan kepada cakera, akses telah dijalankan dalam susunan rawak, dan penjadual CFQ tidak berfungsi dengan cekap). Pada masa ini, apabila menggunakan pemacu SSD, pengisihan telah kehilangan maknanya, dan penjadual CFQ tidak lagi digunakan dalam kernel.
Memandangkan pemacu moden telah menjadi lebih pantas dan lebih pintar, sistem pengagihan sumber dalam kernel Linux telah disemak semula dan beberapa subsistem telah direka bentuk semula, jurutera Cloudflare
Akibatnya, apabila menguji cakera RAM, adalah mungkin untuk lebih daripada dua kali ganda prestasi dm-crypt - prestasi meningkat daripada 294 MB/s (2 x 147 MB/s) kepada 640 MB/s, yang sangat hampir dengan prestasi penyulitan kosong (696 MB / s).
Apabila menguji beban pada pelayan sebenar, pelaksanaan baharu menunjukkan prestasi yang sangat hampir dengan konfigurasi yang dijalankan tanpa penyulitan, dan mendayakan penyulitan pada pelayan dengan cache Cloudflare tidak mempunyai kesan ke atas kelajuan tindak balas. Pada masa hadapan, Cloudflare merancang untuk memindahkan patch yang disediakan ke kernel Linux utama, tetapi sebelum itu ia perlu diolah semula, kerana ia dioptimumkan untuk beban tertentu dan tidak meliputi semua bidang aplikasi, contohnya, penyulitan pada rendah. -peranti terbenam kuasa.
Sumber: opennet.ru