יום רביעי, 28 בפברואר 2018

חישוב זמן משוער (estimated time) בתהליכים

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

כאשר תהליך מודד את עצמו, החישוב של הזמן המשוער הינו המהירות הנוכחית לעומת העבודה שנשארה לעשות. ניקח הורדת קובץ כדוגמה פשוטה. אם קובץ שוקל 1M וההורדה היא במהירות 100K לשניה, אז יקח 10 שניות להוריד את אותו קובץ. כמובן שזה בהנחה שמהירות ההורדה הייתה ותהיה קבועה על 100K אבל זו בדיוק הבעיה, המהירות אינה קבועה לאורך זמן ולכן במקום 10 שניות זה יקח 12 שניות או אולי גם יותר, תלוי במהירות ההורדה לאורך זמן.

לכן, אם נשתמש בדוגמה הזו, זמן משוער צריך להימדד על ידי מהירות ההורדה הממוצעת עד לנקודת זמן זו. אם במשך 5 שניות מהירות ההורדה הייתה 100K לשניה ולכן הזמן המשוער הוא 10 שניות, במידה ומהירות ההורדה יורדת ל 50K לשניה, הזמן המשוער הכללי אמור להיות 20 שניות אבל בעצם אנחנו כבר בחצי הדרך של ההורדה וההתייחסות צריכה להיות בהתאם ולכן טוב יותר יהיה, אם ניקח את המהירות הממוצעת עד לנקודת זמן נוכחית. זכרו שמהירות ההורדה משתנה כל הזמן כך שחישוב הזמן המשוער צריך להתעדכן תדיר יחסית, לדוגמה כל שניה. נכון שהזמן המשוער לא יהיה "מדוייק" ולכן בעצם הוא נקרא משוער, אבל הוא בטוח יהיה מדוייק יותר מאשר השיטה הנוכחית.

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

8 תגובות:

  1. אפשר לשער את המהירות, ואז לשער על בסיס זה את הזמן.

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

      מחק
    2. אתה מציע לשער את הזמן על ידי קירוב. את אותו הקירוב יש לעשות על הקצב. במילים אחרות- במקום להשתמש במהירות ממוצעת יש לעבוד עם הנגזרת.

      מחק
  2. כנראה שלא הבנתי את הכוונה שלך. משך הזמן שנותר עד סיום המשימה תלוי אך ורק בלינאריות של המשימה, ב"כמות" של המשימה שנותרה ובקצב הביצוע הנוכחי.
    אם במקרה היה לך קו נקי, ללא רעש או עומס במשך 10 דקות שבהן ביצעת 80% מתוכן המשימה, ועכשיו יש לך רעש ועומס על הקו וקצב הביצוע גדל פי 100, כל מה שהיה עד עכשיו - בכלל לא רלוונטי! והזמן שנותק הוא הקצב הנוכחי כפול יתרת המשימה.
    לא ככה עובדים כל אומדני ההורדה, העתקה, ביצוע?

    השבמחק
    תשובות
    1. כנראה שכן וזו בדיוק הבעיה. הורדת קובץ של 1M במהירות של 100K יתן לי 10 שניות. הכל טוב ויפה כאשר במשך כל זמן ההורדה, הקו יהיה נקי והמהירות תהיה קבועה.

      אחרי מחצית הדרך, המהירות ירדה ל 50K לשניה אבל נותר להוריד 500K, כלומר שוב נשארו 10 שניות למרות שעברנו מחצית מהדרך. באסה. במקום 10 שניות, זה יקח 20 שניות. הזמן המשוער היה לא מדוייק בעליל כי הוא לא !צפה! את הירידה ל-חצי מהירות בהמשך הדרך (לגיטימי). כמובן שהמספרים האלה הם בתנאי מעבדה, משהו שלא קורה בד"כ בחיים האמיתיים, שם המהירות עולה ויורדת כל הזמן.

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

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

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

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

      שים לב שאני מדבר על שינוי צורת החישוב, השם "זמן משוער" ישאר כזה, ביחד עם המשמעות שלו.

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

    השבמחק