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