זיכרון דינמי בשרת Hyper-V- חלק 1

7 באוקטובר 2013

אין תגובות

moti bani מאת מוטי באני, מיקרוסופט ישראל

הצורך בזיכרון דינמי

בסביבה וירטואלית ישנה תמיד דרישה להריץ כמה שיותר מכונות על אותו שרת, וכמובן לא לפגוע בביצועים. למכונות אנחנו מקצים מספר משאבים כמו זיכרון וזמן מעבד, כאשר הזיכרון שאנחנו מקצים למכונה הוא קבוע מראש, ללא קשר לעומס על המכונה. למשל, אם הקצנו למכונה 2 GB של זיכרון והיא משתמשת רק בחצי מזה, יש לנו 1 GB של "זיכרון מבוזבז",שיכלנו להשתמש בו עבור מכונה נוספת.

 

זיכרון דינמי בשרת Hyper-V

Dynamic Memory שהוצג לראשונה ב-Windows Server 2008 R2 SP1 נועד בדיוק לפתור את הבעייה הזו. Dynamic Memory מאפשר למערכת ההפעלה בשרת המארח לשנות בצורה דינמית את כמות הזיכרון שזמינות למכונות, לפי עומס העבודה, מה שמאפשר ניצול אפקטיבי יותר של כמות הזיכרון, וכתוצאה מכך אנחנו יכולים להריץ יותר מכונות על אותו שרת.

Dynamic Memory מתאים במיוחד לשרתים עם עומס עבודה נמוך, או לסביבות מבוססות VDI. עבור שרתים שתומכים בעומסי עבודה גדולים הדורשים שימוש קבוע בזיכרון, כמו שרת Exchange או SQL, השימוש ב-Dynamic memory לא נתמך ולא מומלץ.

כדי לאפשר Dynamic Memory אנחנו צריכים שלושה דברים:

1. שרת Hyper-V שמריץ Windows Server 2008 R2 SP1 ומעלה

2.מערכת הפעלה למכונות הוירטואליות:

– Windows 2003-2012 בגרסת השרת

– b. Windows Vista-7 (בגרסת (Enterprise/Ultimate או Windows 8. בגרסת הקליינט

– יש גם תמיכה במספר הפצות של לינוקס (בשרת Server 2012 R2)

3. הגדרות בצד המכונה הוירטואלית :

– לוודא שהמכונה מריצה את הגרסא הכי עדנית של Integration Components

– לאפשר Dynamic Memory על המכונה הוירטואלית

– לקבוע את ההגדרות הזיכרון.

 

איך זה עובד ומה אני יכול להגדיר

 

image

 

 

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

עוד בגרסת 2008 R2 SP1 יכולנו להקצות לכל מכונה זיכרון מינימום ומקסימום, החידוש ב-2012 זה השימוש החכם שנעשה בזיכרון לאחר שהמכונה עוברת boot. 

למשל, נניח שעשינו שבדקנו וראינו שהמכונה הווירטואלית זקוקה ל-1 GB של זיכרון כאשר היא רצה, אבל בזמן Boot צריכת הזיכרון גבוה משמעותית יותר (בגלל הצורך לטעון תוכנות ולהריץ תהליכים)  ועומדת על  2GB.כאן בדיוק נכנס הנושא של Startup Memory מול Minimum Memory .

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

מה קורה באותם מקרים בהם השרת נדרש לספק את ה-Startup Memory , ואין לו כרגע משאבים (בגלל האופטימיזציה הזו)? כאן בדיוק נכנס לפעולה  Smart Paging.

במצב בו לשרת אין זיכרון זמין עבור ה-Startup Memory של מכונה (מצב שיכול לקרות רק באתחול של השרת או המכונה הווירטואלית), נוצר קובץ paging file זמני, ל-10 דקות בלבד, שמשלים את כמות הזיכרון שתהיה זמינה למכונה. למה רק ל-10 דקות? כי בסופו של התהליך, המכונה צריכה לחזור לצריכת הזיכרון הרגילה שלה לאחר תהליך ה-Boot

להלן ההגדרות שאפשר להגדיר בשרת המארח:

זיכרון התחלתי (Startup RAM) – כמות הזיכרון המינימלית שתהיה זמינה לשרת בזמן ה-boot. בזמן תהליך ה-boot יש לעיתים קרובות שימוש בכמות גדולה של זיכרון, ולאחר שהתהליך נגמר אין יותר צורך בזיכרון הזה. ע"י שימוש בהגדרה זו אנחנו יכולים לאפשר לשרת לקחת מהמכונה זיכרון שכבר אין לה צורך בה אחרי ה-boot.

זיכרון מינימום (Minimum RAM) – ערך זה מאפשר לנו את המינימום ההכרחי לפעולה של המכונה לאחר boot, כאשר מה שקובע בפועל זה עומס העבודה וצריכת הזיכרון של אותה המכונה.

זיכרון מקסימום (Maximum RAM) – כמות הזיכרון המקסימלית שאנחנו רוצים להקצות למכונה. כמות הזיכרון שזמינה עבור אותה מכונה לא תעלה על כמות זו.

יש עוד שתי הגדרות חשובות:

Memory Buffer  כדי להתמודד עם מצבים בהם יש דרישה מהירה לקבל עוד זיכרון Hyper-V ינסה להקצות למכונה הווירטואלית את כמות הזיכרון שהיא צריכה ועוד זיכרון שישמש כ-Buffer. למשל, אם המכונה משתמשת ב-1 GB  ,השרת המארח ינסה להקצות למכונה 1.2 GB.

Memory Weight  כאשר אין מספיק זיכרון פיזי בשרת עבור כל המכונות הווירטואליות, ההגדרה הזו קובעת איזה מכונות תקבלנה עדיפות על פני מכונות אחרות.

 

חשוב להדגיש, שבניגוד לסביבות אחרות Hyper-V לא תומך ב-Memory overcommit, השרת מנהל את הזיכרון בצורה דינמית, ויכול לתת למכונות רק את הזיכרון הפיזי הזמין. הסיבה היא ביצועים, כאשר משתמשים ב-Memory overcommit והשרת מגיע למצב שהזיכרון הזמין כמעט נגמר, מתחיל תהליך של Paging בעבודה מול הדיסק, וזה כמובן משפיע לרעה על הביצועים.

לאחר ההגדרות אלו, נוכל לוודא שהמכונה עובדת עם Dynamic Memory דרך מאפייני המכונה הוירטואלית בשרת Hyper-V

 

image

 

אז מה הם ה-best practices בקביעת ההגדרות, וכיצד מנטרים את הביצועים של השרתים כדי לוודא שההגדרות שבחרתם לא משפיעות לרעה על הביצועים בחלק השני של המאמר

 

מוטי באני הוא מהנדס בכיר בתחום ה Platforms בקבוצת Premier Field Engineer של מיקרוסופט ישראל.  מתמחה בביצועים, וירטואליזציה וקלסטרים.

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *