Mengapa sebagian RAM penuh menyebabkan kelambatan?

53

Mengapa sebagian RAM penuh (katakanlah 80%), membuat perangkat jauh tertinggal, meskipun ada beberapa ruang yang tersedia untuk menyimpan lebih banyak data? Apa yang saya harapkan adalah tetap bekerja dengan baik hingga 99%.

Saya perhatikan bahwa pada ponsel lebih dari pada PC, karena memiliki RAM lebih kecil, mis. Ponsel saya memiliki RAM 2 GB; ketika saya memiliki kurang dari 1 GB RAM gratis, itu tertinggal banyak! Mengapa itu terjadi, meskipun masih memiliki ~ 1 GB untuk digunakan?

Mohammed Noureldin
sumber
28
Saya menduga Anda berasumsi bahwa RAM yang tersedia tidak digunakan. Jadi Anda melihat 20% RAM tersedia dan berpikir bahwa hanya 80% RAM yang digunakan. Ini tidak benar, RAM dapat digunakan dan tersedia. (Sebagai contoh, mesin yang saya gunakan sekarang memiliki 32GB RAM dan 21.1 GB tersedia, tetapi hanya 1,8 GB gratis.)
David Schwartz
2
Maksud Anda ruang bebas HDD saya dengan RAM saya? bermuka masam tidak.
Mohammed Noureldin
3
Mereka bisa diganti, tentu saja. Tapi itu akan memiliki efek negatif yang sangat besar pada kinerja - persis seperti yang Anda lihat. Jika set kerja melebihi RAM, kinerjanya akan mengerikan, tidak peduli berapa banyak RAM yang tersedia.
David Schwartz
3
Apa yang membuat Anda berpikir bahwa persentase RAM yang membuat perangkat tertinggal?
enkryptor
4
@MohammedNoureldin Saya kira pasti ada alasan mengapa RAM Anda sibuk (sejumlah proses bekerja dan melakukan sesuatu). Ini mungkin menjadi alasan yang sama mengapa perangkat tertinggal. Pemuatan RAM mungkin hanya gejala, bukan alasannya sendiri.
enkryptor

Jawaban:

70

Ada banyak yang terlibat di sini, tetapi saya akan mencoba menjelaskannya sesederhana mungkin dan dengan cara yang berlaku untuk hampir semua OS.

Ada 2 prinsip dasar di sini:

  1. Jumlah total semua yang perlu dalam RAM dan hal-hal yang akan mendapat manfaat dari berada di RAM hampir selalu lebih besar dari ukuran RAM. Hal-hal yang akan mendapat manfaat dari berada di RAM termasuk set proses kerja dan daftar siaga. Yang terakhir ini berisi data dan kode yang pernah digunakan secara aktif tetapi sejak itu tidak aktif lagi. Sebagian besar ini akan digunakan lagi, beberapa di antaranya segera, sehingga bermanfaat untuk menyimpannya dalam RAM. Memori ini bertindak sebagai semacam cache tetapi tidak benar-benar penting sehingga berada dalam kategori memori yang tersedia. Seperti memori bebas, ia dapat dengan cepat diberikan ke program apa pun yang membutuhkannya. Untuk kepentingan kinerja, memori siaga harus besar.

  2. Frekuensi penggunaan blok memori jauh dari acak tetapi dapat diprediksi dengan cukup akurat. Memori dibagi menjadi beberapa blok, seringkali 4K byte. Beberapa blok diakses beberapa kali per detik sementara yang lain belum diakses selama beberapa menit, jam, hari, atau bahkan berminggu-minggu jika sistem telah cukup lama. Ada berbagai macam penggunaan antara 2 ekstrim ini. Manajer memori tahu blok mana yang telah diakses baru-baru ini dan yang belum. Ini adalah asumsi yang masuk akal bahwa blok memori yang telah diakses baru-baru ini akan dibutuhkan segera. Memori yang belum diakses baru-baru ini mungkin tidak akan dibutuhkan dalam waktu dekat. Pengalaman panjang telah membuktikan ini sebagai prinsip yang valid.

Manajer memori mengambil keuntungan dari prinsip kedua untuk mengurangi konsekuensi yang tidak diinginkan dari prinsip pertama. Untuk melakukan ini, ia melakukan penyeimbangan menjaga data yang baru-baru ini diakses dalam RAM sementara itu menjaga data yang jarang digunakan dalam file asli atau file halaman.

Ketika RAM berlimpah, tindakan penyeimbangan ini mudah. Sebagian besar data yang belum lama digunakan dapat disimpan dalam RAM. Ini adalah situasi yang baik.

Banyak hal menjadi lebih rumit ketika beban kerja meningkat. Jumlah total data dan kode yang digunakan lebih besar tetapi ukuran RAM tetap sama. Ini berarti bahwa bagian yang lebih kecil dari ini dapat disimpan dalam RAM. Beberapa data yang baru-baru ini digunakan tidak bisa lagi di RAM tetapi harus dibiarkan di disk. Manajer memori berusaha sangat keras untuk menjaga keseimbangan yang baik antara memori yang digunakan aktif dan memori yang tersedia. Tetapi dengan meningkatnya beban kerja, manajer memori akan dipaksa untuk memberikan lebih banyak memori yang tersedia untuk menjalankan proses. Ini bukan situasi yang baik tetapi manajer memori tidak punya pilihan.

Masalahnya adalah bahwa memindahkan data ke dan dari RAM saat program berjalan membutuhkan waktu. Ketika RAM berlimpah itu tidak akan terjadi sangat sering dan bahkan tidak akan diperhatikan. Tetapi ketika penggunaan RAM mencapai tingkat tinggi itu akan terjadi lebih sering. Situasi dapat menjadi sangat buruk sehingga lebih banyak waktu dihabiskan untuk memindahkan data ke dan dari RAM daripada yang dihabiskan untuk menggunakannya. Ini meronta-ronta, hal yang sulit dihindari oleh manajer memori tetapi dengan beban kerja yang tinggi sering tidak dapat dihindari.

Memory manger ada di pihak Anda, selalu berusaha yang terbaik untuk mempertahankan kinerja yang optimal bahkan dalam kondisi buruk. Tetapi ketika beban kerja sangat besar dan memori yang tersedia pendek, itu harus melakukan hal-hal buruk untuk tetap berfungsi. Itu sebenarnya hal yang paling penting. Prioritasnya adalah pertama-tama menjaga hal-hal berjalan kemudian membuatnya secepat mungkin.

LMiller7
sumber
1
Jawaban Anda banyak membantu saya, terima kasih! Itu memory mangerbagian dari OShak saya ? jadi jika saya berurusan dengan pointer dan hal-hal yang sangat rendah ini, apakah masih bisa melakukan paging?
Mohammed Noureldin
7
Manajer memori adalah bagian dari OS. Paging adalah fungsi dasar dari manajer memori dan sangat penting untuk operasi seperti bernapas untuk Anda dan saya. Tidak dapat dihentikan.
LMiller7
2
@MohammedNoureldin: Ketika Anda menulis aplikasi ruang-pengguna (yang pandangan memorinya terisolasi dari kernel dan proses lainnya), Anda tidak dapat mengakses memori fisik secara langsung . Yang dapat Anda akses hanyalah tampilan pada memori yang dikelola oleh - Anda dapat menebaknya - manajer memori dengan semua fitur (mungkin) termasuk halaman. Memory pointer hanya merujuk pada titik-titik dalam ruang alamat dari tampilan memori. Mereka adalah konsep bahasa yang digunakan di kedua kernel dan kode ruang pengguna tetapi itu tidak berarti dua pandangan memori identik. Jangan bingung proses manajemen memori dengan kernel MM!
David Foerster
6
Ini 'jelas' atau 'terkenal', tetapi mungkin masih harus ditambahkan dalam jawaban ini: memori (ram) berada di urutan 1000x lebih cepat daripada hard drive (well, bergantung pada banyak hal, misalnya ssd / ide / sata, dll). OS menjalankan kode dari ram (+ cache), bukan dari disk. Ketika memori hampir habis, dan OS perlu "menukar" bagian kode ("yang tidak digunakan") dari memori ke disk, untuk membebaskan ram untuk mengeksekusi sesuatu yang lain, ini akan membutuhkan banyak waktu (swapping), dan jika ini sering terjadi (mis: Anda memiliki banyak program, masing-masing membutuhkan swap agar kode mereka dimuat ke dalam memori), itu akan banyak memperlambat segalanya.
Olivier Dulac
3
Kami biasanya tidak menggunakan istilah "swap" untuk merujuk memuat kode ke memori. Itu biasanya disebut "kesalahan". Biasanya, istilah "swap" hanya digunakan untuk informasi yang harus ditulis ke disk sebelum dapat dikeluarkan dari RAM.
David Schwartz
29

Semua sistem operasi modern menggunakan memori yang tidak digunakan jika tidak untuk menyimpan data sehingga dapat diakses dari RAM cepat bukan penyimpanan yang lebih lambat. Mereka umumnya akan melaporkan ini sebagai memori bebas, karena aplikasi dapat menghapus cache dan menggunakannya jika mereka perlu, tetapi masih benar-benar digunakan. Semakin sedikit ada, semakin sedikit data yang bisa di-cache, dan semakin lambat komputer.

Mike Scott
sumber
11
Sebenarnya, aplikasi tidak perlu "menghapus" cache. Mereka hanya meminta RAM dari OS. OS, melihat bahwa ia tidak memiliki RAM yang tidak terpakai, akan menghapus bagian dari cache file dan memberikan RAM yang sekarang menjadi nol untuk aplikasi. Aplikasi tidak dapat mengetahui dari mana RAM itu berasal.
MSalters
5
@Malter Ya, saya setuju, aplikasi meminta RAM dan OS menghapus cache jika perlu. Saya berusaha membuatnya tetap sederhana.
Mike Scott
Itu beberapa yang jelas, tetapi saya sedikit lebih sadar tentang detail, oleh karena itu saya merasa ada sesuatu yang hilang dan saya membutuhkan lebih detail @LMiller menjawab membantu saya sebenarnya, itu akan bagus jika Anda dapat merevisi informasi di dalamnya.
Mohammed Noureldin
4

Jawaban ini sebagian besar telah ditulis ulang untuk menata ulang struktur dan membuat pesan lebih jelas. Saya juga membukanya sebagai jawaban wiki komunitas; Jangan ragu untuk mengedit.

Paging adalah skema manajemen memori yang melaluinya blok memori berukuran tetap memiliki proses yang ditugaskan padanya. Ketika penggunaan memori naik ke tingkat tinggi (yaitu kapasitas 80%), paging mulai meluas dari RAM ke vRAM (RAM virtual).

vRAM terletak di penyimpanan sistem, biasanya di dalam hard drive, atau lokasi penyimpanan lain yang cukup besar.

Proses ditetapkan sebagai bagian dari hard drive Anda untuk dijalankan sebagai memori dan akan memperlakukan bagian mereka sebagai RAM. Namun, ini adalah proses yang sangat normal, ketika waktu yang dihabiskan untuk mentransfer data ke dan dari vRAM meningkat, kinerja sistem menurun.

Sementara RAM khusus diakses langsung melalui motherboard dari CPU, yang menyediakan koneksi cepat, RAM virtual harus melintang kabel antara papan dan lokasi vRAM.

Namun ini, hanya menyebabkan sedikit dampak kinerja. Ketika kecepatan paging ke vRAM terjadi meningkat secara drastis (ketika RAM khusus mendekati kapasitas), terjadi thrashing.

Meronta-ronta adalah praktik mentransfer halaman memori dengan cepat dan cepat ke dalam memori virtual Anda. Ini membutuhkan banyak sekali kinerja karena lebih banyak waktu dihabiskan untuk mengambil dan menangani data.

Katakanlah, Anda ingin menuliskan angka 30 digit. Anda bisa duduk di sebelah layar Anda dengan notepad dan menulisnya (menggunakan memori khusus), atau Anda ingat potongan 5, lari ke kamar sebelah dan menuliskannya di notepad Anda di sana (menggunakan memori virtual). Keduanya menyelesaikan pekerjaan, tetapi mana yang akan lebih cepat?

Cari tahu lebih lanjut tentang pencuri di sini !

Terima kasih banyak kepada kontributor jawaban ini termasuk Daniel B , xenoid dan Jon Bentley .

Will
sumber
3
Ini tidak seperti meronta-ronta disengaja. Ini hanya efek samping dari paging dan persaingan untuk memori fisik. Juga, memori virtual tidak "dibuat" dengan memindahkan halaman ke disk.
Daniel B
Meronta-ronta adalah produk sampingan, benar, tetapi sangat bermanfaat pada saat proses berjalan, yang membantu mencegah kemacetan. Dan ya, memori virtual ditempati daripada dibuat. Saya akan mengeditnya.
Akan
8
Tidak, Anda membingungkan sampah dan paging. Sampah hanyalah paging yang menjadi patologis.
xenoid
@xenoid Paging adalah skema manajemen memori; Seperti mengatakan bahwa saya bingung memukul rusa dengan mobil saya dan sistem jalan raya. Thrashing adalah proses yang menyebabkan penurunan kinerja ini; Namun, saya setuju dengan Anda bahwa ini adalah hasil dari sistem paging.
Will
1
Komentar dimasukkan, dibuat menjadi jawaban wiki, jangan ragu untuk mengedit.
Will
1

Itu karena OS harus melakukan banyak paging (memuat bagian dari program aktif) dan bertukar (memindahkan data dalam RAM ke HD dan sebaliknya) untuk menjaga perangkat lunak Anda tetap berjalan. Ketika halaman baru perlu dimuat yang mungkin membutuhkan lebih banyak ruang daripada 20% yang tersedia, OS harus menukar halaman yang ada dalam RAM yang dianggap kurang mungkin untuk segera digunakan. Terutama saat memulai program lain. Mengganti dan kembali halaman membutuhkan banyak waktu dan memperlambat kinerja PC Anda secara drastis karena Anda sekarang bekerja pada kecepatan HD, bukan RAM.

Ini membantu sedikit pada HDD untuk membuat partisi khusus pada HD Anda dan menetapkannya sebagai "swap" khusus (tidak menggunakannya untuk file "nyata") sehingga pertukaran tidak terlalu terpengaruh oleh fragmentasi HD.

Gilles Lesire
sumber
ROM hanyalah nomenklatur untuk HD ketika berbicara tentang caching, paging, dll. Apa pun yang bukan memori yang berfungsi. Dan ROM biasanya lebih lambat dari RAM, hampir selalu begitu. Komputer lama menyalin data dari ROM ke RAM (ROM Shadowing) saat booting karena bekerja lebih cepat.
Gilles Lesire
1
Tentu, tetapi ROM dan RAM juga digunakan sebagai memori non-volatile vs volatile? ROM BTW biasanya lebih lambat, ROM disalin ke RAM (ROM Shadowing) saat bootup untuk keuntungan kinerja. Tapi tentu saja, saya akan mengubah satu referensi untuk memperbaiki nitpicking Anda. ;)
Gilles Lesire
1

Ingat, hard drive adalah urutan besarnya lebih lambat dari RAM, dan RAM itu sendiri tidak terlalu cepat untuk memulai (dalam arsitektur keseluruhan). Dalam urutan kecepatan akses (di mana setiap anak tangga adalah urutan besarnya lebih lambat dari yang di atas) yang Anda miliki

  1. Register prosesor - Secara praktis, register tersedia dalam 1 siklus prosesor . Menimbang bahwa prosesor melakukan milyaran siklus per detik (3 GHz = 3 miliar siklus per detik), ini gila cepat.
  2. Cache prosesor - Bergantung pada level, tetapi ini masih cukup cepat (3-5 siklus tersedia untuk cache L1).
  3. Random Access Memory (RAM) - Bagian acak berarti Anda tidak tahu statusnya saat Anda mengaksesnya. Pikirkan seorang pengantar paket yang harus berhenti, mengambil paket, berjalan ke pintu dan membunyikan bel pintu dan menunggu jawaban. Mungkin Anda tidak menunggu sama sekali, atau mungkin Anda menunggu satu atau dua menit agar Ny. Smith beringsut ke pintu di belakang rumah. Secara praktis, kita berbicara di mana saja dari 14-27 siklus (tergantung pada kondisi RAM ketika kita mengaksesnya).
  4. Hard Disk Drive - Ada proses fisik di sini sekarang dan sementara itu terjadi secepat mungkin Anda sedang menunggu kepala bergerak dan trek bergerak di bawah kepala itu. Secara praktis, 7.200 RPM HDD dapat menyelesaikan revolusi dalam waktu sekitar 4 ms , atau sekitar 750.000 siklus untuk prosesor 3 GHz . Itu lambat.

Virtual Memory Manager adalah penjudi. Berani bertaruh Anda tidak perlu semua RAM sepanjang waktu, jadi itu membuat tebakan yang mendidik dan melempar dadu bahwa program dokumen Anda (yang telah ada di latar belakang selama 10 menit terakhir saat Anda membaca ini) tidak sangat penting dan mendorongnya ke HDD.

Tetapi kemudian Anda mengklik kembali ke dokumen! Sekarang VMM harus memuat semua data itu kembali dari HDD. Lebih buruk lagi, jika Anda kehabisan RAM, sekarang harus mendorong data lain (lebih banyak judi) ke HDD untuk membebaskan ruang yang dapat digunakan. Linux suka hidup di tepi sini. Ini akan mengisi sebagian besar RAM dengan data yang sering digunakan (bagus untuk server dengan beberapa proses).

Machavity
sumber
1
Ya, manajer memori adalah penjudi tetapi itu bisa dengan mudah disalahpahami. Jika akses memori benar-benar acak maka manajer memori akan salah sesering yang benar dan seluruh sistem akan rusak. Tetapi program cenderung menunjukkan lokalitas referensi yang kuat. Itulah sebagian besar akses memori cenderung dilokalkan ke area memori yang relatif kecil. Mereka memang bergerak tetapi cukup lambat untuk sistem untuk bekerja. Peluang ditumpuk dalam mendukung manajer memori dan kesalahan dengan cepat diperbaiki. Ini telah terbukti selama puluhan tahun pengalaman
LMiller7
Acak dalam Memori Akses Acak mengacu pada fakta bahwa Anda dapat mengakses semua itu secara acak. (Berbeda dengan harus menunggu data untuk lewat di bawah kepala baca seperti dalam hard drive atau kaset, dan kemudian mengakses data secara berurutan.).
Phil
0

Jawaban meronta-ronta cukup banyak berhasil. Jika Anda bisa, Anda dapat meminimalkan seberapa cepat ini terjadi dengan mengurangi swappiness (berapa ram sistem akan memungkinkan untuk digunakan sebelum memindahkan barang ke ruang swap). Saya suka mengatur sistem untuk tetap keluar dari swap sampai ram mencapai 99% untuk aplikasi server karena default secara efektif berarti bahwa saya perlu kode untuk hal-hal untuk hanya memanfaatkan 80% ram untuk mengambil keuntungan dari caching tanpa dihukum karena mendorong sistem menjadi ruang swap.

codykochmann
sumber