1 / 32

Real Time Non-Copying GC

Real Time Non-Copying GC. Paul R. Wilson & Mark S. Johnstone University of Austine Texas 1993. מוגש ע”י רם נתנאל. הקדמה.

ossie
Download Presentation

Real Time Non-Copying GC

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Real Time Non-Copying GC Paul R. Wilson & Mark S. Johnstone University of Austine Texas 1993 מוגש ע”י רם נתנאל

  2. הקדמה עד היום לא שולב בהצלחה Garbage Collection במערכותReal Time. הדבר גרם לכך ששפות שמשתמשות ב GC לא חדרו לתחומים רבים בהם שילוב בתוך חומרה ומערכות הפעלה ובקרה של מכשירים.

  3. דרישות מ GC בסביבת RT • הבטחת יחס ביצועים קבוע לכל התכנית • הבטחת יחס ביצועים קבוע באופן נקודתי בתכנית • OverHead קטן ככל האפשר

  4. תנאים הכרחיים GC שפועל בסביבת RT חייב להיות אינקרימנטלי – מסוגל לבצע פעולות קטנות בזמן ריצתה של התכנית במקום לעצור את התכנית לזמן ארוך בכל פעם. (הבטחת יחס ביצועים לטווח קצר)לא מספיק למצוא חסם על אורך פעולות העדכון, צריך למצוא חסם על התדירות שבה יש עדכונים. (הבטחת יחס ביצועים גלובלית)בכל זמן שהוא מוקצה אחוז מסוים מפעולת ה CPU לטובת התכנית. (הבטחת יחס ביצועים נקודתית)

  5. מסקנה לכן עדיף שה Collector יהיה תכנית שרצה במקביל ל Mutator ואוספת זיכרון מבלי להפריע לריצה השוטפת של ה Mutator.

  6. Write Barrier לעומתRead Barrier Read Barrierבכל פעם שה Mutator ניגש לקריאה של פוינטר יתבצע קוד נוסף שידאג לכך שהמידע שה Mutator עומד לקרוא הוא עדכני. למשל להפנות את ה Mutator למקום אחר.Write Barrierבכל פעם שה Mutator מנסה לשנות את אחד הפוינטרים בתכנית, יתבצע קוד נוסף שידאג לכך שה Collector יודע על השנוי ונערך בהתאם.

  7. Read Barrier בהפעלת Read Barrier יש בעצם סנכרון בין התמונה שרואה ה Mutator לבין פעולות ה Collector בכך שבכל פעם שמה שרואה ה Mutator אינו עקבי עם פעולות ה Collector ה Mutator ישנה את תמונת העולם שלו. ה Collector מבחינתו מתנהג בדיוק כמו שה Mutator נעצר לצורך ה GC.

  8. Write Barrier בהפעלת Write Barrier ה Mutator הוא שקובעוה Collector מעדכן את תמונת העולם שלו לפי פעולות ה Mutator כך שיתכן שה Collector יאלץ לבצע יותר פעולות מאשר יהי מבצע אילו ש Mutator היה עוצר בזמן ה GC.

  9. האחריות על הסנכרון חייבת להיות של ה Mutator כי לא ניתן לצפות את פעולותיו.

  10. Read Barrier תכונות: • עלות גבוהה. • לא צפוי – יתכן שבפרוש ביטוי אחד יש שימוש בהרבה ערכי פוינטרים ולכן קשה לקבוע עלות ממוצעת של OverHead.

  11. Write Barrier תכונות: • עלות נמוכה. • יותר צפוי – קיים יחס ביצועים טוב יותר גם ב Worst Case. לכן מתאים יותר לסביבת RT. • ה Mutator אינו תלוי בעבודה שעשה עד עכשיו ה Collector ולכן ה Collector לא יכול לעקב את התקדמות התכנית. Write Barrier מתאים יותר לאפליקציות Real Time כי לא ממש חשוב כמה עבודה יעשה ה Collector כל עוד אינו מפריע לפעולת ה Mutator.

  12. אלגוריתם Baker האלגוריתם מבצע Copying Garbage Collection בצורה אינקרימנטלית. ה Mutator וה Collector מדברים ביניהם ע"י העברת הודעות באופן שוטף.יש שימוש ב Read Barrier לשם שמירה על עקביות של מה שרואה ה Mutator לעומת גרף האובייקטים.

  13. בעיות: העברת מידע בין ה Mutator וה Collector היא בעקרון בעיה במערכות RT כי קיימת הפרעה לריצת התכנית. אם ה MailBox נבדקת בתדירות מסוימת ע"י ה Mutator העלות גדולה. אם משתמשים ב Interrupt יש הפרעה לריצת ה Mutator שעלולה להגיע ברגעים קריטיים.יש שימוש ב Read Barrier אשר אמנם כל עדכון בו נעדה מהר יחסית אבל יתכן שעדכונים נעשים בתדירות גבוהה וגורמים לתכנית לא להספיק למועד הסיום.

  14. לדוגמא: ריצה על רשימה מקושרת for i=1 to list.size p=p.nextend אם הרשימה עדיין לא הועתקה ע”י ה Collector היא תועתק איבר איבר בגלל ה Read Barrier. אמנם העתקת איבר היא לא ארוכה אבל סך כל העבודה המצטברת תגרום לכך שהתכנית לא תסיים הזמן.

  15. תגובת האלגוריתם: בכל צעד ה Mutator יורה ל Collector להביא את האיבר הבא ברשימה.למרות שביצוע כל צעד לוקח זמן קטן לאורך כל הרימה של התכנית ה Collector יעקב מאד את התכנית ויתכן שלא נעמוד ב deadline.

  16. הרחבות: קיימים אלגוריתמים שניסו לשפר את האלגוריתם של Baker ע"י פעולות ברמה של Page שלםואיטרציות יותר גדולות ופחות תכופות. התוצאה היא שהתנהגות התכנית עוד פחות ניתנת לצפייה מראש.

  17. הגישה לפתרון אנחנו לא נבטיח שבכל מסלול אפשרי בתכנית תמיד סך העבודה לא יצטבר ליותר מאשר חסם קבוע, אבל ננסה להבטיח שהעדכונים לא יקרו בתדירות גבוהה מידי.הבטחה כזו דורשת קשר פחות הדוק בין ה Mutator לבין ה Collector.נשתמש ב Write Barrier בלבד, ב Garbage Collection שאינו מבצע Copying.

  18. יישום ניתן לצבוע את האובייקטים בשלושה צבעים:שחור – אובייקט אשר סרקנו אותו ואת כל הבנים שלו.אפור – אובייקט אשר הגענו אליו בסריקה אבל לא בהכרח עברנו על כל שכניו.לבן – אובייקט שעדיין לא נסרק. אנו צריכים לגרום לכך שבכל עדכון של פוינטרים ע"י ה Mutator לא נגיע למצב שבו אובייקט שחור מצביע על אובייקט לבן. אחרת יתכן וזה המצביע היחידי אל האובייקט הלבן ואז יישאר Dangling Pointer

  19. לדוגמא: מתחיל במצב חוקי : כל האובייקטים הלבנים נגישים

  20. לדוגמא: עדיין מצב חוקי

  21. לדוגמא: קיים אובייקט אשר לא יסרק לעולם

  22. דרכים לפתרון • SnapShot at beginning – אף פוינטר לא יעלם. בכל פעם שפוינטר ישנה ערך ניצור משתנה דמי שיצביע על הערך הישן. • Incremental Update – בכל פעם שישתנה פוינטר שנמצא באובייקט שחור נודיע על כך ל Collector כדי שיסרוק את האובייקט החדש או ישנה את הצבע לאפור.

  23. SnapShot-at-Beginning השיטה מבטיחה: בכל פעם שנשבר מסלול לאובייקט נוצר מסלול חדש לאובייקט. לכן לא יתכן שקיים אובייקט אשר ה Mutator יכול להגיע אליו אך ה Collector לא.

  24. בעיות אופטימיזציה: • קשה לבנות טיפול שונה במשתנים על המחסנית • לא ניתן להשתמש במידע על Liveness של משתנים. • קשה לשילוב עם טכניקות של Generational ו hierarchical Garbage Collection. • גם אם המתכנת שיחרר את הזיכרון קשה להשתמש במידע הזה.

  25. Incremental Update שומר על התכונה המקומית שלאיווצרמצב שבו יש פוינטר מאובייקט שחור לאובייקט לבן. אם ה Mutator יוצר פוינטר כזה אז נודיע על כך ל Collector כדי שיהפוך אחד מהם לאפור.

  26. יתרונות אופטימיזציה • פחות קונסרבטיבי - שנוי של פוינטר מאובייקט לבן לא מפריע. • לא ניגע במחסנית עד סוף הסריקה - עוזרלהפטר מהרבה Floating Garbage. • קל יותר להסבה ל Generational GC. • ניתן לשלב מידע מהמתכנת (כגון שחרור זכרון)

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

  28. יתרונות: אין העתקה ממשית של אובייקטים לכן המחיר של יישום האלגוריתם קטן בהרבה. מכיוון שהאובייקטים לא זזים במהלך התכנית לא מבלבלים את ה Mutator.

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

  30. ישום האלגוריתם יושם בשפת++C ע”יOperator Overloading ונבחן על מספר תכניות. זמני ריצה הראו פגיעה של % 10-90, כנראה בגלל חוסר תמיכה מהקומפיילר.

  31. לסיכום: ראינו Garbage Collector שפועל בסביבת Real Time, ניתן לשילוב במספר טכניקות של GC, ומסוגל בפועל להבטיח יחס ביצועים קבוע לאורך ריצת התכנית. האלגוריתם כולל Write Barrier בלבד ולכן הוא יחסית זול למימוש, ואינו דורש חומרה מיוחדת או תמיכה מיוחדת ממערכת ההפעלה.

  32. תכניות לעתיד • להפעיל בצורה מבוזרת • לשלב Generational GC • להפעיל מספר Collectors בו זמנית. • לשכלל את ניהולהזכרוןלהתמודד עם פרגמנטציה.

More Related