DCSIMG
ניהול הRAM החדש בויסטה (או: מי זולל לי את הRAM?) - שחר.נט

שחר.נט

בלוגים שאני קורא

ספרים מומלצים

ניהול הRAM החדש בויסטה (או: מי זולל לי את הRAM?)

במהלך שיחה עם גיא בורשטיין במסנג'ר, הועלה נושא ניהול זיכרון הRAM (ר"ת - Randomize Access Memory) ב Windows Vista.
אחד מהדברים שעברו שיפור משמעותי בכל מה שקשור לניהול ביצועים ומשאבים ב Windows Vista זה ניהול זיכרון ה RAM, במסגרת מנגנון חדש שנקרא SuperFetch. המנגנון עצמו לא ממש מוכר, אלא יותר היכולות המגניבות שלו, למשל ReadyBoost שמאפשר "להרחיב את הזיכרון" באמצעות USB Memory Sticks. האפשרות הזאת היא נגזרת של הדרך שהמנגנון הזה פועל בה. אחד התכונות הפחות מוכרות היא preload.

Preload זאת למעשה מילת המפתח ב SuperFetch, ולמעשה, מציין את ההבדל מול מערכות הפעלה קודמות.
מדובר במנגנון שמיועד לשפר את ביצועי הRAM, באמצעות ניצול התחלתי מלא שלהם. במערכות קודמות, כשאפליקציה ביקשה זיכרון RAM לאיזשהו צורך ממערכת ההפעלה, מערכת ההפעלה הלכה ב real time והקצתה לה מזיכרון ה RAM ובגמר השימוש עשתה free לאותו מקטע זיכרון ושיחררה אותו מאחיזתה לחלוטין. המנגנון הזה התגלה כמנגנון לא יעיל, מאחר שמערכת ההפעלה כל הזמן מקצה ומשחררת זיכרון גם במהלך שימוש אינטנסיבי במחשב, מה שגוזל מאד מהביצועים בהמתנה עד להקצאת הזיכרון.

גישת ה Preload אומרת שמערכת ההפעלה תקצה מראש כמות גודלה מאד של זיכרון RAM ותגדיר אותו כזיכרון שמשמש את מערכת ההפעלה. בפועל, לא יתבצע שימוש בזיכרון הזה עד שאפליקציה כלשהי לא תבקש הקצאת RAM. כשתתקבל בקשה כזאת, יועבר חלק מזיכרון הRAM שהוקצה מראש לשימוש אותה אפליקציה. שתשתמש עד שתזיים את השימוש ואז הוא יוחזר למערכת ההפעלה. כך נחסכת פעולה ארוכה וחוזרת של הקצאה ושיחרור, הקצאה ושיחרור לאורך כל פעולת המערכת.
מה שמתבצע זה הקצאה מראש וניהול הזיכרון, כלומר העברת ה"שליטה" על אותו מקטע של זיכרון בין אפליקציות שונות לפי הצורך.

המנגנון אפילו משוכלל יותר - הוא יכול לאתר אפליקציות שהמשתמש משתמש בהם הרבה, וכבר מתחילת העבודה של אותה אפליקציה להעביר לה כמות זיכרון שתוכל לשמש אותה לכל אורך העבודה, ואז התהליך  מתייעל אף יותר.

תסתכלו על הסקרין-שוט מה Task Manager שלי. תסתכלו בנתונים של Physical Memory תראו כמה מעט זיכרון מוגדר כ Free (כלומר - לא עבר הקצאה כלל). סה"כ 2 מגה. תראו בכמה זיכרון אני משתמש סה"כ. ההפרש, זה זיכרון שמערכת ההפעלה הקצתה למרות שלא נמצא בפועל בשימוש מיידי של אפליקציה מסויימת, ונמצא שם כדי לאפשר העברה מהירה לשימוש אפליקציה מסויימת ושיפור הביצועים. חלק מהזיכרון הוקצה מראש לאפליקציה לכל אורך הריצה שלה כדי לחסוך גם את התהליך הזה.

למעשה, מדובר בדרך של Windows Vista לנהל את הזיכרון בצורה שתביא לביצועים מקסימליים ותחסוך זמן. כשמשתמשים מתלוננים שיש להם מעט זיכרון Free, זה לא שויסטה זוללת ומשתמש בהרבה זיכרון במשך פעולתה הרגילה. פשוט, היא שומרת זיכרון בצד. למקרה צורך.

שבוע טוב.

תוכן התגובה

אשר כתב/ה:

לא ממש מדויק....

גם גרסאות קודמות של windows מנהלות את הזכרון בצורה מאד יעילה.

אני ממליץ לך על הספר  windows internals (מצ"ב לינק)

יש שם הסבר מפורט על רשימות ה memory pages ש windows מנהל (יש מספר רשימות כאלה ומנהל הזכרון מעביר בינם  pages)

פרט לזה, באפליקציה צריך להבדיל בין הקצאת זיכרון רגילה לבין הקצאה של Page.

מנגנון ה superfetch בסך הכל טוען מהדיסק לזכרון מקטעים שהוא חושב שיצטרכו להיטען בכל מקרה (ולכן השיפור נוצר תוך כדי השימוש כשהמערכת "לומדת" מה כדאי להביא לזיכרון ע"פ צורת ההתנהגות של המשתמש)

# February 17, 2007 7:40 PM

שחר גבירץ כתב/ה:

לא אמרתי שגרסאות קודמות לא מנהלות בצורה יעילה, אמרתי שויסטה יעילה יותר.

את המיימורי פיג'ס וכו' אני מכיר, אבל בויסטה המנגנון שופר.

מה שאמרת זה חלק ממה שהוא עושה, והזכרתי את זה בסוף. החלק השני, זה להקצות לניהולה מראש זיכרון, ולא לעשות הכל ב real time.

# February 17, 2007 7:50 PM

שחר גבירץ כתב/ה:

ותודה על ההמלצה.

# February 17, 2007 8:03 PM

דרור שניר כתב/ה:

תחושתי האישית? זו שיטה טובה עבור מיקרוסופט למנוע ממשתמש פשוט להבין מה המערכת מנצלת. "לא, אל תדאג, זה לא ש-Word מנצל 200 מגה, זו פשוט הקצאה מראש".

(Word רק לצורך דוגמה, כמובן; דווקא הוא לא מהווה תוכנה זוללת-זכרון במיוחד.)

# February 21, 2007 8:20 PM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 5 and 2 and type the answer here:


Enter the numbers above: