קיימות שאלות וסוגיות רבות סביב נושא ה- Paging file, לעיתים גם נוכחתי לוויכוחים קשים ותפיסות עבודה שונות (ולעיתים גם משונות) בארגונים לגבי איך, מה ולמה אודות ה- Paging file.
הערה: ה- Paging file מוכר גם בשמות Pagefile, Swap file. הכוונה לאותו קובץ אשר כולם מכוונים אליו בשמותיהם השונים, קובץ ה- pagefile.sys.
חשוב לציין כבר מעכשיו, לפני שתתחילו לקרוא: כל הכתוב לעיל הינו בגדר דעה אישית שלי אשר מתבססת על דוקומנטציה רשמית של מיקרוסופט. הוא אינו בגדר תפיסה רשמית או שיטת עבודה מומלצת וכל מקרה לגופו. אתם מוזמנים להגיב ולתת חוות דעת אודות תפיסתכם ואשמח להחכים בעצמי. אך שוב כאמור, זוהי רק דעה אישית :-).
למי יש יותר גדול?
גודלו של ה- Paging file אינו דבר שרירותי; במידה והמחשב שלך מכיל מתחת ל- 2GB של RAM אזי קובץ ה- Paging file שברשותך יהיה גדול פי 1.5 מהזיכרון הפיזי.
במקרה בו המחשב שברשותך מגיע עם יותר מ- 2GB של RAM קובץ ה- Paging file כברירת מחדל יהא בסדר גודל שבין 2046-4092MB. זוהי שיטת העבודה הנהוגה כברירת מחדל אך לעיתים איננה אופטימלית ו\או מתאימה כנדרש.
דרך אחת מיני רבות, אך מועדפת עליי, לקביעת גודל ה- Paging file של המערכות הנוכחיות (64 ביט) היא להשתמש ב- Perfmon ולנטר אחר ה- Counters הבאים, כאשר יש להתייחס גם לערכים שלהם:
· Memory\\Available Bytes – לא פחות מ- 4MB
· Memory\\Pages Input/sec – לא יותר מ- 10 pages
· Paging file\\%Usage – לא יותר מ- 70%
· Paging file\\%Usage Peak – לא יותר מ- 70%
· Process\\Page File Bytes Peak – בעל הערך Not applicable
כאשר Paging file\\%Usage שווה או גדול יותר מ- 70% ייתכן וניאלץ להגדיל את ה- Paging file או לצור Paging file נוסף על דיסק נפרד.
לא על ה- Counters לבדו חי האדם...
בנוסף, לאלו מכם שמעוניינים בחוות דעת שנייה, הינכם מוזמנים לעיין ב- Process Explorer ב- System Information (ניתן ללחוץ על Ctrl+I בכדי להגיע לחלון הנ"ל, או פשוט לאתרו תחת תפריט View).

באם תשימו לב תוכלו לראות את ה- Commit Charge Limit שזהו למעשה ה- Virtual Memory ללא הגדלת ה- Paging file (כלומר כלל הזיכרון הפיזי במחשב, ה- RAM + גודלם של כל קבצי ה- Paging במחשב).
ה- Commit Charge Peak, כשמו כן הוא, מהווה את נקודות השיא של השימוש ב- Paging file מאז שהמחשב אותחל (Booted) לאחרונה.
מטרת בדיקת ה- Commit Charges הללו היא לוודא שה- Limit גדול יותר מן ה- Peak; מלבד זאת, חשוב לוודא כי ההפרש בין ה- Limit ל- Peak עולה או שווה ל- 70%, כלומר שתמיד יהיה קיים מצב בו ה- Peak אינו מגיע ל- 70% ו\או גדול מן ה- Limit.
מידע נוסף אודות המידע הכלול ב- System Information כולל נושא ה- Commit Charges ניתן למצוא בספר Windows Internals בעמודים 446-447.
נקודה נוספת שמומלץ לשקול היא לוודא שהערכים Initial Size ו- Maximum Size זהים. מצב שכזה ימנע מן ה- Paging file לגדול, פעולה אשר עלולה לגרוע מביצועי המערכת ולגרום לבסוף לפרגמנטציה של ה- Paging file.
מבחינת ביצועים שווה לשקול גם חלוקה של ה- Paging file בין דיסקים שונים.
מערכות עם ים של RAM
במערכות עם כמות גדולה של RAM (שרתים לדוגמה) דוגמת 32GB של RAM שרצות על מערכת הפעלה x64 מומלץ להגדיר את ה- Paging file שבמחיצת מערכת ההפעלה ל- 8GB הן בערך Initial והן בערך Maximum. פעולה זו תגרום לכך שלמערכת תהיה יד חופשית בכל הקשור ל- Paging ומלבד זאת, במקרה של Crash (מסך כחול, טפו טפו... חמסה חמסה...) יכתבו אך ורק Kernel memory dumps (די מפחיד ולא יעיל לכתוב Full memory dump של מכונה עם 32GB RAM. חשבו מה היה קורה במערכות Windows Server 2008 R2 Enterprise/Datacenter עם מקסימום זיכרון, ורק תזכורת קלה: התמיכה המקסימאלית במערכות אלו היא ב- 2TB RAM...).
למה דווקא 8GB Paging file במערכות עם 32GB של RAM? חשוב לציין תחילה שמלבד נוכח העובדה שיצירה של Paging file של 32GB x 1.5 איננה מעשית עקב היותו קובץ עצום, חשבו על הנקודות הבאות:
- כיצד תעביר קבצים גדולים לצורכי ניתוח?
- משך הזמן אשר נדרש ליצירת קובץ Paging גדול
- איזה שימוש פרקטי ייעשה בו
- כתיבת Full memory crash dump אינה ריאלית ובזבזנית
- כמות שטח הדיסק שתוקצה ל- Paging file תהא גדולה
לכן, באופן מעשי הדבר ניתן לביצוע. אך מבחינה ריאלית הוא לא יישים (לפחות לא נכון לתאריך שבו נכתב פוסט זה).
מארק רוסינוביץ', האיש מאחורי Sysinternals וספרי Windows Internals, מציין בפוסט נהדר בנושא Virtual Memory המהווה חלק מסדרת פוסטים רחבה (ששווה קריאה בלי שום קשר, אלא אם כן קראתם את Windows Internals 5th Edition...) את סוגיית גודל ה- Paging file (תחת How Big Should I Make the Paging File?), שווה קריאה.
חשוב לציין את המשפט הבא בפוסט שלו:
“The maximum is either three times the size of RAM or 4GB, whichever is larger.”
המשפט הנ"ל נכתב עבור מערכות ויסטה ו- 2008, אך נכון גם ל- 2003.
הצעה נוספת של מארק רוסונוביץ'
ד"ר מארק רוסוניביץ', האיש והאגדה, מספק בפוסט שלו בנושא Virtual Memory, שקישרתי אליו טרם לכן בפוסט זה, הסבר די יעיל ששווה לשקול עבודה לפיו גם והוא פתיחת כלל האפליקציות שאמורות לרוץ על המחשב במקביל כולל עבודה שוטפת עם המחשב והזנת נתונים ולפי הנתון המוצג ב- Commit Charge Peak.
לסיכום: מה הגודל שעליי להקצות ל- Paging file שלי?
השאלה הזו, שהיא אחת מהמתבקשות בסופו של פוסט שכזה היא שאין גודל קבוע עבור כלל המחשבים. כפי שפתחתי את הפוסט כל מקרה לגופו – יש להתחשב בכל מחשב באופן נפרד עקב כמות הזיכרון שמותקנת בו וה- Virtual Memory שדרוש לעבודה. במידה ואין מידע נוסף זמין עבורינו עבור אותו מחשב, ההגדרה של גודל הזיכרון הפנימי (RAM) x 1.5 היא נקודת התחלה טובה.
במערכות מאסיביות ושרתים יש להקצות מספיק זיכרון פנימי לאפליקציות (דוגמת Exchange Server) ולמערכת ההפעלה שרצה על-גבו כך שלא יווצר מצב בו קיים מחסור ב- RAM ולמעשה לא ייעשה שימוש ב- Paging file. במערכות שמכילות כמות עצומה של RAM (כמו דוגמת ה- 32GB לדוגמה של 32GB x 1.5) שימוש ב- Paging file עצום אינו ריאלי וחסר תועלת.
מצד שני, דיסקים היום הם מצרך זול, והקצאה של Paging file גדול לפי הנוסחא של RAM x 1.5 אפשרית עבור מערכות מסוימות (לא להשתולל ולהקצות למערכות עם 32GB קובץ עצום).
כמו כן, חשוב לציין כי שימוש רצוף ב- Paging file על-ידי מערכת ההפעלה מעיד על חוסר ב- RAM, ולכן, מומלץ להתקין זיכרון נוסף במחשב על-מנת לשפר את ביצועי המערכת.
חשוב לציין שוב, בשורה לתחתונה לסיכום שגודל של Paging file במכונה מסוימת אינו שרירותי לכלל המכונות בארגון. כלומר, הגודל של Paging file במכונה מסוימת לא קובע (את גודל ה- Paging file של כלל המכונות בארגון) :-).