Kembali pada bulan Juli Peter Zijlstra dari Intel mengusulkan "Pelacakan Kedalaman Panggilan" sebagai pendekatan mitigasi untuk menangani Retbleed dan menghindari "pertunjukan horor kinerja" dari penggunaan Spekulasi Terbatas Cabang Tidak Langsung (IBRS). Hari ini adalah versi terbaru dari kode Pelacakan Kedalaman Panggilan dan hasil benchmark kinerja terlihat sangat menjanjikan untuk mengurangi rasa sakit akibat dampak kinerja mitigasi CPU Retbleed.
Adapun apa yang sedang dikerjakan Peter dengan kode Pelacakan Kedalaman Panggilan ini, dia menjelaskan dengan seri tambalan v2:
Versi ini sangat berbeda dari yang terakhir karena tidak lagi menggunakan panggilan eksternal yang dialokasikan dari ruang modul. Alih-alih, setiap fungsi disejajarkan dengan 16 byte dan mendapat 16 byte (pra-simbol)
lapisan. (Padding ini juga berguna untuk hal lain, seperti pekerjaan kCFI/FineIBT.)
Sebelum tambalan ini, penyelarasan fungsi pada dasarnya tidak ada, karena setiap pengambilan instruksi untuk instruksi pertama dari suatu fungsi akan (rata-rata) setengah jendela pengambilan diisi dengan apa pun yang datang sebelumnya. Dengan mendorong penyelarasan hingga 16 byte, ini meningkatkan masalah untuk chip yang kebetulan memiliki ukuran jendela i-fetch 16 byte (Intel) sementara tidak memperburuk masalah untuk chip yang memiliki jendela i-fetch 32 byte yang lebih besar (AMD Zen). Bahkan, ini meningkatkan kasus terburuk untuk Zen dari 31 byte sampah menjadi 16 byte sampah.
Karena itu, banyak tambalan pertama dari seri ini memperbaiki banyak keanehan penyelarasan.
Perbedaan besar kedua adalah pengenalan struct pcpu_hot. Karena kompiler berhasil menempatkan dua variabel DEFINE_PER_CPU() yang berdekatan (dalam kode) dalam cacheline acak (benar-benar gratis untuk melakukannya), pengenalan variabel per-cpu x86_call_depth terkadang menimbulkan tekanan cache tambahan yang signifikan, sementara di lain waktu akan duduk baik di baris yang sama dengan preempt_count dan tidak muncul sama sekali.
Untuk mengatasi masalah ini; perkenalkan struct pcpu_hot dan kumpulkan sejumlah variabel panas per-cpu dengan cara yang tidak dapat dikacaukan oleh kompiler. Sebagai informasi latar belakang lainnya tentang Pelacakan Kedalaman Panggilan untuk mitigasi Retbleed:
Selain dari perubahan ini; inti dari pelacakan kedalaman masih sama.
- objtool membuat daftar situs panggilan (fungsi).
- untuk setiap panggilan; timpa padding fungsi target dengan thunk akuntansi (jika belum dilakukan) dan sesuaikan situs panggilan untuk menargetkan thunk ini.
- mekanisme pengembalian uang retbleed digunakan untuk pengembalian barang kustom yang mencakup akuntansi pengembalian dan melakukan pengisian RSB bila diperlukan.
Ini memastikan tidak ada kompiler baru yang diperlukan dan menghindari hampir semua overhead untuk mesin yang tidak terpengaruh. Opsi baru ini masih dapat dipilih menggunakan:
"rebleed = barang"
pada baris perintah kernel.
...
Return-Stack-Buffer (RSB) adalah tumpukan 16 dalam yang diisi pada setiap panggilan. Di jalur kembali, spekulasi akan "memunculkan" entri dan menganggapnya sebagai target pengembalian. Setelah RSB kosong, CPU kembali ke prediktor lain, mis. Penyangga Riwayat Cabang, yang dapat disalahgunakan oleh ruang pengguna dan menyesatkan jalur spekulasi (kembali) ke gadget pengungkapan pilihan Anda -- seperti yang dijelaskan dalam makalah rebleed.
Pelacakan kedalaman panggilan dirancang untuk mematahkan jalur spekulasi ini dengan memasukkan panggilan perangkap spekulasi ke RSB setiap kali RSB hampir habis. Dengan cara ini spekulasi terhenti dan tidak pernah jatuh kembali ke prediktor lain.
Asumsinya, stuffing pada return ke-12 sudah cukup untuk mematahkan spekulasi sebelum menyentuh underflow dan fallback ke prediktor lainnya. Pengujian mengkonfirmasi bahwa itu berfungsi. Johannes, salah satu peneliti rebleed, mencoba menyerang pendekatan ini dan menegaskan bahwa itu membawa rasio sinyal terhadap noise ke level bola kristal. Hasil benchmark terlihat sangat menjanjikan:
Semua detail dan patch Call Depth Tracking v2 terbaru untuk kernel Linux melalui utas milis ini.
Itulah berita seputar Mitigasi Pelacakan Kedalaman Panggilan Diperbarui Untuk Linux Dalam Mitigasi yang Lebih Baik Retbleed, semoga bermanfaat. Disadur dari Phoronix.com.