আগের নিবন্ধে, «Windows মেমরির গভীরতা (পর্ব ১) — যে মুহূর্তে ভার্চুয়াল ঠিকানা ভৌত RAM হয়», আমরা সেই মুহূর্ত পর্যন্ত অনুসরণ করেছি যখন পেজ-ফল্ট হ্যান্ডলার প্রথমবার ছোঁয়া Commit পেজে একটি ভৌত পেজ বরাদ্দ করে। তাহলে সেই ভৌত পেজ Working Set থেকে সরানোর পর কোথায় যায়?
ব্যাখ্যা প্রায়ই «পেজ ফাইলে তাড়ানো হয়»-এ সংকুচিত হয়, কিন্তু আগে ও পরে আসলে কয়েকটি অবস্থা আছে। অপরিবর্তিত পেজ বিষয়বস্তু রেখে Standby-তে যেতে পারে। পরিবর্তিত পেজ আগে Modified-এ ফেরত-লেখার অপেক্ষা করে। পুনর্ব্যবহারে সে Free বা Zeroed দিয়ে যেতে পারে, আর একই বিষয়বস্তু আবার লাগলে Standby থেকে সফট ফল্টে ফিরতে পারে।
এই নিবন্ধ PFN ডেটাবেসকে অক্ষ ধরে একটি ভৌত পেজ কীভাবে Active, Modified, Standby, Free ও Zeroed দিয়ে চলে অনুসরণ করে। সংখ্যা পড়া নিজেই ভূমিকা নিবন্ধ «What Does Windows’ “Memory Usage” Actually Mean? — Correctly Reading Working Set, Private Bytes, Commit, and the Page File» ধরে নেয়।
«Windows মেমরির গভীরতা» — সব ৩ পর্ব
- পর্ব ১: ভার্চুয়াল ঠিকানা ও পেজ ফল্ট
আমরা অনুসরণ করি কখন একটি Commit করা ভার্চুয়াল পেজ ভৌত RAM পায়। - পর্ব ২ (এই নিবন্ধ): একটি ভৌত পেজের জীবন
আমরা Working Set ছাড়া পেজের অবস্থা-পরিবর্তন ও পেজ ফাইলের ভূমিকা অনুসরণ করি। - পর্ব ৩: সেকশন অবজেক্ট ও কপি-অন-রাইট
আমরা সেই ব্যবস্থা অনুসরণ করি যাতে DLL, ফাইল ম্যাপিং ও ভাগ করা মেমরি ভৌত পেজ ভাগ করে।
পর্ব ২ যে প্রশ্নের উত্তর দেয় তা মাত্র একটি।
Working Set ছাড়া ভৌত পেজ কি হারিয়ে যায়, ডিস্কে যায়, নাকি RAM-এ থাকে?
উদ্দিষ্ট পাঠক সেই ডেভেলপার ও অপারেটর যারা ব্যবস্থা থেকে বুঝতে চান Available উঁচু হলেও Standby কেন উঁচু, Working Set ট্রিমের পর আচরণ, পেজ ফাইল কনফিগারেশন ও মেমরি সংকোচন। পূর্বশর্ত Windows 10/11 অথবা বর্তমান Windows Server, আর প্রয়োজনীয় পটভূমি Working Set, Commit ও সফট/হার্ড ফল্টের মৌলিক ধারণা। কঠিনতা মাঝারি; আমরা PFN ও পেজ তালিকার মতো অভ্যন্তরীণ শব্দ ব্যবহার করি, কিন্তু ফোকাস যা কার্নেল ডিবাগার ছাড়া RAMMap ও PerfMon দিয়ে দেখা যায়।
১. আগে উপসংহার
শুরুতে সেই পয়েন্ট যা ভুল পড়া সহজ।
- Working Set ছাড়া পেজ অবশ্যই সঙ্গে সঙ্গে হারায় না।
পরিষ্কার পেজ Standby-তে থাকে এবং একই বিষয়বস্তু লাগলে ডিস্ক না পড়ে ফিরতে পারে। - পরিবর্তিত পেজ সঙ্গে সঙ্গে পুনর্ব্যবহার করা যায় না।
প্রাইভেট বিষয়বস্তু পেজ ফাইলে ফেরত লেখা যাওয়ার পর পুনর্ব্যবহারযোগ্য হয়; ম্যাপ করা ফাইল, সংগত ফাইলে ফেরত লেখা যাওয়ার পর; ইত্যাদি। - Available-এ Standby আছে।
Standby এমন ক্যাশে যা এখনও বিষয়বস্তু ধরে, এবং একই সঙ্গে পুনর্ব্যবহার প্রার্থী যা প্রয়োজনে সঙ্গে সঙ্গে নেওয়া যায়।1 - পেজ ফাইলে লেখা এমন ব্যাচ কাজ নয় যা RAM সম্পূর্ণ শেষ হলে তবেই শুরু হয়।
Modified তালিকা ও মেমরি চাপ অনুসারে ব্যাকগ্রাউন্ডে এগোয়।23 - পেজ ফাইল শুধু «ধীর RAM» নয়।
এটি Commit Limit বাড়ায়, পরিবর্তিত প্রাইভেট পেজের ব্যাকিং স্টোর হয়, এবং ক্র্যাশ ডাম্প সমর্থন করে।4 - পেজ ফাইল বন্ধ করলে মেমরি লিক সারে না।
Commit Limit নামে, আর RAM কার্যকর ব্যবহারের বিকল্প ও ডাম্প ধরার ক্ষমতা হারাতে পারেন।
এক বাক্যে: Windows একটি পেজ ফেলার আগে যাচাই করে সে আবার লাগতে পারে কি না, এবং মূল বিষয়বস্তু ফেরানো যায় এমন জায়গা আছে কি না।
২. PFN ডেটাবেস — ভৌত-RAM পাশের খাতা
পর্ব ১-এ দেখা PTE ভার্চুয়াল পেজ থেকে ভৌত পেজে অনুবাদ দেখাত। যে খাতা এটি ভৌত-পেজ পাশ থেকে দেখে এবং অনুসরণ করে «এই RAM পেজ এখন কী কাজে» তা PFN ডেটাবেস। PFN মানে Page Frame Number: পেজ এককে নম্বর দেওয়া ভৌত RAM।
একটি PFN এন্ট্রি ধারণাগতভাবে নিচের তথ্য অনুসরণ করে।
- ভৌত পেজের বর্তমান অবস্থা
- রেফারেন্স গণনা ও শেয়ার গণনা
- সংগত PTE
- সে পরিবর্তিত কি না
- কোন পেজ তালিকায় সে
- NUMA নোড ও অগ্রাধিকার-সম্পর্কিত তথ্য
WinDbg-এ !pfn নির্দিষ্ট PFN-এর তথ্য দেখায়, আর !memusage ভৌত-মেমরি ব্যবহার ও প্রতি পেজ তালিকার যোগ দেখায়।56 কার্নেল ডিবাগার ছাড়া একই জগৎ দেখতে চাইলে Sysinternals RAMMap আছে। Use Counts উদ্দেশ্য ও পেজ তালিকা দেখায়, Priority Summary অগ্রাধিকার অনুসারে Standby, Physical Pages পেজপ্রতি ব্যবহার।7
৩. পাঁচ অবস্থা এক ছবিতে জোড়া
এই নিবন্ধ একটি ভৌত পেজের প্রবাহকে নিচের পাঁচ অবস্থা হিসেবে সরলীকৃত করে। কঠোরভাবে, বর্তমান Windows-এ এখানে না আঁকা অবস্থা ও তালিকা আছে — অগ্রাধিকার অনুসারে Standby, Transition, Bad ও অন্যান্য — আর Active একটি «Active তালিকা»র চেয়ে বৈধ PTE দিয়ে Working Set ইত্যাদি থেকে রেফারেন্স হওয়ার অবস্থা বোঝায়। তবু অ্যাপের মেমরি আচরণ পড়তে এই ছবি যথেষ্ট কাজে লাগে।
চিত্র ১: Working Set-এ রেফারেন্স করা পেজ পরিষ্কার হলে Standby-তে, নোংরা হলে Modified-এ যায়। একই বিষয়বস্তু ফিরতে পারে; অন্য কাজ পেজ সরাসরি পুনর্ব্যবহার করে অথবা শূন্য লাগে এমন বরাদ্দের জন্য Free/Zeroed দিয়ে যায়।
চিত্র 1-এর Mermaid সোর্স
```text flowchart LR zeroed["Zeroed\nশূন্য করা"] -->|প্রথম Touch| active["Active / Valid\nWorking Set-এ উল্লেখ"] active -->|clean ট্রিম| standby["Standby\nবিষয়বস্তু রেখে পুনঃব্যবহার প্রার্থী"] active -->|dirty ট্রিম| modified["Modified\nফেরত লেখার অপেক্ষা"] modified -->|লেখা শেষ| standby standby -->|সফট ফল্টে ফেরা| active standby -->|পুরনো পরিচয় ফেলা| free["Free\nএখনো শূন্য নয়"] standby -->|সরাসরি অন্য কাজে| active free -->|শূন্য দরকার এমন বরাদ্দে| zeroed ```এই ছবির সবচেয়ে গুরুত্বপূর্ণ কথা Working Set ছাড়া ও বিষয়বস্তু হারানো এক নয়। আর Standby পেজ অন্য কাজে নিলে সে অবশ্যই ক্রমে Free/Zeroed দিয়ে যায় না। নতুন demand-zero প্রাইভেট পেজ হিসেবে ইউজার মোডে দিলে পুরনো বিষয়বস্তু মুছতে হয়; পুরো পেজ ওভাররাইট হলে, যেমন ফাইল পড়ার গন্তব্য, Standby পরিচয় খুলে পেজ সরাসরি পুনর্ব্যবহার করা যায়।
৪. Active / Valid — এখন রেফারেন্স করা যায় এমন ভৌত পেজ
Active/Valid পেজ বৈধ PTE দিয়ে প্রক্রিয়ার Working Set বা সিস্টেম স্থান থেকে রেফারেন্স হয়। CPU সাধারণ ঠিকানা-অনুবাদে পৌঁছায়, তাই অ্যাক্সেস নিজে পেজ ফল্ট চায় না।
তবে পেজ Active থাকবে এমন গ্যারান্টি নেই। উপলব্ধ মেমরি রাখতে মেমরি ম্যানেজার Working Set আকার, পেজ কতটা সম্প্রতি ব্যবহৃত, ও অনুরূপ দেখে প্রার্থী পেজ ট্রিম করে। Microsoft-এর Working Set নথিও বলে মেমরি ম্যানেজার উপলব্ধ মেমরি তৈরি করতে Working Set থেকে পেজ সরায়।8
৪.১. ট্রিম মুক্তি নয়
Working Set ট্রিম মূলত যা বদলায় তা বৈধ PTE দিয়ে সঙ্গে সঙ্গে রেফারেন্সযোগ্য বাসিন্দা অবস্থা। নিচের চারটিকে আলাদা ঘটনা ধরুন।
- Working Set থেকে সরানো
- Commit মুক্ত করা
- ভার্চুয়াল ঠিকানা পরিসর মুক্ত করা
- মূল ডেটা হারানো
EmptyWorkingSet বা টুলের «Trim Working Set» চালানো VirtualFree বা হিপ ফ্রির বিকল্প নয়। একই পেজ আবার ছুঁলে সে Standby থেকে সফট ফল্টে বা ব্যাকিং স্টোর থেকে হার্ড ফল্টে ফেরে। তাই «Working Set ছোট করলাম» মানে «লিক সারলাম» নয়।
৫. পরিষ্কার পেজ Standby-তে যায়
পেজ Working Set থেকে সরানোর পরও, বিষয়বস্তু এখনও মূল ফাইলের সঙ্গে মিললে বা ইতিমধ্যে নিরাপদ ব্যাকিং স্টোর থাকলে তাকে Standby-তে রাখা যায়। প্রতিনিধিত্বমূলক উদাহরণ:
- অপরিবর্তিত EXE/DLL কোড
- অপরিবর্তিত মেমরি-ম্যাপ করা ফাইল
- ইতিমধ্যে ফেরত লেখা প্রাইভেট পেজ
- ফাইল ক্যাশে থাকা ডেটা
Standby পেজ আগের বিষয়বস্তুর সঙ্গে সম্পর্ক রাখে। একই প্রক্রিয়া বা অন্য প্রক্রিয়া সেই বিষয়বস্তু চাইলে, পেজ এখনও পুনর্ব্যবহার না হলে PTE আবার জোড়া সফট ফল্টই যথেষ্ট।
অন্যদিকে অন্য বরাদ্দ ভৌত পেজ চাইলে পুরনো Standby পরিচয় ফেলে পেজ পুনর্ব্যবহার করা যায়। পুনর্ব্যবহার গন্তব্য শূন্য আরম্ভ চায় এমন ইউজার-মোড প্রাইভেট পেজ হলে Zeroed পেজ তৈরি হয়; পুরো পেজ ফাইল বিষয়বস্তু ইত্যাদি দিয়ে ওভাররাইট হলে শূন্য না করে সরাসরি পুনর্নির্ধারণ করা যায়।
এই দ্বৈততাই Standby ক্যাশে এবং Available হওয়ার কারণ।
৫.১. Available-এ Standby কেন থাকে
MEMORYSTATUSEX.ullAvailPhys সেই ভৌত মেমরি বোঝায় যা ডিস্কে না লিখে সঙ্গে সঙ্গে পুনর্ব্যবহার করা যায়, আর তা Standby, Free ও Zeroed-এর যোগ।1
flowchart LR
accTitle: Available গঠনকারী তিন পেজ তালিকা
accDescr: উপলব্ধ ভৌত মেমরি Standby, Free ও Zeroed-এর যোগ; Working Set-এ রেফারেন্স করা Active পেজ অন্তর্ভুক্ত নয়
standby["Standby(বিষয়বস্তু রাখা পুনর্ব্যবহার প্রার্থী)"] --> avail["Available(উপলব্ধ ভৌত মেমরি)"]
free["Free(অব্যবহৃত, শূন্য নয়)"] --> avail
zeroed["Zeroed(অব্যবহৃত ও শূন্য)"] --> avail
active["Active(Working Set-এ রেফারেন্স)"] -.->|অন্তর্ভুক্ত নয়| avail
চিত্র ২: Available হল Standby, Free ও Zeroed-এর যোগ। বিষয়বস্তু এখনও ধরা Standbyও «উপলব্ধ» গণ্য হয়।
তাই টাস্ক ম্যানেজারে «Free কম, তবু Cached/Standby উঁচু ও Available যথেষ্ট» দেখালে বৈপরীত্য নয়। Windows খালি RAM অলস রাখে না; সম্প্রতি ব্যবহৃত ফাইল ও কোড Standby-তে রাখে যাতে প্রয়োজনে ক্যাশে হিসেবে দ্রুত পুনর্ব্যবহার হয়, আর অন্য কাজ চাইলে নেয়।
«Free কম, তাই সঙ্গে সঙ্গে মেমরি কম» সিদ্ধান্ত নেবেন না; Available, Commit, হার্ড ফল্ট ও প্রক্রিয়াকরণ বিলম্ব একসঙ্গে দেখুন।
৬. নোংরা পেজ Modified-এ অপেক্ষা করে
অ্যাপ পেজে লিখলে সেই বিষয়বস্তু আর মূল ব্যাকিং স্টোরের সঙ্গে মিলে না। সেই নোংরা পেজ অন্য কাজে ওভাররাইট করলে ডেটা হারায়। তাই Working Set থেকে সরানো পরিবর্তিত পেজ Modified-এ ফেরত-লেখার অপেক্ষা করে।
ফেরত-লেখার গন্তব্য পেজের ধরন অনুসারে বদলায়।
| পেজের ধরন | সাধারণ ফেরত-লেখার গন্তব্য |
|---|---|
| প্রাইভেট Commit পেজ | পেজ ফাইল |
| লেখার যোগ্য ম্যাপ করা ফাইল | সংগত ডেটা ফাইল |
| ফাইল ক্যাশের নোংরা ডেটা | সংগত ডেটা ফাইল |
| পরিষ্কার EXE/DLL পেজ | ফেরত-লেখা লাগে না। মূল ইমেজ থেকে আবার পড়া যায় |
Microsoft-এর পেজ ফাইল নথিও বলে ডিস্কে আগে থেকে থাকা .dll, .exe ও সাধারণ ফাইল পেজ ফাইলে আবার লেখার দরকার নেই, আর মূল ডিস্ক কপিহীন পরিবর্তিত ডেটাই পেজ ফাইলের প্রার্থী হয়।2
৬.১. Modified Page Writer
Modified Page Writer একটি সিস্টেম ওয়ার্কার যা মেমরি ম্যানেজার ট্র্যাক করা, পেজ ফাইল-ব্যাক করা নোংরা পেজ স্ক্যান করে পেজ ফাইলে লেখে।3 ম্যাপ করা ফাইল পাশে Mapped Page Writer-এর মতো পথ আছে, যা ফাইল সিস্টেম ও ক্যাশ ম্যানেজারের সঙ্গে মিলে সংগত ফাইলে ফেরত লেখে।
এখানে গুরুত্বপূর্ণ, লেখা «RAM ০ বাইট না হওয়া পর্যন্ত কিছু না করা» নয়। Windows ভবিষ্যতে পুনর্ব্যবহারযোগ্য পেজ ব্যাকগ্রাউন্ডে তৈরি করে, Modified তালিকা, Available, পেজ ফাইলের অবস্থা ইত্যাদি অনুসারে। ফেরত-লেখা শেষ ও অন্য বৈধ রেফারেন্স না থাকলে পেজ বিষয়বস্তু রেখে Standby-তে এগোয়।
flowchart TB
accTitle: পরিবর্তিত পেজের ফেরত-লেখার পথ
accDescr: Working Set ছাড়া পরিবর্তিত পেজ Modified তালিকায় অপেক্ষা করে; প্রাইভেট পেজের জন্য পেজ ফাইল কনফিগার থাকলে Modified Page Writer পেজ ফাইলে লেখে, আর ম্যাপ করা ফাইলের পেজ Mapped Page Writer ইত্যাদি সংগত ডেটা ফাইলে ফেরত লেখে, তারপর বিষয়বস্তু রেখে Standby-তে যায়
dirty["Working Set ছাড়া পরিবর্তিত পেজ"] --> modified["Modified তালিকায় ফেরত-লেখার অপেক্ষা"]
modified -->|"প্রাইভেট পেজ(পেজ ফাইল কনফিগার থাকলে)"| mpw["Modified Page Writer পেজ ফাইলে লেখে"]
modified -->|ম্যাপ করা ফাইলের পেজ| mapped["Mapped Page Writer ইত্যাদি সংগত ফাইলে ফেরত লেখে"]
mpw --> standby["ফেরত-লেখার পর, বিষয়বস্তু রেখে Standby"]
mapped --> standby
চিত্র ৩: ফেরত-লেখার গন্তব্য পেজের ধরনে নির্ধারিত, আর দুই পথই ব্যাকগ্রাউন্ডে চলে। পেজ ফাইল বন্ধ সিস্টেমে প্রাইভেট-পেজ পাশের ফেরত-লেখার গন্তব্য নেই, তাই পরিবর্তিত প্রাইভেট পেজ RAM-এ থাকে।
৬.২. পেজ আউটপুট ও পেজ-ফাইল-নির্দিষ্ট I/O আলাদা করা
নিচের কাউন্টার সহজে গুলিয়ে যায়; অর্থ নিশ্চিত করুন।
Memory\\Page Writes/sec: ভৌত মেমরি খালি করতে জারি পেজিং লেখার I/O সংখ্যাMemory\\Pages Output/sec: সেই লেখায় ডিস্কে যাওয়া পেজ সংখ্যাMemory\\Page Reads/sec: হার্ড ফল্ট সমাধানে জারি ডিস্ক-পড়ার I/O সংখ্যাMemory\\Pages Input/sec: সেই পড়ায় RAM-এ আসা পেজ সংখ্যা
খেয়াল করুন Page Writes/sec ও Pages Output/sec শুধু পেজ ফাইল চিহ্নিত করে না। ম্যাপ করা ফাইলের মতো ফাইল-ব্যাক করা নোংরা পেজ ফেরত লেখার পথেও বাড়তে পারে। উল্টো, ইনপুট পাশও পেজ ফাইল, DLL, EXE ও মেমরি-ম্যাপ ফাইল আলাদা করে না।2 pagefile.sys-নির্দিষ্ট I/O চিনতে চাইলে এই চার কাউন্টার একা থেকে অনুমান করবেন না; ETW/WPA দিয়ে File I/O ও Disk I/O রেকর্ড করে FileObject ও FileName মিলিয়ে লক্ষ্য ফাইল নিশ্চিত করুন।9
আরও একটি কথা: আগে পেজ ফাইলে লেখা মানে সঙ্গে সঙ্গে ডিস্ক থেকে ফেরত পড়া নয়। পেজ অ্যাক্সেস না হলে ফেরত-লেখা পেজ RAM থেকে সরিয়ে বেশি ব্যবহৃত পেজে ভৌত মেমরি দেওয়া যায়।
৭. Standby, Free ও Zeroed-এর পার্থক্য
৭.১. Standby
এমন অবস্থা যা এখনও আগের বিষয়বস্তুর সঙ্গে সম্পর্ক রাখে।
- একই বিষয়বস্তু লাগলে সফট ফল্টে ফিরতে পারে
- অন্য কাজ চাইলে পুরনো পরিচয় ফেলে পুনর্ব্যবহার করা যায়
- অগ্রাধিকার অনুসারে Standby তালিকা আছে
৭.২. Free
আগের বিষয়বস্তুর বৈধ সম্পর্ক হারিয়েছে, আর পেজ বরাদ্দযোগ্য। তবে পুরনো বিট প্যাটার্ন পেজে থাকতে পারে। ইউজার মোডে যেমন তেমন দিলে আগের প্রক্রিয়ার তথ্য লিক হওয়ার ঝুঁকি।
৭.৩. Zeroed
বিষয়বস্তু শূন্য, আর নতুন ইউজার-মোড পেজ হিসেবে নিরাপদে দেওয়া যায়। পর্ব ১-এর demand-zero ফল্ট উপলব্ধ Zeroed পেজ পেয়ে PTE-তে বাঁধার প্রতিনিধিত্বমূলক ঘটনা ছিল। Free থেকে Zeroed প্রস্তুতি চাহিদা ও সিস্টেম অবস্থা অনুসারে হয়।
তাই «Free» ও «Zeroed» দুটোই অব্যবহৃত দেখালেও নিরাপত্তা-সম্পর্কিত প্রস্তুতিতে আলাদা।
৮. মেমরি সংকোচন স্টোর — RAM-এর ভিতরে আর একটি গন্তব্য
Windows 10 থেকে মেমরি চাপ থাকলে মেমরি ম্যানেজার কিছু ক্ষেত্রে কম-ব্যবহৃত পেজ সঙ্গে সঙ্গে ডিস্কে না লিখে RAM-এ সংকোচন করতে পারে। সেই সংকুচিত পেজের সংগ্রহ সংকোচন স্টোর।
প্রথমদিকের Windows 10 বাস্তবায়নে সংকোচন স্টোর System প্রক্রিয়ার Working Set-এ গণ্য হত, কিন্তু বর্তমান Windows-এ ডিবাগার প্রক্রিয়া তালিকায় আলাদা Memory Compression প্রক্রিয়া হিসেবে দেখায়। তাই বর্তমান সংকোচন পরিমাণ খুঁজতে শুধু System প্রক্রিয়ার Working Set অনুসরণ করবেন না। উদ্দেশ্য নিজে — আরও অ্যাপ ভৌত মেমরিতে রাখা ও ডিস্ক I/O কমানো — বদলায়নি।1011
তবে নিচের কথা মনে রাখুন।
- সংকুচিত পেজও RAM ব্যবহার করে
- সংকোচন ও বিস্তারে CPU খরচ আছে
- সংকোচন Commit প্রতিশ্রুতি মুছে না
- «সবসময় আগে সংকোচন, তারপর পেজ ফাইল» স্থির ক্রম নেই
- নীতি পেজের ধরন, চাপ ও অ্যাক্সেস ইতিহাস অনুসারে বদলায়
টাস্ক ম্যানেজারের «ব্যবহারে (সংকুচিত)» মানে সংকোচন ভৌত মেমরি সম্পূর্ণ খালি করেছে নয়। সংকোচন স্টোর এমন বৈশিষ্ট্য নয় যা পেজ ফাইল অপ্রয়োজনীয় করে; এটি RAM ও স্টোরেজের মাঝে I/O কমাতে CPU ব্যবহারের একটি বিকল্প যোগ করে।
৯. পেজ ফাইলের আসল ভূমিকা
পেজ ফাইলের অন্তত তিনটি ভূমিকা আছে।
flowchart LR
accTitle: পেজ ফাইলের তিন ভূমিকা
accDescr: পেজ ফাইল Commit Limit বাড়ায়, কম-অ্যাক্সেস করা পরিবর্তিত প্রাইভেট পেজের ব্যাকিং স্টোর হয়, এবং সিস্টেম ক্র্যাশ ডাম্পের পাত্র হয়
pagefile["পেজ ফাইল"] --> limit["Commit Limit বাড়ানো(ছাদের পাশের ফাঁকা)"]
pagefile --> backing["পরিবর্তিত প্রাইভেট পেজের ব্যাকিং স্টোর"]
pagefile --> dump["সিস্টেম ক্র্যাশ ডাম্পের পাত্র"]
চিত্র ৪: পেজ ফাইলের ভূমিকা শুধু «ধীর RAM» নয়। ব্যবহার ০ হলেও সে ছাদ ও ডাম্প সমর্থন করে।
৯.১. Commit Limit বাড়ানো
সিস্টেমের Commit Limit মোটামুটি RAM যোগ সব পেজ ফাইলের মোট দিয়ে নির্ধারিত। পেজ ফাইল ছাড়া Commit Limit ইনস্টল করা RAM-এর চেয়ে একটু ছোট স্তরে নামে। Commit Total ছাদে পৌঁছালে নতুন Commit ব্যর্থ হয় এবং অস্বাভাবিক অ্যাপ সমাপ্তি বা সিস্টেম সমস্যায় যেতে পারে।4
এটি «এখন pagefile.sys-এ কত GB লেখা» থেকে আলাদা কথা। পেজ ফাইল Commit প্রতিশ্রুতি সমর্থনকারী ছাদের পাশের ফাঁকাও।
৯.২. পরিবর্তিত প্রাইভেট পেজ সমর্থন
কম-অ্যাক্সেস করা পরিবর্তিত প্রাইভেট পেজ পেজ ফাইলে ব্যাক থাকলে সেই ভৌত পেজ RAM থেকে সরিয়ে ঘন-ব্যবহৃত কোড ও ডেটাকে দেওয়া যায়।4 পেজ ফাইল বন্ধ করলে এমন পেজ RAM থেকে সরানোর বিকল্প কমে। শুধু বলা যায় না «পেজ আউট হয় না বলে দ্রুত»।
৯.৩. সিস্টেম ক্র্যাশ ডাম্প সমর্থন
সিস্টেম ক্র্যাশে Memory.dmp তৈরি করতে এমন পেজ ফাইল বা নিবেদিত ডাম্প ফাইল লাগে যা বেছে নেওয়া ডাম্প পদ্ধতি সমর্থন করতে পারে।2 সম্পূর্ণ মেমরি ডাম্প, কার্নেল মেমরি ডাম্প ও স্বয়ংক্রিয় মেমরি ডাম্প প্রয়োজনীয় পরিমাণে আলাদা।
ক্র্যাশ অনুসন্ধানের পরিবেশে শুধু জায়গা বাঁচাতে পেজ ফাইল মুছলে সবচেয়ে দরকারে প্রমাণ নাও থাকতে পারে। সংগ্রহ পদ্ধতির জন্য «An Introduction to Collecting Windows Crash Dumps - WER/ProcDump/WinDbg»ও দেখুন।
১০. সঠিক আকার একরকম নয়
«RAM-এর ১.৫ গুণ»-এর মতো স্থির সূত্র একা দিয়ে পেজ ফাইলের আকার ঠিক করা উচিত নয়। Microsoft বলে উপযুক্ত আকার নিচের দুই পয়েন্টে সিস্টেমভেদে আলাদা এবং সাধারণীকরণ যায় না।2
- শীর্ষ System Commit Charge
- আপনার দরকার সিস্টেম ক্র্যাশ ডাম্প
বাস্তবে এই ক্রমে ভাবুন।
১০.১. সিস্টেম-পরিচালিতকে ভিত্তি ধরে শুরু
Windows ডিফল্ট সিস্টেম-পরিচালিত। ইনস্টল করা RAM, Commit চাহিদা, ক্র্যাশ-ডাম্প প্রয়োজন ইত্যাদি অনুসারে বাড়ে-কমে। বিশেষ বাধা বা মাপের ফল না থাকলে এখান থেকে শুরু নিরাপদ।
১০.২. প্রতিনিধিত্বমূলক লোডে শীর্ষ Commit মাপুন
PerfMon-এ নিচের কাউন্টার দীর্ঘ সময় সংগ্রহ করুন।
Memory\\Committed BytesMemory\\Commit LimitMemory\\% Committed Bytes In UseMemory\\Modified Page List BytesPaging File(*)\\% UsageMemory\\Available MBytesMemory\\Page Reads/secMemory\\Page Writes/sec
সংগ্রহ সময়ে প্রকৃত শীর্ষ রাখুন — মাস-শেষ প্রক্রিয়া, ব্যাকআপ, বিল্ড, একাধিক ব্যবহারকারী একসঙ্গে ইত্যাদি।
উঁচু পেজ-ফাইল ব্যবহার শতাংশ একা স্টোরেজ-পারফরম্যান্স সমস্যা প্রমাণ করে না। তবে ছাদে সেঁটে থাকা অপর্যাপ্ত ধারণক্ষমতার সতর্কতা। একসঙ্গে দেখুন Commit ছাদের কাছে কি না, অনেক Modified অপেক্ষা করছে কি না, ডিস্ক পরিপূর্ণ কি না।2
১০.৩. আগে ডাম্প প্রয়োজন ঠিক করুন
ঠিক করুন সম্পূর্ণ মেমরি ডাম্প লাগে কি না, কার্নেল মেমরি ডাম্প যথেষ্ট কি না, নাকি নিবেদিত ডাম্প ফাইল ব্যবহার করবেন। স্থির আকারে বদলালে শুধু শীর্ষ Commit নয়, ডাম্প প্রয়োজনও মেটাতে হবে।
১১. নিজের চোখে দেখুন
১১.১. RAMMap-এ পেজ তালিকা দেখা
প্রশাসক হিসেবে RAMMap চালিয়ে আগে Use Counts খুলুন।7 দেখার আইটেম নিচেরগুলো।
- Active
- Standby
- Modified
- Modified no write
- Free
- Zeroed
Priority Summary নিশ্চিত করতে দেয় Standby অগ্রাধিকার অনুসারে ভাগ। Processes প্রতি প্রক্রিয়ার Working Set দেখায়; File Summary ও File Details RAM-এ থাকা ফাইল ডেটা অনুসরণ করতে দেয়।
পরীক্ষা হিসেবে মোটামুটি বড় স্থানীয় ফাইল একবার পড়ুন, পড়া শেষ করে Refresh করুন। সেই ফাইলের পেজ File Summary বা Standby পাশে থাকতে পারে। একই ফাইল আবার পড়লে এখনও পুনর্ব্যবহার না হওয়া পেজ ডিস্ক I/O ছাড়া, বা কম I/O-তে ফিরতে পারে। ফল মেমরি চাপ, অ্যান্টিভাইরাস ও ফাইল আকারে বদলায়, তাই এক সেট সংখ্যার চেয়ে অবস্থা-পরিবর্তনের দিক দেখুন।
খেয়াল করুন RAMMap-এর Empty মেনু সিস্টেম অবস্থা কৃত্রিমভাবে বদলায়। উৎপাদন পারফরম্যান্স উন্নতি হিসেবে Standby খালি করবেন না; শুধু বিচ্ছিন্ন পরীক্ষা পরিবেশে ব্যবহার করুন।
১১.২. Testlimit দিয়ে Commit ও Touch আলাদা করা
Testlimit Sysinternals টুল যা মেমরি, হ্যান্ডেল, প্রক্রিয়া, থ্রেড ইত্যাদির সম্পদ ঘাটতি অনুকরণ করে। আগে হাতের বাইনারিতে নিচেরটি চালিয়ে দেখানো সংস্করণ ও ব্যবহার নিশ্চিত করুন।
.\\testlimit64.exe -?
নিচেরটি Testlimit v5.24 লক্ষ্য করে। অফিসিয়াল v5.24 সিনট্যাক্সে -m [MB] নির্দিষ্ট পরিমাণ মেমরি বরাদ্দ করে, -d [MB] বরাদ্দ ও Touch, -e [seconds] বরাদ্দ ব্যবধান, -c [count] বরাদ্দ সংখ্যা। -c শেষে দিন। স্থানীয় দেখা আলাদা হলে সেই ব্যবহার অগ্রাধিকার দিন।12
তারপর একবার ব্যবহার করা VM-এ ছোট করে চেষ্টা করুন।
# -m 64: 64 MiB বরাদ্দ, -e 1: 1-সেকেন্ড ব্যবধান, -c 8: 8 বার পর থামুন
.\\testlimit64.exe -m 64 -e 1 -c 8
# একই সংখ্যা ও ব্যবধান, -d দিয়ে প্রতি অঞ্চল Touch
.\\testlimit64.exe -d 64 -e 1 -c 8
চলাকালে একসঙ্গে নিচেরটি রেকর্ড করুন।
- টাস্ক ম্যানেজারের «Committed X/Y»
- RAMMap-এর Active, Modified ও Standby
Memory\\Committed BytesMemory\\Commit LimitMemory\\Available MBytesMemory\\Modified Page List Bytes
সত্যি Commit শেষ অনুকরণ করলে হোস্ট PC-তে করবেন না; স্ন্যাপশট নেওয়া VM-এ সংখ্যা ধাপে ধাপে বাড়ান। ছাদ পর্যন্ত স্বয়ংক্রিয় বরাদ্দ স্ক্রিন জমাতে পারে, প্রক্রিয়া অস্বাভাবিক শেষ করতে পারে, লগ হারাতে পারে। উদ্দেশ্য OS অস্থির করা নয়; দেখা যে Commit Limit-এর কাছে গেলে নতুন Commit ব্যর্থ হয়।
১২. বাস্তবে এড়ানো চার ভুল পঠন
১২.১. «Standby উঁচু, তাই মেমরি লিক»
Standby পুনর্ব্যবহারযোগ্য ক্যাশে এবং Available-এ আছে। লোড শেষের পরেও প্রক্রিয়া-প্রাইভেট Commit ভিত্তিরেখা ও বরাদ্দ বিভাজন বাড়তে থাকে কি না দিয়ে লিক বিচার করুন।
১২.২. «Working Set কাটলে লিক সারবে»
ট্রিম শুধু বাসিন্দা অবস্থা বদলায়; Commit বা ভার্চুয়াল বরাদ্দ মুক্ত করে না। আবার অ্যাক্সেস করলে পেজ ফল্টে ফেরে।
১২.৩. «পেজ-ফাইল ব্যবহার ০, তাই অপ্রয়োজনীয়»
পেজ ফাইল শুধু বর্তমান লেখার পরিমাণ নয়, Commit Limit ও ক্র্যাশ ডাম্পও সমর্থন করে। শুধু দৈনন্দিন ব্যবহার দেখে মুছলে শীর্ষ ফাঁকা ও ব্যর্থতার প্রমাণ হারান।
১২.৪. «আগে মেমরি সংকোচন, তারপর সবসময় পেজ ফাইল»
সংকোচন স্থির সিরিয়াল পাইপলাইন নয়। Windows পেজের ধরন, সংকোচন দক্ষতা, CPU লোড, মেমরি চাপ ও ব্যাকিং স্টোর আছে কি না অনুসারে গতিশীল বেছে নেয়।
১৩. সারসংক্ষেপ
- PFN ডেটাবেস সেই খাতা যা ভৌত পেজের মালিকানা, রেফারেন্স, পরিবর্তন ও পেজ-তালিকা অবস্থা অনুসরণ করে।
- Working Set ছাড়া পরিষ্কার পেজ Standby-তে থাকে এবং একই বিষয়বস্তু লাগলে সফট ফল্টে ফিরতে পারে।8
- নোংরা পেজ Modified-এ অপেক্ষা করে এবং প্রাইভেট হলে পেজ ফাইলে, ম্যাপ হলে সংগত ফাইলে ফেরত লেখা হয়।3
- Available হল Standby, Free ও Zeroed-এর যোগ; বড় Standby একা মেমরি ঘাটতি নয়।1
- মেমরি সংকোচন I/O কমাতে RAM-এ পেজ সংকোচন করে, কিন্তু Commit ও পেজ ফাইলের ভূমিকা মুছে না।10
- পেজ ফাইল Commit Limit, পরিবর্তিত প্রাইভেট পেজ ও সিস্টেম ক্র্যাশ ডাম্প সমর্থন করে।42
- উপযুক্ত আকার শীর্ষ Commit ও ডাম্প প্রয়োজনে নির্ধারিত; একরকম গুণকে ঠিক করা যায় না।2
- Working Set ট্রিম ও Standby খালি করা মেমরি-লিক সারা নয়।
চলবে পর্ব ৩, «সেকশন অবজেক্ট ও কপি-অন-রাইট: DLL ও ফাইল ম্যাপিং আসলে কী»।
আমরা অনুসরণ করি কেন Standby-তে থাকা ফাইল পেজ ও DLL একাধিক প্রক্রিয়া থেকে একই ভৌত পেজ দেখায়।
সম্পর্কিত নিবন্ধ
- Windows মেমরির গভীরতা (পর্ব ১) — যে মুহূর্তে ভার্চুয়াল ঠিকানা ভৌত RAM হয়
- What Does Windows’ “Memory Usage” Actually Mean? — Correctly Reading Working Set, Private Bytes, Commit, and the Page File
- The Depths of Windows I/O (Part 4) — Cache Manager: When Does Your WriteFile Actually Reach the Disk?
- An Introduction to Collecting Windows Crash Dumps - WER/ProcDump/WinDbg
- Process Explorer / Handle / VMMap in Practice — Chasing Hangs, Leaks, and “File in Use” from the State Right Now
সম্পর্কিত পরামর্শ ক্ষেত্র
KomuraSoft LLC Windows অ্যাপ্লিকেশনের মেমরি চাপ, Commit শেষ, পেজিং, Working Set বৃদ্ধি ও ক্র্যাশ-ডাম্প সংগ্রহ নকশার অনুসন্ধান করে।
- Windows অ্যাপ্লিকেশন ডেভেলপমেন্ট
- বাগ অনুসন্ধান ও মূল কারণ বিশ্লেষণ
- বিদ্যমান অ্যাসেটের পুনর্ব্যবহার ও মাইগ্রেশন
- যোগাযোগ করুন
তথ্যসূত্র
-
Microsoft Learn, MEMORYSTATUSEX structure.
ullAvailPhysডিস্কে না লিখে সঙ্গে সঙ্গে পুনর্ব্যবহারযোগ্য ভৌত মেমরি, আর Standby, Free ও Zeroed তালিকার যোগ। ↩ ↩2 ↩3 -
Microsoft Learn, How to determine the appropriate page file size for 64-bit versions of Windows. উপযুক্ত আকার শীর্ষ Commit ও ক্র্যাশ-ডাম্প প্রয়োজনে নির্ভর করে সাধারণীকরণ যায় না; Modified তালিকা, পেজ-ফাইল ব্যবহার, সম্পর্কিত কাউন্টার ও সিস্টেম-পরিচালিত পেজ ফাইল। ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8
-
Microsoft Learn, Data corruption on IO write. Modified Page Writer মেমরি ম্যানেজারের সিস্টেম ওয়ার্কার যা পেজ ফাইল-ব্যাক করা নোংরা পেজ স্ক্যান করে লেখে। ↩ ↩2 ↩3
-
Microsoft Learn, Introduction to page files. পেজ ফাইল কম-অ্যাক্সেস করা পরিবর্তিত পেজ RAM থেকে সরায়, Commit Limit বাড়ায়, সিস্টেম ক্র্যাশ ডাম্প সমর্থন করে। ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, !pfn (WinDbg). নির্দিষ্ট PFN এন্ট্রির অবস্থা, রেফারেন্স, PTE ঠিকানা ইত্যাদি দেখানো যায়। ↩
-
Microsoft Learn, !memusage (WinDbg). ভৌত-মেমরি ব্যবহার ও Zeroed, Free, Standby, Modified, Active-এর মতো পেজ অবস্থা যোগ করা যায়। ↩
-
Microsoft Learn, RAMMap - Sysinternals. RAMMap-এর Use Counts, Processes, Priority Summary, Physical Pages, File Summary ও File Details ভৌত-মেমরি উদ্দেশ্য ও পেজ তালিকা দেখায়। ↩ ↩2
-
Microsoft Learn, Working Set. মেমরি ম্যানেজার উপলব্ধ মেমরি তৈরি করতে Working Set ট্রিম করে, আর Transition বা অন্য প্রক্রিয়ার Working Set-এ থাকা পেজ সফট ফল্টে সমাধান করা যায়। ↩ ↩2
-
Microsoft Learn, FileIo_Name class. ETW File I/O ইভেন্টে FileObject ও FileName থাকে, তাই FileObject Disk I/O ইভেন্টের সঙ্গে মিলিয়ে লক্ষ্য ফাইলের I/O চেনা যায়। ↩
-
Windows Insider Blog, Announcing Windows 10 Insider Preview Build 10525. Windows 10-এর প্রথমদিকের সংকোচন-স্টোর বাস্তবায়ন RAM-এর সংকুচিত পেজ সংগ্রহ System প্রক্রিয়ার Working Set-এ রেখে ডিস্কে লেখা কমায়। ↩ ↩2
-
Microsoft Learn, Find Process ID (PID) in Windows. বর্তমান Debugging Tools for Windows প্রক্রিয়া-তালিকা উদাহরণে System-এর নিচে আলাদা PID-এর
Memory Compressionপ্রক্রিয়া দেখায়। ↩ -
Microsoft Learn, Testlimit - Sysinternals. Testlimit v5.24 অফিসিয়াল সিনট্যাক্সে
-mমেমরি বরাদ্দ করে,-dবরাদ্দ ও Touch,-eবরাদ্দ ব্যবধান,-cবরাদ্দ সংখ্যা,-cশেষে। ↩
সম্পর্কিত নিবন্ধ
কাছাকাছি বিষয়ে গভীরে যেতে একই ট্যাগযুক্ত সাম্প্রতিক নিবন্ধ।
Windows মেমরির গভীরতা (পর্ব ৩) — সেকশন অবজেক্ট ও কপি-অন-রাইট: DLL ও ফাইল ম্যাপিং আসলে কী
এই নিবন্ধ সেকশন অবজেক্ট, ইমেজ ও ডেটা ম্যাপিং, শেয়ার্ড ক্যাশ এবং কপি-অন-রাইট জুড়ে ব্যাখ্যা করে DLL ও শেয়ার্ড মেমরি কীভাবে ভৌত পেজ ভাগ করে।
Windows ভার্চুয়ালাইজেশনের গভীরতা (পর্ব ৩) — সেকেন্ডে বুট হওয়া ভার্চুয়াল মেশিন: WSL2, Windows Sandbox ও কন্টেইনার এত হালকা কেন
WSL2 ও Windows Sandbox সেকেন্ডে শুরু হয়ে এত হালকা মনে হয় কেন? এই নিবন্ধ ডায়নামিক বেস ইমেজ ও ডাইরেক্ট ম্যাপ থেকে ডায়নামিক মেমরি বরাদ্দ...
Windows ভার্চুয়ালাইজেশনের গভীরতা (পর্ব ২) — কার্নেলও দেখতে পায় না এমন মেমরি: VBS, HVCI ও Credential Guard কীভাবে কাজ করে
সামঞ্জস্যপূর্ণ হার্ডওয়্যারে ক্লিন ইনস্টলে VBS ডিফল্টে চালু থাকে এবং হাইপারভাইজার ও SLAT দিয়ে কার্নেলের চেয়ে শক্তিশালী আইসোলেশন তৈরি কর...
Windows ভার্চুয়ালাইজেশনের গভীরতা (পর্ব ১) — আপনার Windows আসলে কোথায় চলছে? হাইপারভাইজার ও পার্টিশন
Hyper-V চালু করলে হোস্ট Windows নিজেই রুট পার্টিশন হিসেবে হাইপারভাইজারের উপর চলে। এই নিবন্ধ VT-x, SLAT ও VMBus-এর ভূমিকা দিয়ে ভার্চুয়াল...
Win32 থ্রেড পুল API — CreateThreadpoolWork দিয়ে থ্রেড তৈরি না করে কনকারেন্সি
নেটিভ কোডে চারদিকে CreateThread ডাকছেন? এই নিবন্ধ Vista-তে নতুন করে সাজানো Win32 থ্রেড পুল API ব্যাখ্যা করে — work, timer, wait ও io চারট...
সম্পর্কিত বিষয়
এই পৃষ্ঠাগুলো বিষয়টিকে সেবা ও সিদ্ধান্তের বৃহত্তর প্রেক্ষাপটে স্থাপন করে।
Windows-এর প্রযুক্তিগত বিষয়
Windows ডেভেলপমেন্ট, বাগ তদন্ত ও বিদ্যমান সম্পদ ব্যবহারের প্রবেশদ্বার।
এই বিষয়ের সাথে সম্পর্কিত সেবা
নিবন্ধটি নিচের সেবাগুলোর সাথে সরাসরি সম্পর্কিত।
Windows অ্যাপ ডেভেলপমেন্ট
ব্যবসায়িক অ্যাপ, ডিভাইস ইন্টিগ্রেশন ও যোগাযোগ টুল, চাহিদা থেকে ডেভেলপমেন্ট পর্যন্ত।
প্রায়শ জিজ্ঞাসিত প্রশ্ন
এই নিবন্ধের বিষয়ে পরামর্শে প্রায়ই আসা প্রশ্ন।
- Working Set ছাড়লেই কি পেজ পেজ ফাইলে লেখা হয়?
- না। অপরিবর্তিত পেজ বিষয়বস্তু রেখে Standby-তে যায় এবং সঙ্গে সঙ্গে পুনর্ব্যবহারযোগ্য ক্যাশে হয়। পরিবর্তিত পেজ Modified-এ যায়, এবং প্রয়োজনমতো পেজ ফাইল বা সংগত ফাইলে ফেরত লেখার পর Standby-এর মতো পুনর্ব্যবহারযোগ্য অবস্থায় এগোয়।
- টাস্ক ম্যানেজারের Available-এ Standby মেমরি আছে কি?
- আছে। Windows যে উপলব্ধ ভৌত মেমরি জানায় তা Standby, Free ও Zeroed-এর যোগ। Standby এখনও পুরনো বিষয়বস্তু ধরে, কিন্তু প্রয়োজনে অন্য কাজে সঙ্গে সঙ্গে পুনর্ব্যবহার করা যায় বলে তা উপলব্ধ মেমরি গণ্য হয়।
- RAM সম্পূর্ণ শেষ হলে তবেই কি পেজ ফাইলে লেখা শুরু হয়?
- না। Windows Modified তালিকা ও উপলব্ধ মেমরির অবস্থা অনুসারে কম-অ্যাক্সেস করা পরিবর্তিত পেজ ব্যাকগ্রাউন্ডে ফেরত লেখে। এটি এমন সরল ব্যবস্থা নয় যা চূড়ান্ত শেষের অপেক্ষা করে তারপর একবারে সব তাড়িয়ে দেয়।
- পেজ ফাইল বন্ধ করলে Windows কি দ্রুত হয়?
- সাধারণ নিয়মে তা বলা যায় না। বন্ধ করলে Commit Limit নামে, কম-অ্যাক্সেস করা পরিবর্তিত পেজ RAM থেকে সরানো কঠিন হয়, এবং সিস্টেম ক্র্যাশ ডাম্পও প্রভাবিত হয়। সাধারণত সিস্টেম-পরিচালিত রেখে শীর্ষ Commit ও ডাম্প প্রয়োজন মেপে সিদ্ধান্ত নিন।
- মেমরি সংকোচন থাকলে পেজ ফাইল কি অপ্রয়োজনীয়?
- অপ্রয়োজনীয় হয় না। সংকোচন স্টোর I/O কমাতে RAM-এ পেজ সংকোচন করে, কিন্তু সংকুচিত পেজও ভৌত মেমরি ব্যবহার করে এবং Commit গ্যারান্টির জায়গা নেয় না। সংকোচন ও পেজ আউটের মধ্যে পছন্দ মেমরি ম্যানেজারের গতিশীল নীতি।