Nadav Amit who pekerjaan yang sebelumnya mempelopori pengurangan flush TLB yang tidak perlu, flush TLB bersamaan, dan pengoptimalan tingkat rendah lainnya selama bertahun-tahun. Pekerjaan terbaru sekarang adalah flush TLB”santai”sebagai peningkatan kinerja tingkat rendah lainnya.
Nadav Amit dari VMware telah mengambil pekerjaan pada flush TLB”santai”ketika izin ditambahkan sebagai pekerjaan lanjutan untuk pekerjaan sebelumnya seputar menghindari flush TLB yang tidak perlu. Dia menjelaskan:
Patch-set ini memungkinkan userfaultfd untuk memetakan halaman sebagai writeable langsung pada write-(un)protect ioctl, sambil mengatasi perilaku yang tidak diinginkan yang terjadi ketika seseorang menggunakan userfaultfd write-unprotect atau mprotect untuk menambahkan izin. Itu juga melakukan beberapa pembersihan dan optimasi mikro di sepanjang jalan.
Perubahan utama yang dilakukan di set-tambalan-khusus x86, saat ini-adalah pengenalan flush TLB”santai”ketika izin ditambahkan. Setelah TLB flush”santai”, generasi TLB mm dimajukan dan TLB lokal diflush, tetapi tidak ada penembakan TLB yang terjadi. Jika kesalahan halaman palsu terjadi dan generasi lokal TLB ditemukan tidak sinkron dengan generasi mm, pembersihan TLB penuh dilakukan pada inti kesalahan untuk mencegah kesalahan halaman palsu lebih lanjut.
Sampai batas tertentu”flush santai”mirip dengan perubahan yang diusulkan beberapa waktu lalu untuk pemetaan kernel. Namun, ia tidak memiliki interaksi yang rumit dengan penangan NMI.
Pembilasan TLB yang santai dirangkum lebih lanjut dalam pesan tempelnya:
Perkenalkan konsep ketat dan flushes TLB santai. Pembilasan TLB santai adalah pembilasan TLB yang dapat dilewati tetapi dapat menyebabkan penurunan kinerja. Ini tergantung pada kode lengkung (di tambalan berikutnya) untuk menangani flush santai dengan benar. Salah satu perilaku tersebut adalah membilas TLB lokal dengan penuh semangat dan TLB jarak jauh dengan malas.
Eksperimen kinerja terlihat cukup positif dengan penghematan hingga 44% yang diukur dalam siklus mprotect(PROT_READ|PROT_WRITE) atau CPU sekitar 6% lebih sedikit siklus hanya dengan mprotect(PROT_READ).
Detail selengkapnya di seri patch LKML ini.