GNU/Linux >> Belajar Linux >  >> Linux

Swappiness di Linux:Semua yang perlu Anda ketahui

Jika Anda telah menjadi pengguna atau penggemar Linux untuk waktu yang cukup lama, maka istilah swap atau memori swap seharusnya tidak menjadi berita baru bagi Anda. Namun sayangnya, banyak pengguna Linux yang cenderung salah mengartikan konsep swap memory dengan swappiness. Kesalahpahaman yang paling umum adalah bahwa nilai swappiness menunjukkan RAM maksimum yang dapat digunakan sebelum proses swapping yang sebenarnya dimulai.

Untuk memecahkan kesalahpahaman yang dilaporkan secara luas ini, kita harus memecah definisi swapping dan swappiness.

Menebus swappiness dari kesalahpahaman umum

Dari swappiness, istilah swapping dikandung. Untuk swapping berlangsung, RAM (Random Access Memory) harus memiliki beberapa data sistem. Ketika data ini dihapus ke lokasi hard disk khusus seperti file swap atau partisi swap, RAM sistem dibebaskan dari beberapa ruang yang diperlukan. Pembebasan RAM sistem ini merupakan definisi dari swapping.

OS Linux Anda berisi pengaturan konfigurasi nilai swappiness. Keberadaan nilai ini terus menimbulkan banyak kesalahpahaman tentang fungsionalitas sistem yang dimaksudkan. Yang paling umum adalah hubungannya dengan ambang penggunaan RAM. Dari definisi swapping, swappiness disalahartikan sebagai nilai penyimpanan RAM maksimum yang memicu terjadinya swapping.

Zona pemisahan RAM

Untuk menemukan kejelasan dari kesalahpahaman swappiness yang dibahas sebelumnya, kita harus mulai dari mana kesalahpahaman ini dimulai. Pertama, kita perlu melihat Random Access Memory (RAM). Interpretasi kami tentang RAM sangat berbeda dari persepsi OS Linux. Kami melihat RAM sebagai entitas memori tunggal yang homogen sementara Linux menafsirkannya sebagai zona atau wilayah memori terpisah.

Ketersediaan zona ini pada mesin Anda bergantung pada arsitektur mesin yang digunakan. Misalnya, itu bisa berupa mesin arsitektur 32-bit atau mesin arsitektur 64-bit. Untuk lebih memahami konsep zona terpisah ini, pertimbangkan rincian dan deskripsi zona komputer arsitektur x86 berikut.

  • Akses Memori Langsung (DMA) :Di sini, kapasitas wilayah atau zona memori yang dapat dialokasikan serendah 16MB. Namanya terkait dengan implementasinya. Komputer awal hanya dapat berkomunikasi dengan memori fisik komputer melalui pendekatan akses memori langsung.
  • Akses Memori Langsung 32 (DM A 32) :Terlepas dari konvensi penamaan yang ditetapkan ini, DMA32 adalah zona memori yang hanya berlaku untuk arsitektur Linux 64-bit. Di sini, kapasitas wilayah atau zona memori yang dapat dialokasikan tidak melebihi 4 GB. Oleh karena itu, mesin Linux bertenaga 32-bit hanya dapat mencapai DMA RAM 4 GB. Satu-satunya pengecualian dari kasus ini adalah ketika pengguna Linux memutuskan untuk menggunakan kernel PAE (Physical Address Extension).
  • Biasa :Proporsi RAM mesin di atas 4GB, menurut perkiraan, pada arsitektur komputer 64-bit, memenuhi definisi metrik dan persyaratan memori normal. Di sisi lain, arsitektur komputer 32-bit mendefinisikan memori normal antara 16 MB dan 896 MB.
  • Tinggi M mereka :Zona memori ini hanya terlihat pada arsitektur komputer berbasis Linux 32-bit. Ini didefinisikan sebagai kapasitas RAM yang melebihi 896 MB untuk mesin kecil dan melebihi 4 GB untuk mesin besar atau mesin dengan fitur dan spesifikasi perangkat keras yang berkinerja.

Nilai RAM dan PAGESIZE

Alokasi RAM komputer ditentukan dalam halaman. Alokasi halaman ini dikonfigurasi ke ukuran tetap. Kernel sistem adalah penentu alokasi ukuran tetap ini. Alokasi halaman terjadi pada waktu boot sistem ketika kernel mendeteksi arsitektur komputer Anda. Pada komputer Linux seperti itu, ukuran halaman biasanya sekitar 4 Kbytes.

Untuk menentukan ukuran halaman mesin Linux Anda, Anda dapat menggunakan perintah “getconf” seperti yang ditunjukkan di bawah ini:

$ getconf PAGESIZE

Menjalankan perintah di atas pada terminal Anda akan memberikan output seperti:

4096

Lampiran Zona dan Node

Zona memori yang dibahas memiliki lampiran langsung ke node sistem. CPU atau Central Processing Unit secara langsung berhubungan dengan node ini. Asosiasi node-ke-CPU ini yang direferensikan oleh kernel sistem saat mengalokasikan memori diperlukan oleh proses yang dijadwalkan untuk dieksekusi oleh CPU yang sama.

Tingkat node-ke-CPU ini penting untuk pemasangan tipe memori campuran. Komputer multi-CPU spesialis adalah target utama dari instalasi memori ini. Prosedur ini hanya berhasil jika arsitektur Non-Uniform Memory Access sedang digunakan.

Dengan persyaratan kelas atas seperti itu, komputer Linux, rata-rata, akan berasosiasi dengan satu node tertentu. Istilah OS untuk itu adalah simpul nol. Node ini memiliki semua zona memori yang tersedia. Node dan zona ini juga dapat diakses dari OS Linux Anda. Pertama, Anda perlu mengakses file “/ proc/buddyinfo”. Anda dapat menggunakan perintah berikut untuk mencapai tujuan ini.

$ less /proc/buddyinfo

Output terminal Anda harus mirip dengan screenshot berikut.

Seperti yang Anda lihat, dari sisi saya, saya berurusan dengan tiga zona:DMA, DMA32, dan zona Normal.

Interpretasi data zona ini sangat mudah. Misalnya, jika kita menggunakan zona DMA32, kita dapat mengungkap beberapa informasi penting. Bergerak dari kiri ke kanan, kita dapat mengungkapkan hal berikut:

4846: Potongan memori yang tersedia dapat diartikan sebagai 4846 dari 2^(0*PAGESIZE)

3946: Potongan memori yang tersedia dapat diartikan sebagai 3946 dari 2^(1*PAGESIZE)

2490: Potongan memori yang tersedia dapat diartikan sebagai 2490 dari 2^(2*PAGESIZE)

0: Potongan memori yang tersedia dapat diartikan sebagai 0 dari 2^(512*PAGESIZE)

Info di atas menjelaskan bagaimana node dan zona berhubungan satu sama lain.

Halaman file vs. halaman anonim

Entri tabel halaman menyediakan fungsionalitas pemetaan memori dengan sarana yang diperlukan untuk merekam penggunaan halaman memori tertentu. Oleh karena itu, pemetaan memori ada dalam fase fungsional berikut:

File didukung: Dengan jenis pemetaan ini, data yang ada di sini berasal dari sebuah file. Pemetaan tidak membatasi fungsinya untuk jenis file tertentu. Semua jenis file dapat digunakan selama fungsi pemetaan dapat membaca data darinya. Fleksibilitas fitur sistem ini adalah memori yang dibebaskan sistem dapat dengan mudah diperoleh kembali dan datanya digunakan kembali selama file yang berisi data tersebut tetap dapat dibaca.

Jika secara kebetulan terjadi perubahan data dalam memori, file hard drive perlu merekam perubahan data tersebut. Ini harus dilakukan sebelum memori yang digunakan bebas lagi. Jika tindakan pencegahan ini gagal dilakukan, file hard drive akan gagal mencatat perubahan data yang terjadi di memori.

Anonim: Jenis teknik pemetaan memori ini tidak memiliki fungsi pencadangan perangkat atau file. Permintaan memori yang tersedia pada halaman ini dapat digambarkan sebagai on-the-fly dan diprakarsai oleh program yang sangat membutuhkan untuk menyimpan data. Permintaan memori seperti itu juga efektif saat menangani tumpukan dan tumpukan memori.

Karena tipe data ini tidak terkait dengan file, sifat anonimnya membutuhkan sesuatu untuk berfungsi sebagai lokasi penyimpanan yang andal secara instan. Dalam hal ini, partisi swap atau file swap dibuat untuk menampung data program ini. Data pertama-tama akan berpindah ke swap sebelum halaman anonim yang menyimpan data ini dibebaskan.

Didukung perangkat: File perangkat blok digunakan untuk menangani perangkat sistem. Sistem menganggap file perangkat sebagai file sistem normal. Di sini, membaca dan menulis data dimungkinkan. Data penyimpanan perangkat memfasilitasi dan memulai pemetaan memori yang didukung perangkat.

Dibagikan: Satu halaman RAM dapat menampung atau dapat dipetakan dengan beberapa entri tabel halaman. Setiap pemetaan ini dapat digunakan untuk mengakses lokasi memori yang tersedia. Apapun rute pemetaannya, tampilan data akhir akan selalu sama. Karena lokasi memori di sini diawasi bersama, komunikasi antar-proses lebih efisien melalui pertukaran data. Komunikasi antar-proses juga berkinerja tinggi karena pemetaan yang dapat ditulis bersama.

Salin saat menulis: Teknik alokasi ini agak berorientasi malas. Jika permintaan sumber daya terjadi dan sumber daya yang diminta sudah ada di memori, sumber daya asli dipetakan untuk memenuhi permintaan itu. Selain itu, sumber daya mungkin digunakan bersama oleh beberapa proses lainnya.

Dalam kasus seperti itu, suatu proses mungkin mencoba menulis ke sumber daya itu. Jika operasi tulis ini ingin berhasil, replika sumber daya tersebut harus ada di memori. Salinan atau replika sumber daya sekarang akan mengakomodasi perubahan yang dilakukan. Singkatnya, perintah tulis pertama inilah yang memulai dan mengeksekusi alokasi memori.

Dari lima pendekatan pemetaan memori yang dibahas ini, swappiness berurusan dengan halaman yang didukung file dan rutinitas pemetaan memori halaman anonim. Oleh karena itu, mereka adalah dua teknik pemetaan memori pertama yang dibahas.

Memahami Swappiness

Berdasarkan apa yang telah kita bahas dan diskusikan sejauh ini, definisi swappiness sekarang dapat dengan mudah dipahami.

Secara sederhana, swappiness adalah mekanisme kontrol sistem yang merinci intensitas agresi kernel sistem dalam menukar halaman memori. Nilai swappiness digunakan untuk mengidentifikasi tingkat agresi kernel sistem ini. Peningkatan agresivitas kernel ditunjukkan dengan nilai swappiness yang lebih tinggi, sedangkan jumlah swap akan berkurang dengan nilai yang lebih rendah.

Ketika nilainya pada 0, kernel tidak memiliki otentikasi untuk memulai swapping. Sebagai gantinya, kernel mereferensikan halaman yang didukung file dan halaman gratis sebelum memulai swapping. Jadi, ketika membandingkan swappiness dengan swap, swappiness bertanggung jawab untuk mengukur swap ke atas dan ke bawah secara intensif. Menariknya, nilai swappiness yang ditetapkan pada nol tidak mencegah terjadinya swapping. Alih-alih, itu hanya menghentikan pertukaran saat kernel sistem menunggu beberapa kondisi pertukaran menjadi layak.

Github memberikan deskripsi kode sumber yang lebih menarik dan nilai yang terkait dengan implementasi swappiness. Menurut definisi, nilai defaultnya direpresentasikan dengan deklarasi dan inisialisasi variabel berikut.

Int vm_swappiness = 60;

Rentang nilai swappiness adalah antara 0 dan 100. Tautan Github di atas menunjuk ke kode sumber untuk implementasinya.

Nilai swappiness yang ideal

Beberapa faktor menentukan nilai swappiness yang ideal untuk sistem Linux. Ini mencakup jenis hard drive komputer Anda, perangkat keras, beban kerja, dan apakah itu dirancang untuk berfungsi sebagai server atau komputer desktop.

Anda juga perlu mencatat bahwa peran utama swap bukanlah untuk memulai mekanisme pembebasan memori untuk RAM mesin saat ruang memori yang tersedia habis. Keberadaan swap, secara default, merupakan indikator dari sistem yang berfungsi dengan baik. Ketidakhadirannya menyiratkan bahwa sistem Linux Anda harus mematuhi rutinitas manajemen memori yang gila.

Efek penerapan nilai swappiness baru atau kustom pada OS Linux terjadi seketika. Ini mengabaikan kebutuhan untuk reboot sistem. Oleh karena itu, jendela ini adalah kesempatan untuk menyesuaikan dan memantau efek dari nilai swappiness baru. Penyesuaian nilai dan pemantauan sistem ini harus dilakukan selama beberapa hari dan minggu hingga Anda menemukan nomor yang tidak memengaruhi kinerja dan kesehatan OS Linux Anda.

Saat menyesuaikan nilai swappiness Anda, pertimbangkan petunjuk berikut:

  • Pertama, menerapkan 0 sebagai nilai swappiness yang disetel tidak menonaktifkan fungsionalitas swap. Sebagai gantinya, aktivitas hard drive sistem berubah dari terkait swap menjadi terkait file.
  • Jika Anda bekerja di bawah hard drive komputer yang sudah tua atau tua, disarankan untuk mengurangi nilai swappiness Linux yang terkait. Ini akan meminimalkan efek churn partisi swap dan juga mencegah reklamasi halaman anonim. Churn sistem file akan meningkat ketika churn swap berkurang. Dengan bertambahnya satu pengaturan menyebabkan penurunan yang lain, sistem Linux Anda akan lebih sehat dan berkinerja dengan satu metode manajemen memori yang efektif daripada menghasilkan kinerja rata-rata dengan dua metode.
  • Server database dan server tujuan tunggal lainnya harus memiliki panduan perangkat lunak dari pemasoknya. Mereka datang dengan manajemen memori yang andal dan mekanisme cache file yang dirancang khusus. Penyedia perangkat lunak ini diberi mandat untuk menyarankan nilai swappiness Linux yang direkomendasikan berdasarkan beban kerja dan spesifikasi mesin.
  • Jika Anda adalah pengguna desktop Linux rata-rata, disarankan untuk tetap menggunakan nilai swappiness yang telah disetel, terutama jika Anda menggunakan perangkat keras yang cukup baru.

Bekerja dengan nilai swappiness yang disesuaikan pada mesin Linux Anda

Anda dapat mengubah nilai swappiness Linux Anda ke figur kustom pilihan Anda. Pertama, Anda harus mengetahui nilai yang saat ini ditetapkan. Ini akan memberi Anda gambaran tentang seberapa banyak Anda ingin mengurangi atau meningkatkan nilai swappiness yang diatur sistem Anda. Anda dapat memeriksa nilai yang saat ini disetel pada mesin Linux Anda dengan perintah berikut.

$ cat /proc/sys/vm/swappiness

Anda harus mendapatkan nilai seperti 60 karena ini adalah pengaturan default sistem.

"sysctl" berguna ketika Anda perlu mengubah nilai swappiness ini ke angka baru. Misalnya, kita dapat mengubahnya menjadi 50 dengan perintah berikut.

$ sudo sysctl vm.swappiness=50

Sistem Linux Anda akan segera mengambil nilai yang baru disetel ini tanpa perlu melakukan boot ulang. Restart mesin Anda akan me-reset nilai ini ke default 60. Penggunaan perintah di atas bersifat sementara karena satu alasan utama. Ini memungkinkan pengguna Linux untuk bereksperimen dengan nilai swappiness yang mereka pikirkan sebelum memutuskan nilai tetap yang ingin mereka gunakan secara permanen.
Jika Anda ingin nilai swappiness tetap ada bahkan setelah sistem berhasil di-boot ulang, Anda perlu untuk memasukkan nilai yang ditetapkan dalam file konfigurasi sistem “/etc/sysctl.conf”. Untuk demonstrasi, pertimbangkan implementasi berikut dari kasus yang dibahas ini melalui editor nano. Tentu saja, Anda dapat menggunakan editor pilihan yang didukung Linux.

$ sudo nano /etc/sysctl.conf

Ketika file konfigurasi ini terbuka pada antarmuka terminal Anda, gulir ke bawahnya dan tambahkan baris deklarasi variabel yang berisi nilai swappiness Anda. Pertimbangkan implementasi berikut.

 
vm.swappiness=50

Simpan file ini, dan Anda siap melakukannya. Reboot sistem Anda berikutnya akan menggunakan nilai swappiness yang baru ini.

Catatan akhir

Kompleksitas manajemen memori menjadikannya peran yang ideal untuk kernel sistem karena akan terlalu memusingkan bagi pengguna Linux rata-rata. Karena swappiness dikaitkan dengan manajemen memori, Anda mungkin melebih-lebihkan atau berpikir Anda menggunakan terlalu banyak RAM. Di sisi lain, Linux menemukan RAM bebas ideal untuk peran sistem seperti caching disk. Dalam hal ini, nilai memori "bebas" akan lebih rendah secara artifisial dan nilai memori "bekas" secara artifisial lebih tinggi.

Secara praktis, proporsionalitas nilai memori bebas dan bekas ini dapat dibuang. Alasan? RAM gratis yang menetapkan dirinya sebagai cache disk dapat diambil pada setiap instance sistem. Itu karena kernel sistem akan menandainya sebagai ruang memori yang tersedia dan dapat digunakan kembali.


Linux
  1. Podman vs Docker:Semua yang Perlu Anda Ketahui

  2. Semua yang Perlu Anda Ketahui Tentang Ubuntu 13.04

  3. Direktori tmp Linux:Semua yang Perlu Anda Ketahui

  1. Kompresi File Linux:Semua yang Perlu Anda Ketahui

  2. Izin File Linux:Semua yang Perlu Anda Ketahui

  3. Semua yang Perlu Anda Ketahui Tentang Sistem File Linux

  1. Semua yang Perlu Anda Ketahui Tentang Perintah Chmod Linux

  2. Semua yang Perlu Anda Ketahui tentang Linux Containers (LXC)

  3. Semua yang Perlu Anda Ketahui Tentang Server Linux Ubuntu