Cloudflare telah menyediakan patch yang mempercepatkan penyulitan cakera secara mendadak dalam Linux

Pembangun dari Cloudflare diberitahu tentang menjalankan kerja untuk mengoptimumkan prestasi penyulitan cakera dalam kernel Linux. Hasilnya, mereka telah bersedia tompok untuk subsistem dm-crypt dan Crypto API, yang membolehkan lebih daripada menggandakan daya baca dan tulis dalam ujian sintetik, serta mengurangkan separuh kependaman. Apabila diuji pada perkakasan sebenar, overhed penyulitan dikurangkan kepada hampir tahap yang diperhatikan apabila bekerja dengan cakera tanpa penyulitan data.

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.

Cloudflare telah menyediakan patch yang mempercepatkan penyulitan cakera secara mendadak dalam Linux

Untuk menilai prestasi dm-crypt menggunakan pakej Penguji I/O yang fleksibel Kami mengukur kelajuan bekerja dengan partition yang disulitkan dan tidak disulitkan pada cakera RAM yang terletak dalam RAM untuk menghapuskan turun naik dalam prestasi cakera dan menumpukan pada prestasi kod. Untuk partition yang tidak disulitkan, prestasi baca dan tulis kekal pada 1126 MB/s, tetapi kelajuan berkurangan apabila penyulitan didayakan 7 dalam masa dan berjumlah 147 MB/s.

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 merah hitam. Pada akhirnya, benang kernel yang berasingan sekali lagi, dengan kelewatan tertentu, mengambil permintaan I/O terkumpul dan menghantarnya ke timbunan peranti blok.

Cloudflare telah menyediakan patch yang mempercepatkan penyulitan cakera secara mendadak dalam Linux

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 tambah dm-crypt mempunyai mod operasi baharu yang menghapuskan penggunaan baris gilir yang tidak perlu dan panggilan tak segerak. Mod ini didayakan oleh bendera berasingan "force_inline" dan membawa dm-crypt kepada bentuk proksi mudah yang menyulitkan dan menyahsulit permintaan masuk. Interaksi dengan API Kripto telah dioptimumkan dengan memilih algoritma penyulitan secara eksplisit yang beroperasi dalam mod segerak dan tidak menggunakan baris gilir permintaan. Untuk bekerja secara serentak dengan Crypto API ada dicadangkan modul yang membolehkan anda menggunakan FPU/AES-NI untuk pecutan dan memajukan terus permintaan penyulitan dan penyahsulitan.

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).

Cloudflare telah menyediakan patch yang mempercepatkan penyulitan cakera secara mendadak dalam Linux

Cloudflare telah menyediakan patch yang mempercepatkan penyulitan cakera secara mendadak dalam Linux

Cloudflare telah menyediakan patch yang mempercepatkan penyulitan cakera secara mendadak dalam Linux

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.

Cloudflare telah menyediakan patch yang mempercepatkan penyulitan cakera secara mendadak dalam Linux

Sumber: opennet.ru

Tambah komen