Facebook telah mengusulkan mekanisme manajemen memori lempengan baru untuk kernel Linux

Roman Gushchin (Romawi Gushchin) dari Facebook diterbitkan di milis pengembang kernel Linux satu set tambalan dengan implementasi pengontrol alokasi memori baru lempeng (pengontrol memori lempengan). Pengontrol baru ini terkenal karena memindahkan akuntansi lempengan dari tingkat halaman memori ke tingkat objek kernel, yang memungkinkan untuk berbagi halaman lempengan di cgroup yang berbeda, alih-alih mengalokasikan cache lempengan terpisah untuk setiap cgroup.

Pendekatan yang diusulkan memungkinkan untuk meningkatkan efisiensi penggunaan lempengan, mengurangi ukuran memori yang digunakan untuk lempengan sebesar 30-45%, dan secara signifikan mengurangi konsumsi memori kernel secara keseluruhan. Dengan mengurangi jumlah lempengan yang tidak dapat dipindahkan, terdapat juga efek positif dalam mengurangi fragmentasi memori. Pengontrol memori baru secara signifikan menyederhanakan kode untuk menghitung pelat dan tidak memerlukan penggunaan algoritme rumit untuk membuat dan menghapus cache pelat secara dinamis untuk setiap cgroup. Semua cgroup memori dalam implementasi baru menggunakan sekumpulan cache lempengan yang umum, dan masa pakai cache lempengan tidak lagi terikat dengan masa pakai cache yang diinstal melalui cgroup pembatasan pada penggunaan memori.

Penghitungan sumber daya yang lebih akurat yang diterapkan pada pengontrol pelat baru secara teoritis akan memuat lebih banyak CPU, tetapi dalam praktiknya perbedaannya tidak signifikan. Secara khusus, pengontrol pelat baru telah digunakan selama beberapa bulan di server produksi Facebook yang menangani berbagai jenis beban kerja, dan belum ada regresi nyata yang teridentifikasi. Pada saat yang sama, terjadi pengurangan konsumsi memori yang signifikan - pada beberapa host dimungkinkan untuk menghemat hingga 1GB memori, namun indikator ini sangat bergantung pada sifat beban, ukuran total RAM, jumlah CPU. dan fitur bekerja dengan memori. Tes sebelumnya menunjukkan pengurangan konsumsi memori sebesar 650-700 MB (42% dari memori pelat) pada front-end web, 750-800 MB (35%) pada server dengan cache DBMS dan 700 MB (36%) pada server DNS.

Sumber: opennet.ru

Tambah komentar