לדלג לתוכן

פתרון עקיבה ומדדי תהליך

פתרון ראשון

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

פתרון שני

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

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

פתרון שלישי

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

strace -ff -ttt -yy -e trace=openat,close,dup,dup2,dup3,socket,accept,accept4 \
  -o descriptor.trace ./service-lab

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