Kedalaman memori Windows (bagian 2) — Hidup sebuah halaman fisik: lima daftar dan kebenaran tentang file page

· · Windows, Manajemen memori, File page, Working Set, Standby, RAMMap, Pemantauan kinerja

Di artikel sebelumnya, «Kedalaman memori Windows (bagian 1) — Saat alamat virtual menjadi RAM fisik», kita mengikuti sampai saat penangan page fault mengalokasikan halaman fisik pada sentuhan pertama halaman yang sudah di-Commit. Lalu ke mana halaman fisik itu pergi setelah dikeluarkan dari Working Set?

Penjelasan sering disederhanakan menjadi «diusir ke file page», tetapi sebenarnya ada beberapa keadaan sebelum dan sesudah itu. Halaman yang tidak diubah bisa pindah ke Standby dengan isinya tetap. Halaman yang diubah pertama-tama menunggu penulisan kembali di Modified. Saat dipakai ulang ia bisa melewati Free atau Zeroed, dan jika isi yang sama dibutuhkan lagi, ia bisa kembali dari Standby dengan soft fault.

Artikel ini memakai basis data PFN sebagai sumbu dan mengikuti bagaimana satu halaman fisik bergerak melalui Active, Modified, Standby, Free, dan Zeroed. Pembacaan angkanya sendiri mengandaikan artikel pengantar «What Does Windows’ “Memory Usage” Actually Mean? — Correctly Reading Working Set, Private Bytes, Commit, and the Page File».

«Kedalaman memori Windows» — ketiga bagian

  1. Bagian 1: alamat virtual dan page fault
    Kita mengikuti kapan halaman virtual yang sudah di-Commit memperoleh RAM fisik.
  2. Bagian 2 (artikel ini): hidup sebuah halaman fisik
    Kita mengikuti transisi keadaan halaman yang meninggalkan Working Set, dan peran file page.
  3. Bagian 3: objek section dan copy-on-write
    Kita mengikuti mekanisme DLL, pemetaan file, dan memori bersama berbagi halaman fisik.

Pertanyaan yang dijawab Bagian 2 hanya satu.

Apakah halaman fisik yang meninggalkan Working Set hilang, pergi ke disk, atau tetap di RAM?

Pembaca yang dituju adalah pengembang dan operator yang ingin memahami dari mekanismenya mengapa Available tinggi sekaligus Standby juga tinggi, perilaku setelah pemangkasan Working Set, konfigurasi file page, dan kompresi memori. Prasyarat adalah Windows 10/11 atau Windows Server terkini, dan latar yang diperlukan adalah dasar Working Set, Commit, serta soft/hard fault. Tingkat kesulitannya menengah; kita memakai istilah internal seperti PFN dan daftar halaman, tetapi fokus pada yang bisa diamati dengan RAMMap dan PerfMon tanpa debugger kernel.

1. Kesimpulan dulu

Untuk memulai, berikut poin yang mudah salah dibaca.

  • Halaman yang meninggalkan Working Set tidak selalu langsung hilang.
    Halaman bersih tetap di Standby dan bisa kembali tanpa membaca disk jika isi yang sama dibutuhkan.
  • Halaman yang diubah tidak bisa langsung dipakai ulang.
    Isi privat menjadi bisa dipakai ulang setelah dapat ditulis kembali ke file page; file yang dipetakan, setelah dapat ditulis kembali ke file yang sesuai; dan seterusnya.
  • Available mencakup Standby.
    Standby adalah cache yang masih menahan isi dan, sekaligus, kandidat pakai ulang yang bisa diambil segera jika perlu.1
  • Penulisan ke file page bukan pekerjaan batch yang baru dimulai setelah RAM habis sama sekali.
    Ia berjalan di latar belakang sesuai daftar Modified dan tekanan memori.23
  • File page bukan sekadar «RAM lambat».
    Ia memperlebar Commit Limit, menjadi backing store halaman privat yang diubah, dan menopang dump crash.4
  • Menonaktifkan file page tidak memperbaiki kebocoran memori.
    Commit Limit turun, dan Anda bisa kehilangan opsi memakai RAM secara efektif serta kemampuan menangkap dump.

Dalam satu kalimat: sebelum Windows membuang halaman, ia memeriksa kemungkinan halaman itu akan dibutuhkan lagi dan apakah ada tempat dari mana isi aslinya bisa dipulihkan.

2. Basis data PFN — buku besar di sisi RAM fisik

PTE yang kita lihat di Bagian 1 mewakili terjemahan dari halaman virtual ke halaman fisik. Buku besar yang melihat ini dari sisi halaman fisik dan mengikuti «untuk apa halaman RAM ini dipakai sekarang» adalah basis data PFN. PFN adalah Page Frame Number: RAM fisik yang dinomori per satuan halaman.

Entri PFN secara konsep menelusuri informasi berikut.

  • Keadaan halaman fisik saat ini
  • Hitungan referensi dan hitungan berbagi
  • PTE yang sesuai
  • Apakah ia diubah
  • Daftar halaman mana yang ia masuki
  • Informasi terkait simpul NUMA dan prioritas

Di WinDbg, !pfn menampilkan informasi PFN tertentu, dan !memusage menampilkan pemakaian memori fisik serta total tiap daftar halaman.56 Jika ingin mengamati dunia yang sama tanpa debugger kernel, Sysinternals RAMMap tersedia. Use Counts menampilkan tujuan dan daftar halaman, Priority Summary menampilkan Standby menurut prioritas, dan Physical Pages menampilkan pemakaian per halaman.7

3. Menghubungkan lima keadaan dalam satu gambar

Artikel ini memperlakukan alur halaman fisik sebagai lima keadaan berikut, disederhanakan. Secara ketat, Windows terkini punya keadaan dan daftar yang tidak digambar di sini — Standby menurut prioritas, Transition, Bad, dan lainnya — dan Active merujuk lebih ke unggah sebagai keadaan dirujuk dari Working Set atau serupa lewat PTE yang sah daripada «daftar Active» tunggal. Meski begitu, gambar ini lebih dari berguna untuk membaca perilaku memori aplikasi.

Diagram disederhanakan halaman fisik Windows yang bergerak melalui Active, Modified, Standby, Free, dan Zeroed

Gambar 1: Halaman yang dirujuk di Working Set pindah ke Standby jika bersih dan ke Modified jika kotor. Isi yang sama bisa kembali; tujuan lain memakai ulang halaman secara langsung atau lewat Free/Zeroed untuk alokasi yang membutuhkan nol.

Kode sumber Mermaid gambar 1 ```text flowchart LR zeroed["Zeroed\nSudah nol"] -->|Touch pertama| active["Active / Valid\nDirujuk di Working Set"] active -->|Trim clean| standby["Standby\nCalon pakai ulang dengan isi"] active -->|Trim dirty| modified["Modified\nMenunggu tulis balik"] modified -->|Tulis balik selesai| standby standby -->|Kembali lewat soft fault| active standby -->|Buang identitas lama| free["Free\nBelum nol"] standby -->|Pakai ulang langsung ke tujuan lain| active free -->|Untuk alokasi yang butuh nol| zeroed ```

Poin terpenting dalam gambar ini adalah bahwa meninggalkan Working Set dan kehilangan isi bukan hal yang sama. Juga, ketika halaman Standby diambil untuk tujuan lain, ia tidak selalu melewati Free/Zeroed berurutan. Jika akan diserahkan ke mode pengguna sebagai halaman privat demand-zero baru, isi lama harus dihapus; jika seluruh halaman akan ditimpa, seperti tujuan baca file, identitas Standby bisa dilepas dan halaman dipakai ulang langsung.

4. Active / Valid — halaman fisik yang bisa dirujuk sekarang

Halaman Active/Valid dirujuk dari Working Set proses atau dari ruang sistem lewat PTE yang sah. CPU mencapainya dengan terjemahan alamat biasa, jadi akses itu sendiri tidak butuh page fault.

Namun tidak ada jaminan halaman tetap Active. Untuk menjaga memori tersedia, manajer memori melihat ukuran Working Set, seberapa baru halaman dipakai, dan faktor serupa, lalu memangkas halaman kandidat. Dokumentasi Working Set Microsoft juga menjelaskan bahwa manajer memori mengeluarkan halaman dari Working Set untuk membuat memori tersedia.8

4.1. Pemangkasan bukan pembebasan

Yang terutama diubah pemangkasan Working Set adalah keadaan residensi yang bisa langsung dirujuk lewat PTE yang sah. Bedakan empat berikut sebagai peristiwa terpisah.

  • Mengeluarkan dari Working Set
  • Membebaskan Commit
  • Membebaskan rentang alamat virtual
  • Kehilangan data asli

Menjalankan EmptyWorkingSet atau «Trim Working Set» alat bukan pengganti VirtualFree atau free heap. Jika Anda menyentuh halaman yang sama lagi, ia kembali lewat soft fault dari Standby atau hard fault dari backing store. Jadi «saya mengecilkan Working Set» tidak berarti «saya memperbaiki kebocoran».

5. Halaman bersih pergi ke Standby

Bahkan setelah halaman dikeluarkan dari Working Set, jika isinya masih cocok dengan file asli atau sudah punya backing store yang aman, ia bisa diletakkan di Standby. Contoh representatif:

  • Kode EXE/DLL yang tidak diubah
  • File yang dipetakan di memori dan tidak diubah
  • Halaman privat yang sudah ditulis kembali
  • Data yang tersisa di cache file

Halaman Standby menjaga korespondensinya dengan isi sebelumnya. Ketika proses yang sama atau proses lain membutuhkan isi itu, jika halaman belum dipakai ulang, soft fault yang menyambungkan kembali PTE cukup untuk memulihkannya.

Di sisi lain, jika alokasi lain membutuhkan halaman fisik, identitas Standby lama bisa dibuang dan halaman dipakai ulang. Jika tujuan pakai ulang adalah halaman privat mode pengguna yang butuh inisialisasi nol, halaman Zeroed disiapkan; jika seluruh halaman akan ditimpa isi file atau serupa, ia bisa dialokasikan ulang langsung tanpa di-nol-kan.

Dua sisi ini justru alasan Standby sekaligus cache dan Available.

5.1. Mengapa Available mencakup Standby

MEMORYSTATUSEX.ullAvailPhys mewakili memori fisik yang bisa langsung dipakai ulang tanpa menulis ke disk, dan merupakan jumlah Standby, Free, dan Zeroed.1

Tiga daftar halaman yang membentuk AvailableMemori fisik tersedia adalah jumlah Standby, Free, dan Zeroed; halaman Active yang dirujuk di Working Set tidak termasukTidak termasukStandby(kandidat pakai ulang yang menjaga isinya)Available(memori fisik tersedia)Free(tidak terpakai, belum di-nol-kan)Zeroed(tidak terpakai dan sudah di-nol-kan)Active(dirujuk di Working Set)

Gambar 2: Available adalah jumlah Standby, Free, dan Zeroed. Standby yang masih menahan isinya juga dihitung sebagai «tersedia».

Jadi tidak kontradiksi ketika Task Manager menampilkan «Free rendah, tetapi Cached/Standby tinggi dan Available cukup». Windows tidak membiarkan RAM kosong menganggur; ia meninggalkan file dan kode yang baru dipakai di Standby agar bisa dipakai ulang cepat sebagai cache jika perlu, dan mengambilnya jika tujuan lain membutuhkannya.

Jangan simpulkan «Free rendah, jadi kita langsung kekurangan memori»; lihat Available, Commit, hard fault, dan tunda pemrosesan bersama-sama.

6. Halaman kotor menunggu di Modified

Ketika aplikasi menulis ke halaman, isi itu tidak lagi cocok dengan backing store asli. Menimpa halaman kotor itu untuk tujuan lain akan kehilangan data. Jadi halaman yang diubah dan dikeluarkan dari Working Set menunggu penulisan kembali di Modified.

Tujuan penulisan kembali bergantung pada jenis halaman.

Jenis halaman Tujuan penulisan kembali khas
Halaman privat yang di-Commit File page
File yang dipetakan dan bisa ditulis File data yang sesuai
Data kotor di cache file File data yang sesuai
Halaman EXE/DLL bersih Tidak perlu ditulis kembali. Bisa dibaca ulang dari citra asli

Dokumentasi file page Microsoft juga menjelaskan bahwa .dll, .exe, dan file biasa yang sudah ada di disk tidak perlu ditulis lagi ke file page, dan data yang diubah tanpa salinan disk asli menjadi kandidat file page.2

6.1. Modified Page Writer

Modified Page Writer adalah pekerja sistem yang memindai halaman kotor yang ditopang file page yang dilacak manajer memori, dan menulisnya ke file page.3 Di sisi file yang dipetakan ada jalur seperti Mapped Page Writer, yang bekerja sama dengan sistem file dan manajer cache untuk menulis kembali ke file yang sesuai.

Poin pentingnya adalah penulisan bukan skema «tidak melakukan apa-apa sampai RAM 0 byte». Windows menyiapkan di latar belakang halaman yang bisa dipakai ulang nanti, sesuai daftar Modified, Available, keadaan file page, dan faktor serupa. Ketika penulisan kembali selesai dan tidak ada referensi sah lain, halaman maju ke Standby dengan isinya utuh.

Jalur penulisan kembali halaman yang diubahHalaman yang diubah dan meninggalkan Working Set menunggu di daftar Modified; untuk halaman privat, jika file page dikonfigurasi, Modified Page Writer menulisnya ke file page, dan halaman file yang dipetakan ditulis kembali ke file data yang sesuai oleh Mapped Page Writer atau serupa, lalu maju ke Standby dengan isinya utuhHalaman privat(saat file page dikonfigurasi)Halaman file yang dipetakanHalaman yang diubah dan meninggalkan Working SetMenunggu penulisan kembali di daftar ModifiedModified Page Writer menulis ke file pageMapped Page Writer atau serupa menulis ke file yang sesuaiSetelah penulisan kembali, ke Standby dengan isi utuh

Gambar 3: Tujuan penulisan kembali ditentukan jenis halaman, dan kedua jalur berjalan di latar belakang. Pada sistem dengan file page dinonaktifkan, sisi halaman privat tidak punya tujuan penulisan kembali, jadi halaman privat yang diubah tetap di RAM.

6.2. Memisahkan keluaran halaman dan I/O khusus file page

Penghitung berikut mudah dikacaukan; pastikan artinya.

  • Memory\\Page Writes/sec: jumlah I/O tulis paging yang dikeluarkan untuk mengosongkan memori fisik
  • Memory\\Pages Output/sec: jumlah halaman yang ditulis ke disk oleh penulisan itu
  • Memory\\Page Reads/sec: jumlah I/O baca disk yang dikeluarkan untuk menyelesaikan hard fault
  • Memory\\Pages Input/sec: jumlah halaman yang masuk RAM dari pembacaan itu

Perhatikan bahwa Page Writes/sec dan Pages Output/sec bukan penghitung yang mengidentifikasi file page saja. Mereka juga bisa naik di jalur yang menulis kembali halaman kotor yang ditopang file, seperti file yang dipetakan. Sebaliknya, sisi masukan juga tidak membedakan file page, DLL, EXE, dan file yang dipetakan di memori.2 Jika ingin mengidentifikasi I/O khusus pagefile.sys, jangan perkirakan hanya dari empat penghitung ini; rekam File I/O dan Disk I/O dengan ETW/WPA dan pastikan file sasaran dengan mencocokkan FileObject dan FileName.9

Satu poin lagi: menulis dulu ke file page tidak berarti langsung membaca kembali dari disk. Jika halaman tidak diakses, halaman yang sudah ditulis kembali bisa dikeluarkan dari RAM dan memori fisik diberikan ke halaman yang lebih sering dipakai.

7. Perbedaan Standby, Free, dan Zeroed

7.1. Standby

Keadaan yang masih menjaga korespondensi dengan isi sebelumnya.

  • Jika isi yang sama dibutuhkan, ia bisa kembali lewat soft fault
  • Jika tujuan lain membutuhkannya, identitas lama bisa dibuang dan ia bisa dipakai ulang
  • Ada daftar Standby menurut prioritas

7.2. Free

Korespondensi sah dengan isi sebelumnya hilang, dan halaman bisa dialokasikan. Namun pola bit lama mungkin masih tersisa di halaman. Menyerahkannya ke mode pengguna apa adanya berisiko membocorkan informasi proses sebelumnya.

7.3. Zeroed

Isinya nol, dan halaman bisa diserahkan dengan aman sebagai halaman mode pengguna baru. Fault demand-zero di Bagian 1 adalah kasus representatif memperoleh halaman Zeroed yang tersedia dan mengikatnya ke PTE. Persiapan dari Free ke Zeroed dilakukan sesuai permintaan dan keadaan sistem.

Jadi meski «Free» dan «Zeroed» sama-sama tampak tidak terpakai, mereka berbeda dalam kesiapan terkait keamanan.

8. Toko kompresi memori — membuat satu tujuan lagi di dalam RAM

Mulai Windows 10, ketika ada tekanan memori manajer memori dalam beberapa kasus bisa mengompres halaman yang jarang dipakai di RAM alih-alih menulisnya ke disk segera. Kumpulan halaman terkompresi itu adalah toko kompresi.

Di implementasi awal Windows 10 toko kompresi dihitung di dalam Working Set proses System, tetapi di Windows terkini ia muncul di daftar proses debugger sebagai proses Memory Compression khusus. Jadi ketika menyelidiki jumlah kompresi saat ini, jangan hanya mengikuti Working Set proses System. Tujuannya sendiri — menjaga lebih banyak aplikasi di memori fisik dan mengurangi I/O disk — tidak berubah.1011

Namun ingat poin berikut.

  • Halaman terkompresi masih memakai RAM
  • Kompresi dan dekompresi punya biaya CPU
  • Kompresi tidak menghapus janji Commit
  • Tidak ada urutan tetap «selalu kompres, lalu file page»
  • Kebijakan berubah menurut jenis halaman, tekanan, dan riwayat akses

«Sedang digunakan (terkompresi)» di Task Manager tidak berarti kompresi mengosongkan memori fisik sepenuhnya. Toko kompresi bukan fitur yang membuat file page tidak perlu; ia menambahkan satu opsi yang memakai CPU untuk mengurangi I/O antara RAM dan penyimpanan.

9. Peran sebenarnya file page

File page punya setidaknya tiga peran.

Tiga peran file pageFile page memperlebar Commit Limit, menjadi backing store halaman privat yang diubah dan jarang diakses, dan menjadi wadah dump crash sistemFile pageMemperlebar Commit Limit(ruang di sisi plafon)Backing store halaman privat yang diubahWadah dump crash sistem

Gambar 4: Peran file page bukan hanya «RAM lambat». Bahkan ketika pemakaian 0 ia masih menopang plafon dan dump.

9.1. Memperlebar Commit Limit

Commit Limit sistem kira-kira ditentukan oleh RAM plus total semua file page. Tanpa file page, Commit Limit turun ke tingkat sedikit lebih kecil dari RAM terpasang. Ketika Commit Total mencapai plafon, Commit baru gagal dan bisa berujung pada penghentian aplikasi yang tidak normal atau gangguan sistem.4

Ini soal lain dari «berapa GB yang sedang ditulis ke pagefile.sys». File page juga ruang di sisi plafon yang menopang janji Commit.

9.2. Menopang halaman privat yang diubah

Jika halaman privat yang diubah dan jarang diakses ditopang file page, halaman fisik itu bisa dikeluarkan dari RAM dan diberikan ke kode serta data yang sering dipakai.4 Menonaktifkan file page mengurangi opsi mengeluarkan halaman semacam itu dari RAM. Tidak bisa dikatakan begitu saja «cepat karena paging out tidak terjadi».

9.3. Menopang dump crash sistem

Untuk menghasilkan Memory.dmp saat crash sistem, Anda butuh file page atau file dump khusus yang bisa menopang metode dump yang dipilih.2 Dump memori lengkap, dump memori kernel, dan dump memori otomatis berbeda jumlah yang dibutuhkan.

Di lingkungan yang menyelidiki crash, menghapus file page hanya untuk menghemat ruang bisa berarti bukti hilang saat paling dibutuhkan. Untuk metode pengumpulan, lihat juga «An Introduction to Collecting Windows Crash Dumps - WER/ProcDump/WinDbg».

10. Ukuran yang tepat tidak seragam

Anda tidak boleh memutuskan ukuran file page dari rumus tetap seperti «1,5 kali RAM» saja. Microsoft menjelaskan bahwa ukuran yang sesuai berbeda per sistem pada dua poin berikut dan tidak bisa digeneralisasi.2

  1. System Commit Charge puncak
  2. Dump crash sistem yang Anda butuhkan

Dalam praktik, pikirkan dalam urutan berikut.

10.1. Mulai dari dikelola sistem sebagai dasar

Default Windows adalah dikelola sistem. Ia tumbuh dan menyusut sesuai RAM terpasang, permintaan Commit, kebutuhan dump crash, dan sejenisnya. Kecuali ada batasan khusus atau hasil pengukuran, mulai dari sini adalah pilihan aman.

10.2. Ukur Commit puncak di bawah beban representatif

Kumpulkan penghitung berikut di PerfMon dalam jangka panjang.

  • Memory\\Committed Bytes
  • Memory\\Commit Limit
  • Memory\\% Committed Bytes In Use
  • Memory\\Modified Page List Bytes
  • Paging File(*)\\% Usage
  • Memory\\Available MBytes
  • Memory\\Page Reads/sec
  • Memory\\Page Writes/sec

Sertakan puncak aktual dalam periode pengumpulan — pemrosesan akhir bulan, cadangan, build, beberapa pengguna sekaligus, dan seterusnya.

Persentase pemakaian file page yang tinggi saja tidak membuktikan masalah kinerja penyimpanan. Namun menempel di plafon adalah peringatan kapasitas tidak cukup. Lihat bersama apakah Commit mendekati plafon, apakah banyak Modified menunggu, dan apakah disk jenuh.2

10.3. Putuskan kebutuhan dump dulu

Putuskan apakah Anda butuh dump memori lengkap, apakah dump memori kernel cukup, atau apakah akan memakai file dump khusus. Jika Anda mengubah ke ukuran tetap, ia harus memenuhi bukan hanya Commit puncak tetapi juga kebutuhan dump.

11. Lihat sendiri

11.1. Melihat daftar halaman di RAMMap

Mulai RAMMap sebagai administrator dan buka Use Counts dulu.7 Item yang dilihat adalah berikut.

  • Active
  • Standby
  • Modified
  • Modified no write
  • Free
  • Zeroed

Priority Summary memungkinkan memastikan Standby terbagi menurut prioritas. Processes menampilkan Working Set tiap proses; File Summary dan File Details memungkinkan mengikuti data file yang ada di RAM.

Sebagai percobaan, baca sekali file lokal yang cukup besar, akhiri pembacaan, lalu Refresh. Halaman file itu mungkin tetap di File Summary atau sisi Standby. Membaca file yang sama lagi bisa memulihkan halaman yang belum dipakai ulang tanpa I/O disk, atau dengan sedikit I/O. Hasil bervariasi menurut tekanan memori, antivirus, dan ukuran file, jadi lihat arah transisi keadaan daripada satu set angka.

Catat bahwa menu Empty RAMMap mengubah keadaan sistem secara buatan. Jangan kosongkan Standby sebagai perbaikan kinerja produksi; pakai hanya di lingkungan uji terisolasi.

11.2. Memisahkan Commit dan Touch dengan Testlimit

Testlimit adalah alat Sysinternals yang mensimulasikan kekurangan sumber daya memori, handle, proses, thread, dan sejenisnya. Pertama jalankan berikut terhadap biner yang Anda miliki dan pastikan versi serta penggunaan yang ditampilkan.

.\\testlimit64.exe -?

Berikut menargetkan Testlimit v5.24. Dalam sintaks resmi v5.24, -m [MB] mengalokasikan jumlah memori yang ditentukan, -d [MB] mengalokasikan dan Touch, -e [seconds] adalah interval alokasi, dan -c [count] adalah jumlah alokasi. Tentukan -c terakhir. Jika yang Anda lihat secara lokal berbeda, utamakan penggunaan itu.12

Lalu coba kecil di VM sekali pakai.

# -m 64: alokasikan 64 MiB, -e 1: interval 1 detik, -c 8: berhenti setelah 8 kali
.\\testlimit64.exe -m 64 -e 1 -c 8

# Jumlah dan interval yang sama, dengan -d agar tiap wilayah di-Touch
.\\testlimit64.exe -d 64 -e 1 -c 8

Sambil berjalan, catat berikut secara bersamaan.

  • «Tercommit X/Y» Task Manager
  • Active, Modified, dan Standby RAMMap
  • Memory\\Committed Bytes
  • Memory\\Commit Limit
  • Memory\\Available MBytes
  • Memory\\Modified Page List Bytes

Jika Anda benar-benar mereproduksi kehabisan Commit, jangan lakukan di PC host; naikkan jumlah langkah demi langkah di VM dengan snapshot. Jalankan yang otomatis mengalokasikan sampai plafon bisa membekukan layar, menghentikan proses secara tidak normal, dan kehilangan log. Tujuannya bukan membuat OS tidak stabil; tujuannya mengamati bahwa saat mendekati Commit Limit, Commit baru gagal.

12. Empat salah baca yang dihindari dalam praktik

12.1. «Standby tinggi, jadi kebocoran memori»

Standby adalah cache yang bisa dipakai ulang dan termasuk dalam Available. Nilai kebocoran dari apakah garis dasar Commit privat proses dan rincian alokasi terus tumbuh bahkan setelah beban berakhir.

12.2. «Memotong Working Set akan memperbaiki kebocoran»

Pemangkasan hanya mengubah residensi; ia tidak membebaskan Commit atau alokasi virtual. Saat diakses lagi halaman kembali lewat fault.

12.3. «Pemakaian file page 0, jadi tidak perlu»

File page menopang bukan hanya jumlah tulis saat ini tetapi juga Commit Limit dan dump crash. Memutuskan menghapusnya dari pemakaian sehari-hari saja kehilangan ruang puncak dan bukti saat gagal.

12.4. «Kompresi memori dulu, lalu selalu file page»

Kompresi bukan pipa serial tetap. Windows memilih secara dinamis menurut jenis halaman, efisiensi kompresi, beban CPU, tekanan memori, dan ada tidaknya backing store.

13. Ringkasan

  • Basis data PFN adalah buku besar yang menelusuri kepemilikan, referensi, perubahan, dan keadaan daftar halaman fisik.
  • Halaman bersih yang meninggalkan Working Set tetap di Standby dan bisa kembali lewat soft fault jika isi yang sama dibutuhkan.8
  • Halaman kotor menunggu di Modified dan ditulis kembali ke file page jika privat, atau ke file yang sesuai jika dipetakan, dan seterusnya.3
  • Available adalah jumlah Standby, Free, dan Zeroed; Standby besar saja bukan kekurangan memori.1
  • Kompresi memori mengompres halaman di RAM untuk mengurangi I/O, tetapi tidak menghapus peran Commit dan file page.10
  • File page menopang Commit Limit, halaman privat yang diubah, dan dump crash sistem.42
  • Ukuran yang sesuai ditentukan Commit puncak dan kebutuhan dump; tidak bisa diputuskan dengan pengali seragam.2
  • Pemangkasan Working Set dan pengosongan Standby bukan perbaikan kebocoran memori.

Lanjutan di Bagian 3, «Objek section dan copy-on-write: apa sebenarnya DLL dan pemetaan file».

Kita mengikuti mengapa halaman file dan DLL yang tetap di Standby terlihat dari beberapa proses sebagai halaman fisik yang sama.

Artikel terkait

Area konsultasi terkait

KomuraSoft LLC menangani investigasi tekanan memori aplikasi Windows, kehabisan Commit, paging, pertumbuhan Working Set, dan desain pengumpulan dump crash.

Tautan referensi

  1. Microsoft Learn, MEMORYSTATUSEX structure. Tentang ullAvailPhys adalah memori fisik yang bisa langsung dipakai ulang tanpa menulis ke disk, dan merupakan jumlah daftar Standby, Free, dan Zeroed.  2 3

  2. Microsoft Learn, How to determine the appropriate page file size for 64-bit versions of Windows. Tentang ukuran yang sesuai bergantung pada Commit puncak dan kebutuhan dump dan tidak bisa digeneralisasi; daftar Modified, pemakaian file page, penghitung terkait, dan file page dikelola sistem.  2 3 4 5 6 7 8

  3. Microsoft Learn, Data corruption on IO write. Tentang Modified Page Writer adalah pekerja sistem manajer memori yang memindai halaman kotor yang ditopang file page dan menulisnya.  2 3

  4. Microsoft Learn, Introduction to page files. Tentang file page mengeluarkan halaman yang diubah dan jarang diakses dari RAM, memperlebar Commit Limit, dan menopang dump crash sistem.  2 3 4

  5. Microsoft Learn, !pfn (WinDbg). Tentang bisa menampilkan keadaan, referensi, alamat PTE, dan lainnya dari entri PFN yang ditentukan. 

  6. Microsoft Learn, !memusage (WinDbg). Tentang bisa menjumlahkan pemakaian memori fisik dan keadaan halaman seperti Zeroed, Free, Standby, Modified, dan Active. 

  7. Microsoft Learn, RAMMap - Sysinternals. Tentang Use Counts, Processes, Priority Summary, Physical Pages, File Summary, dan File Details RAMMap menampilkan tujuan memori fisik dan daftar halaman.  2

  8. Microsoft Learn, Working Set. Tentang manajer memori memangkas Working Set untuk membuat memori tersedia, dan tentang bisa menyelesaikan halaman yang tetap di Transition atau Working Set proses lain dengan soft fault.  2

  9. Microsoft Learn, FileIo_Name class. Tentang peristiwa File I/O ETW punya FileObject dan FileName, sehingga FileObject bisa dicocokkan dengan peristiwa Disk I/O untuk mengidentifikasi I/O ke file sasaran. 

  10. Windows Insider Blog, Announcing Windows 10 Insider Preview Build 10525. Tentang implementasi toko kompresi awal Windows 10 yang menempatkan kumpulan halaman terkompresi di RAM di Working Set proses System dan mengurangi penulisan ke disk.  2

  11. Microsoft Learn, Find Process ID (PID) in Windows. Tentang contoh daftar proses Debugging Tools for Windows terkini yang menampilkan proses Memory Compression dengan PID terpisah di bawah System. 

  12. Microsoft Learn, Testlimit - Sysinternals. Tentang sintaks resmi Testlimit v5.24 di mana -m mengalokasikan memori, -d mengalokasikan dan Touch, -e adalah interval alokasi, dan -c adalah jumlah alokasi, dengan -c ditentukan terakhir. 

Artikel terbaru dengan tag yang sama untuk mendalami topik-topik terdekat.

Halaman-halaman ini menempatkan topik dalam konteks layanan dan keputusan yang lebih luas.

Artikel ini berkaitan langsung dengan layanan berikut.

Pertanyaan yang sering diajukan

Pertanyaan yang sering muncul dalam konsultasi tentang topik artikel ini.

Apakah halaman ditulis ke file page segera setelah meninggalkan Working Set?
Tidak. Halaman yang tidak diubah pindah ke Standby dengan isinya utuh dan menjadi cache yang bisa langsung dipakai ulang. Halaman yang diubah pindah ke Modified, dan setelah ditulis kembali ke file page atau file yang sesuai jika perlu, maju ke keadaan yang bisa dipakai ulang seperti Standby.
Apakah Available di Task Manager mencakup memori Standby?
Ya. Memori fisik tersedia yang dilaporkan Windows adalah jumlah Standby, Free, dan Zeroed. Standby masih menahan isi lama, tetapi karena bisa langsung dipakai ulang untuk tujuan lain jika perlu, ia dihitung sebagai memori tersedia.
Apakah penulisan ke file page baru dimulai setelah RAM habis sama sekali?
Tidak. Windows menulis kembali halaman yang diubah dan jarang diakses di latar belakang sesuai daftar Modified dan keadaan memori tersedia. Ini bukan mekanisme sederhana yang menunggu kehabisan mutlak lalu mengusir semuanya sekaligus.
Apakah menonaktifkan file page membuat Windows lebih cepat?
Tidak bisa dipastikan secara umum. Menonaktifkannya menurunkan Commit Limit, mempersulit mengeluarkan halaman yang diubah dan jarang diakses dari RAM, dan juga memengaruhi dump crash sistem. Biasanya dibiarkan dikelola sistem dan diputuskan dengan mengukur Commit puncak serta kebutuhan dump.
Jika ada kompresi memori, apakah file page tidak perlu?
Tidak menjadi tidak perlu. Toko kompresi mengompres halaman di RAM untuk mengurangi I/O, tetapi halaman terkompresi masih memakai memori fisik dan tidak mengganti jaminan Commit. Pilihan antara kompresi dan paging out adalah kebijakan dinamis manajer memori.

Profil penulis

Halaman perkenalan penulis artikel.

Go Komura

Direktur KomuraSoft LLC

Berspesialisasi dalam pengembangan perangkat lunak Windows, konsultasi teknis, dan investigasi bug, terutama pada proyek dengan sistem yang sudah ada dan bug yang sulit direproduksi.

Kembali ke blog