Pahami ukuran halaman memori di Arm64 – titik situs – Beragampengetahuan
Salah satu cara arsitektur ARM64 berbeda dari x86 adalah kemampuan untuk mengonfigurasi ukuran halaman memori di unit manajemen memori CPU (MMU) menjadi 4K, 16K atau 64K. Artikel ini merangkum apa itu ukuran halaman memori, cara mengkonfigurasi ukuran halaman pada sistem Linux, dan ketika masuk akal untuk menggunakan ukuran halaman yang berbeda dalam aplikasi Anda.
Contents
Pengantar Ukuran Halaman Memori
Seperti yang kita bahas sebelumnya ketika mendiagnosis dan memperbaiki masalah kinerja kegagalan halaman dengan atom ARM64, sistem operasi menyajikan ruang alamat memori virtual ke aplikasi dan menggunakan tabel halaman untuk memetakan halaman memori fisik ke alamat memori virtual. CPU kemudian menyediakan mekanisme yang disebut Translation Lookaside Buffer (TLB) untuk memastikan bahwa halaman akses memori terbaru dapat diidentifikasi lebih cepat menggunakan cache CPU L1 atau L2.
Ukuran halaman memori fisik (disebut partikel) pada arsitektur x86 ditetapkan 4KB. Namun, pada sistem ARM64 seperti Ampere Altra (R) atau AmpereOne (R), pengembang dapat mengonfigurasi ukuran halaman memori fisik menjadi 4KB, 16KB, atau 64KB.
Kapan menggunakan ukuran halaman yang lebih besar?
Karena mengubah ukuran halaman dapat memengaruhi efisiensi memori dan kinerja sistem Anda, penting untuk memahami penggunaan ukuran halaman yang lebih besar dan pengorbanan yang terlibat. Ukuran halaman yang lebih besar dapat mengurangi efisiensi memori dengan tidak memiliki halaman yang lengkap.
Misalnya, jika kita menyimpan 7 kb data dalam memori, kita akan menggunakan dua halaman 4KB pada sistem dengan halaman kernel 4KB, dengan total memori 8kB, dengan efisiensi 87,5%. Namun, pada sistem dengan halaman 64kB, kami sekarang menggunakan halaman 64kB tunggal dengan data 7kb, dengan alokasi tunggal di atas dengan efisiensi 11%.
Namun, kernel MMU dan OS cukup pintar untuk menggunakan blok memori yang sebelumnya dialokasikan tetapi tidak memuaskan. Jika proses yang sama mengalokasikan memori 32kb nanti, kami masih hanya menggunakan halaman 64kB, di mana 39kB ditempati. Dengan ukuran halaman 4K, kami sekarang akan mengelola sepuluh halaman 4KB.
Trade-off kedua adalah kinerja karena pencarian tabel Cache Tops. Untuk setiap tingkat cache (L1, L2, cache tingkat sistem), entri halaman yang relatif sedikit disimpan di TLB.
Entri TLB ini memiliki ukuran halaman yang lebih besar dan mencakup lebih banyak memori fisik. Misalnya, pada prosesor Ampere Altra dan Altra Max, data L1 TLB memiliki 48 entri dan L2 TLB memiliki 1280 entri.
Ini berarti bahwa menggunakan partikel 4KB, L1 TLB dapat men -cache 192kb memori fisik, sedangkan L2 TLB dapat menyimpan alamat halaman yang mencakup 5MB memori fisik.
Menggunakan ukuran halaman 64kB, ini meningkat menjadi 3MB untuk data L1 TLB dan untuk L2 TLB. Setiap cache di TLB menambahkan waktu berjalan kaki untuk menemukan halaman fisik yang cocok dengan pencarian memori virtual, setelah meletakkan halaman, dan memperbarui TLB dengan tepat. Pada halaman yang lebih besar, Anda memiliki lebih sedikit kesalahan cache dan melakukan lebih baik dalam hal beban kerja yang intensif memori.
Anda juga dapat meningkatkan kinerja I/O dengan memiliki area memori kontinu yang lebih besar. Akibatnya, aplikasi intensif data dengan sejumlah besar data dalam memori atau transportasi dapat mengambil manfaat dari ukuran halaman yang lebih besar. Beberapa aplikasi ini adalah:
- Database: Sistem basis data cenderung menyimpan informasi dalam jumlah besar untuk keperluan caching dan menyediakan sejumlah besar Disk I/O untuk set data besar. Dua karakteristik ini membuat server database cocok untuk kandidat yang sangat baik untuk ukuran halaman memori yang besar.
- Infrastruktur Virtualisasi: Mesin virtual (VM) mencakup gambar disk yang mencakup kernel sistem operasi dan semua aplikasi yang diperlukan untuk VM itu, berkisar dari ratusan megabyte hingga ratusan GB. Akibatnya, mereka dapat menggunakan banyak memori dan dapat mengambil manfaat dari ukuran halaman yang lebih besar.
- Buat server terintegrasi yang berkelanjutan: Tugas seperti membangun kernel Linux untuk menangani ribuan file sumber dan menggunakan banyak RAM saat menyusunnya. Sebagai beban kerja throughput yang lebih tinggi, host yang dikonfigurasi dengan ukuran halaman yang lebih besar cenderung berkinerja lebih baik sebagai server build.
- Aplikasi Jaringan atau I/O Tugas Berat: Untuk aplikasi dengan I/O jaringan besar dan pemrosesan data memori seperti cache objek, penyeimbang beban, firewall, atau aliran video, halaman memori besar dapat menyebabkan lebih sedikit kegagalan halaman, sehingga meningkatkan kinerja.
- Aplikasi Intensif Memori dan Aplikasi Lainnya: AI menyimpulkan bahwa mengeksekusi model yang terlatih, seperti mesin rekomendasi untuk chatbots LLM, adalah memori dan beban kerja intensif CPU, dan ukuran halaman memori yang besar dapat membantu memberikan kinerja tinggi.
Biasanya, kinerja jenis aplikasi ini dengan ukuran halaman yang lebih besar akan tergantung pada beberapa faktor, termasuk dataset yang terlibat dan pola akses memori aplikasi.
Jika Anda berpikir aplikasi Anda dapat memperoleh manfaat dari halaman memori yang lebih besar, Anda harus menggunakan halaman 4K dan 64K untuk membandingkan beban kerja target dan membuat keputusan penempatan berdasarkan hasil tes.
Selain membandingkan aplikasi target menggunakan data produksi menggunakan halaman 4K dan 64K, Anda juga dapat mengevaluasi manfaat potensial dari ukuran halaman yang lebih besar dengan mengukur stan TLB (yaitu, frekuensi kesalahan TLB dapat menyebabkan pipa CPU melambat sambil menunggu informasi dimuat dari memori).
Pertama, periksa apakah kernel mendukung penghitung stan Ampere dan TLB pada CPU baru.
# perf list | grep end_tlb
stall_backend_tlb
stall_frontend_tlb
Dengan dukungan kernel, kios pipa dapat diukur karena kesalahan TLB:
# perf stat -e instructions,cycles,stall_frontend_tlb,stall_backend_tlb ./a.out
time for 12344321 * 100M nops: 3.7 s
Performance counter stats for './a.out':
12,648,071,049 instructions # 1.14 insn per cycle
11,109,161,102 cycles
1,482,795,078 stall_frontend_tlb
1,334,751 stall_backend_tlb
3\. 706937365 seconds time elapsed
3\. 629966000 seconds user
0\. 000995000 seconds sys
Rasio (stall_frontend_tlb + stall_backend_tlb)/loop adalah batas atas pada waktu yang dapat disimpan dengan menggunakan halaman memori yang lebih besar.
Namun, ketahuilah bahwa karena 4K telah menjadi ukuran halaman default begitu lama, beberapa paket dapat menyebabkan asumsi sistem Anda membuat asumsi, menghasilkan penggunaan memori yang tidak efisien. Ini tidak terlalu umum di tumpukan perangkat lunak modern, tetapi disarankan untuk melakukan beberapa pengujian dan pembandingan sebelum berkomitmen pada ukuran halaman yang lebih besar.
Konfigurasikan ukuran halaman yang lebih besar di Ampere CPU
Mengubah ukuran ukuran halaman memori membutuhkan menjalankan kernel sistem operasi yang dikompilasi untuk mendukung ukuran yang Anda butuhkan. Untuk sistem operasi cloud yang populer seperti Red Hat Enterprise Linux, Oracle Enterprise Linux, SUSE Enterprise Linux atau Canonical’s Ubuntu, kapal sistem operasi memiliki kernel pra-built yang mendukung ukuran halaman 4KB dan ukuran halaman 64kB pada ARM64.
Menggunakan Kernel 9 dengan 64kB halaman di Red Hat Enterprise Linux:
1. Instal Paket Kernel-64K:
dnf –y install kernel-64k
2. Aktifkan boot kernel 64K secara default:
k=$(echo /boot/vmlinuz*64k)
grubby --set-default=$k \
--update-kernel=$k \
--args="crashkernel=2G-:640M"
Mulai Kernel 64kB 22.04 di Ubuntu:
1. Pasang ARM64+Largemem ISO, yang berisi 64K core secara default, atau:
2. Instal Paket Linux-Generic-64K, yang akan menambahkan opsi kernel 64K di menu startup
3. Anda dapat menggunakan kernel 64K sebagai opsi boot default dengan memperbarui menu boot grub2 dengan perintah:
echo "GRUB_FLAVOUR_ORDER=generic-64k" | sudo tee
/etc/default/grub.d/local-order.cfg
Untuk halaman 64kB di Oracle Linux:
1. Instal paket kernel-uek64K:
sudo dnf install -y kernel-uek64k
2. Atur inti 64K ke nilai default untuk waktu startup:
sudo grubby --set-default=$(echo /boot/vmlinuz*64k)
3. Setelah memulai kembali sistem, Anda dapat menggunakan GetConf untuk memverifikasi bahwa Anda menjalankan inti 64K seperti yang dijelaskan di bawah ini.
Instruksi serupa dapat disediakan di situs web distribusi sistem operasi lainnya.
Jika Anda membangun kernel Linux sendiri, Anda dapat mengubah konfigurasi kernel menggunakan manuconfig. Dalam jenis prosesor dan fitur submenu, Anda akan menemukan register fitur CPU ARM64 berdasarkan opsi konfigurasi fitur kernel, yang dapat Anda ubah menjadi 16K atau 64K.
Juga, Anda dapat mengubah file konfigurasi kernel.config secara langsung untuk menggeser nilai config_arm_page_shift dari nilai default 12 (4k = 212 byte) menjadi 14 (16k = 214 byte) OR16 (64K = 216 byte). Anda kemudian dapat memilih kernel mana dalam waktu boot, dengan membuat beberapa entri untuk kernel dengan ukuran halaman yang berbeda di boot loader, dan memilih kernel yang sesuai saat startup.
Untuk memverifikasi apa pengaturan ukuran halaman kernel untuk kernel Linux saat ini, Anda dapat menggunakan utilitas sistem getConf. Dengan ukuran halaman 64K, ini akan menampilkan yang berikut:
$ getconf PAGESIZE
65536
sebagai kesimpulan
Ringkasan: Mengubah ukuran halaman memori kernel pada sistem cloud dapat memiliki dampak positif pada kinerja aplikasi untuk banyak beban kerja cloud yang umum. Jika aplikasi Anda berisi banyak disk, memori, atau I/O jaringan, Anda dapat secara signifikan meningkatkan kinerja dengan menggunakan kernel paged 16K atau 64K pada host lengan.
Namun, ini bukan obat mujarab dan jarak tempuh Anda dapat bervariasi. Kami menyarankan Anda mengujinya dengan tolok ukur sintetis dan dunia nyata untuk melihat apakah mengubah ukuran halaman akan memiliki dampak positif pada garis bawah Anda.
Banyak distribusi Linux yang umum dengan build ARM64 sudah termasuk beberapa kernel dalam repositori distribusi mereka. Dengan memasang paket kernel ini dan memulainya saat startup, relatif rendah untuk mencoba kernel yang lebih besar untuk menguji apakah mereka memberikan peningkatan kinerja.
rencana pengembangan website
metode pengembangan website
jelaskan beberapa rencana untuk pengembangan website, proses pengembangan website, kekuatan dan kelemahan bisnis pengembangan website
, jasa pengembangan website, tahap pengembangan website, biaya pengembangan website
#Pahami #ukuran #halaman #memori #Arm64 #titik #situs