CCoW: Mengoptimalkan Copy-on-Write Mengingat Lokalitas Spasial dalam Beban Kerja Bagian 3
Apr 02, 2024
3. Desain PKP2B
Pada bagian ini, pertama-tama kami memperkenalkan motivasi kami di balik peningkatan copy-on-write dan menjelaskan konsep dasar copy-on-write (CCoW) berbasis cakupan. Kemudian kami menjelaskan cara CCoW menangkap lokalitas dalam berbagai skenario dan optimasi untuk menangkap lokalitas dengan biaya overhead yang rendah.
Memori adalah kemampuan manusia untuk memperoleh, menyimpan, dan mengambil informasi. Ingatan orang juga akan berbeda dalam skenario yang berbeda. Pada artikel ini, kita akan mengeksplorasi hubungan antara memori dalam berbagai skenario.
Yang pertama adalah skenario pembelajaran. Belajar merupakan sarana penting bagi manusia untuk memperoleh pengetahuan dan keterampilan. Dalam proses belajar, ingatan memegang peranan yang sangat penting. Jika Anda memiliki daya ingat yang kuat, Anda dapat menguasai pengetahuan baru dengan lebih cepat dan menyimpan pengetahuan yang telah dipelajari dengan lebih mudah. Oleh karena itu, dalam skenario pembelajaran, kita perlu menjaga pemikiran kita tetap jernih dan fokus, untuk meningkatkan daya ingat.
Yang kedua adalah dunia pariwisata. Bepergian memungkinkan kita untuk merasakan budaya dan lingkungan yang berbeda, sehingga sangat memperkaya wawasan kita. Selama perjalanan, kita dapat memperoleh pengetahuan budaya yang kaya dengan mengingat lokasi geografis, masyarakat, adat istiadat, dan informasi lainnya. Oleh karena itu, dalam adegan perjalanan, kita perlu mengamati dengan cermat dan secara aktif mengalaminya, agar daya ingat kita lebih meningkat.
Sekali lagi, ini adalah adegan kerja. Di tempat kerja, kita perlu menangani sejumlah besar informasi, seperti data, kontak, tugas, rencana, dll. Jika ingatan kita tidak cukup kuat, hal itu akan mempengaruhi efisiensi dan pencapaian kerja kita. Oleh karena itu, dalam skenario kerja, kita perlu melakukan pencatatan dan pengorganisasian dengan baik dan mencoba mempersempit rentang "koneksi informasi" sebanyak mungkin. Dengan cara ini, kita dapat meningkatkan daya ingat kita dengan lebih baik.
Terakhir, ada adegan kehidupan. Manusia perlu mengingat banyak hal sehari-hari, seperti alamat, nomor telepon, tugas hari itu, dan lain sebagainya. Jika daya ingat kita kurang baik maka akan banyak permasalahan dalam hidup yang muncul. Oleh karena itu, dalam adegan kehidupan, kita perlu melatih kemampuan ingatan kita. Kita dapat meningkatkan daya ingat kita dengan membangun pemikiran asosiatif dan mengulanginya dalam hati.
Singkatnya, memori dalam skenario yang berbeda berkaitan erat. Kita dapat meningkatkan daya ingat dan mencapai kinerja yang lebih baik dalam berbagai skenario melalui latihan dan konsentrasi yang disengaja. Mari kita kejar kehidupan dan karier yang lebih baik dengan sikap optimis. Terlihat bahwa kita perlu meningkatkan daya ingat, dan Cistanche deserticola dapat meningkatkan daya ingat secara signifikan, karena Cistanche deserticola juga dapat mengatur keseimbangan neurotransmiter, seperti meningkatkan kadar asetilkolin dan faktor pertumbuhan. Zat-zat ini sangat penting untuk daya ingat dan pembelajaran. Selain itu, Cistanche deserticola juga dapat meningkatkan aliran darah dan meningkatkan pengiriman oksigen, yang dapat memastikan otak menerima nutrisi dan energi yang cukup, sehingga meningkatkan vitalitas dan daya tahan otak.

Klik suplemen tahu untuk meningkatkan daya ingat
3.1. Motivasi
Seperti yang dibahas sebelumnya, mekanisme copy-on-write memainkan peran penting dalam mengimplementasikan fitur memori virtual di OS modern. Namun, keunggulannya dalam hal ruang telah berkurang dalam lingkungan komputasi modern dan beban kerja intensif menulis, yang umum terjadi di pusat data [21,22].
Teknologi memori yang sedang berkembang seperti memori penyimpanan (SCM) dan memori persisten memungkinkan peningkatan kepadatan data untuk modul memori sekaligus menurunkan biaya per unit data.
Saat ini membangun sebuah node dengan jumlah memori yang sangat besar dalam skala terabyte menjadi lebih murah dari sebelumnya. Selain itu, penyedia layanan cloud telah melaporkan bahwa node di pusat data mengalami pemanfaatan memori yang rendah, sehingga 40–50% memori tidak terpakai [23-26]. Dalam situasi ini, menjadi mungkin untuk menukar ruang memori dengan kinerja dalam sistem yang kritis terhadap kinerja [27]. Keuntungan dalam hal kinerja juga telah berkurang.
Manfaat kinerja copy-on-write dapat ditandai dengan frekuensi dan kinerja penanganan kesalahan halaman. Saat memunculkan proses anak, izin menulis ke semua halaman dihilangkan. Dari sudut pandang kebenaran, hal ini tidak bisa dihindari; namun, hal ini menyebabkan kesalahan halaman yang sering terjadi setelah percabangan, dalam melayani setiap permintaan penulisan. Badai kesalahan halaman tulis ini tidak hanya terjadi pada proses anak tetapi juga pada proses induk.
Lebih buruk lagi, waktu penanganan kesalahan halaman belum membaik akhir-akhir ini namun cenderung berkepanjangan karena alasan keamanan. Di masa lalu, seluruh ruang alamat kernel terus-menerus dipetakan ke bagian dari ruang alamat proses pengguna.
Namun, tata letak ruang alamat ini memungkinkan proses pengguna yang berbahaya untuk secara tidak langsung membaca data penting dalam ruang alamat kernel dengan mengeksploitasi eksekusi spekulatif dalam prosesor [28,29].
Untuk memitigasi kerentanan keamanan kritis tersebut, OS modern menggunakan isolasi tabel halaman kernel (KPTI). Secara umum, hanya sebagian kecil dari ruang alamat kernel yang dipetakan ke ruang alamat proses, dan sisa ruang alamat kernel dipetakan dan tidak dipetakan secara dinamis selama penanganan interupsi dan panggilan sistem. Hal ini harus disertai dengan pembilasan TLB, yang dapat menurunkan kinerja sistem secara signifikan.
Dalam karya ini, kami bertujuan untuk mengurangi overhead copy-on-write dengan memanfaatkan lokalitas spasial referensi memori. Saat ini, copy-on-write terjadi per halaman, dan setiap kali terjadi kesalahan halaman, OS harus ikut terlibat. Ide utama kami adalah mengurangi frekuensi keterlibatan OS dengan memanfaatkan lokalitas spasial dari akses memori. Jika sebuah halaman diakses untuk menulis, halaman terdekat juga kemungkinan akan diakses untuk menulis dalam waktu dekat.
Jadi, jika kita melakukan copy-on-write tidak hanya untuk halaman yang rusak tetapi juga untuk halaman-halaman terdekat secara bersamaan (yaitu, pra-salinan halaman-halaman terdekat), kita dapat mengamortisasi biaya overhead untuk copy-on-write selama penanganan kesalahan halaman. Namun, kita harus berhati-hati, jangan selalu menyalin semua halaman di dekatnya secara membabi buta.
Jika halaman yang disalin ditulis belakangan, biaya overhead yang dikeluarkan untuk pra-salinan akan dibayar kembali. Namun, jika halaman yang disalin tidak ditulis setelahnya, pra-salinan hanya menimbulkan biaya tambahan dalam hal waktu dan ruang.

Oleh karena itu, sangat penting untuk mengidentifikasi halaman target yang tepat untuk disalin. Pendekatan serupa telah digunakan untuk meminimalkan overhead penanganan kesalahan halaman. Linux menggunakan apa yang disebut fitur 'fault around'. Saat menangani kesalahan halaman, Linux memulai penanganan kesalahan halaman untuk halaman yang berada di sekitar halaman yang salah [2]. Namun, fitur ini hanya diterapkan pada kesalahan halaman baca untuk wilayah memori yang didukung file.
Mengingat bahwa ide yang diusulkan berfokus pada penulisan kesalahan halaman untuk halaman anonim, kami dapat berargumen bahwa pendekatan kami berbeda dari fitur kesalahan sekitar. Banyak desain canggih [12-17] telah diusulkan untuk mengoptimalkan penggunaan halaman besar di OS.
Sistem ini, secara umum, menyajikan skema untuk mengidentifikasi halaman kandidat terbaik untuk dikonversi menjadi halaman besar dan secara efisien mempromosikannya (yaitu, mengubah halaman dasar menjadi halaman besar) atau menurunkannya (yaitu, mengubah halaman besar menjadi halaman dasar) halaman besar.
Namun, terlepas dari skema yang diusulkan, copy-on-write dilakukan dalam granularitas halaman dasar saja, setelah memecah halaman besar menjadi halaman dasar jika diperlukan. Dengan demikian, karakteristik kinerja copy-on-write mereka sama dengan sistem Linux default dengan mekanisme halaman besar transparan (THP). Sebaliknya, skema yang kami usulkan unik karena ia melakukan copy-on-write pada granularitas yang berbeda sesuai dengan tingkat lokalitas dalam akses memori.
3.2. Mengidentifikasi Lokalitas Spasial
Untuk mewujudkan skema yang diusulkan, kita harus mempertimbangkan dua permasalahan yang menantang. Pertama, halaman target harus diidentifikasi secara tepat dan tepat waktu, sehingga manfaat pra-salinan dapat dimaksimalkan sementara biaya tambahan untuk pra-salinan diminimalkan.
Setelah halaman disalin oleh penulis, halaman tersebut tidak akan memicu kesalahan halaman lebih lanjut. Hal ini secara efektif berarti bahwa sistem kehilangan kesempatan untuk mengoptimalkan akses tulis. Dengan demikian, sistem harus dapat memperkirakan penggunaan halaman di masa depan untuk menentukan halaman mana yang harus disalin dan mana yang tidak. Kedua, mengidentifikasi halaman target harus memiliki overhead yang rendah karena OS tidak mampu melakukan pemrosesan yang memakan waktu dalam subsistem manajemen memori yang kritis terhadap kinerja.
Seperti yang dibahas di Bagian 2, banyak fitur memori virtual di OS modern didasarkan pada mekanisme copy-on-write. Dengan demikian, biaya overhead dapat dengan mudah melebihi manfaat copy-on-write yang dioptimalkan jika implementasi keseluruhan tidak cukup efisien.
Untuk memprediksi masa depan suatu halaman, pertama-tama kami mengumpulkan riwayat fork untuk proses pengguna. Secara khusus, OS memantau jumlah fork yang dipanggil oleh setiap proses. Jumlah yang rendah untuk suatu proses menyiratkan bahwa terdapat sedikit peluang untuk mengeksploitasi proses tersebut, dan OS tidak perlu sepenuhnya melacak kesalahan halaman penulisan untuk proses ini.
Sebaliknya, ketika suatu proses memanggil panggilan sistem fork lebih dari ambang batas, sistem dapat mengharapkan peluang optimasi. Hal ini terjadi pada Redis, yang secara berkala memanggil fork untuk mengambil snapshot dalam memori, atau dengan skrip shell yang melakukan fork pada beberapa perintah baris perintah. Sebagai tanggapan, sistem mulai melacak kesalahan halaman untuk proses tersebut.

Selanjutnya, kami mengusulkan metode untuk memprediksi peluang pengoptimalan dari riwayat, dengan asumsi bahwa perilaku aplikasi secara keseluruhan tidak berubah secara signifikan. Untuk tujuan ini, kami membagi ruang alamat proses menjadi wilayah berukuran tetap. Tiap wilayah memiliki bitmap, yang setiap bitnya berhubungan dengan halaman di wilayah tersebut. Suatu proses dijalankan dengan semua bitmap dibersihkan, seperti untuk area memori virtual (VMA) yang baru diisi. Ketika sebagian atau seluruh VMA tidak dipetakan, bitmap dalam rentang alamat yang sesuai juga akan dirilis.
Bitmap hanya dialokasikan untuk bagian VMA yang diisi, dan informasi halaman 14 KB dirangkum menjadi satu bit. Jadi, overhead ruang untuk bitmap adalah sekitar 00,003% dari ruang alamat yang terisi. Awalnya, penulisan diproses melalui copy-on-write apa adanya.
Akses tulis dijebak ke pengendali kesalahan halaman, dimana entri bitmap terkait diatur. Seiring waktu, bitmap secara efektif menangkap akses ke wilayah tersebut, dan kita dapat mengukur tingkat cakupannya. Cakupan suatu wilayah dihitung sebagai persentase halaman salinan dari seluruh halaman di wilayah tersebut, sebagai berikut:
![]()
Misalkan suatu sistem menggunakan halaman 4 KB dan ruang alamat dibagi menjadi wilayah 2 MB.
Lalu setiap wilayah memiliki halaman 512 4 KB. Jika 300 halaman disalin pada penulisan, cakupan wilayahnya adalah 300/512 × 100=58,6%.Semakin tinggi cakupan suatu wilayah, semakin banyak wilayah yang dapat memperoleh manfaat dari peluang optimalisasi prakopi. Informasi cakupan ini dibawa melalui fork dan digunakan sebagai metrik untuk menentukan manfaat menyalin halaman terdekat.
Khususnya, jika wilayah memori memiliki cakupan yang tinggi, halaman-halaman di wilayah tersebut kemungkinan besar akan disalin pada akhirnya. Oleh karena itu, akan bermanfaat untuk melakukan pra-penyalinan halaman lain di wilayah tersebut sambil memproses kesalahan halaman tulis untuk suatu halaman. Padahal, peluang optimasi pada halaman pra-penyalinan kecil jika cakupannya rendah. Jadi, hanya halaman yang salah yang disalin-ditulis oleh pengendali kesalahan halaman.
Untuk selanjutnya, kami akan menyebut skema ini sebagai copy-on-write atau PKP2B berbasis cakupan untuk keseluruhan makalah ini. Gambar 1 mengilustrasikan konsep PKP2B. Ada dua wilayah, wilayah 0 dan 1, masing-masing terdiri dari enam halaman.
Halaman dengan warna hijau diisi dengan copy-on-write. Ketika proses memanggil panggilan sistem fork, tulis izin untuk semua halaman, termasuk halaman hijau, untuk dihilangkan selama fork. Mari kita asumsikan bahwa ambang batas untuk menentukan wilayah dengan lokalitas tinggi adalah 60%. Di wilayah 0, empat halaman (halaman 1, 2, 3, dan 4) telah disalin secara tulis sebelum fork, memberikan cakupan 4/6=66%.
Dengan demikian, wilayah ini dianggap memiliki lokalitas spasial yang tinggi, dan semua halaman disalin untuk menangani kesalahan halaman pada halaman 3, seperti yang diberi warna merah. Sedangkan wilayah bawah memberikan cakupan 33% karena dua dari enam halaman telah disalin sebelum fork.
Oleh karena itu, wilayah ini mempunyai cakupan yang lebih rendah dari ambang batas, yang berarti rendahnya lokalitas spasial di wilayah tersebut. Jadi, ketika halaman 9 diakses untuk penulisan, hanya halaman yang salah yang disalin pada saat penulisan di pengendali kesalahan halaman, sama seperti prosedur copy-on-write yang normal.

For more information:1950477648nn@gmail.com






