כמו בשנה שעברה, גם השנה נתבקשתי להרצות בכנס על נושא שיפור ביצועים, שנערך אי שם. השנה יצא לי לדבר על שני נושאים. הנושא הראשון עסק במדידת ביצועים של יישום באמצעות ה Profiler החדש של Visual Studio 2010 והנושא השני עסק בנושא הכנת היישום שלך לסביבת הייצור.
אני מאד אוהב את הכנס הספציפי הזה, והסיבה העיקרית היא האופי המיוחד של הקהל. אתה יכול לחוש מהר מאד אם הם קולטים אותך או שאתה משעמם אותם. ואף אחד לא עושה לך שם הנחות, להיפך, ואתה צריך להזיע כדי להוכיח שכדאי להקשיב לך.
הבעיה עם מדידת ביצועים, היא שהרבה אנשים הולכים ישר לאיפה שהפנס נמצא, וברוב המקרים מפספסים את העיקר. זה נושא שאני משתדל להדגיש כאשר אני מדבר על שיפור ביצועים עם צוותים של לקוחות שלי, וגם בהרצאות שלי בארץ ובחו"ל.
אז התחלתי את ההרצאה עם הדיאלוג של עליזה, עם חתול הצ'שיר, מתוך עליזה בארץ הפלאות היפיפה של צארלס לאוטווידג דודסון (לואיס קרול). שהוא אחד מהספרים המענינים ביותר בלוגיקה מתמטית ובאנטרופומורפיזם (למי שלא ידע עד עכשיו, מה משותף לפינוקיו ולעליזה בארץ הפלאות, זו מילת הקסם). שציטוטים נרחבים ממנו ניתן למצוא גם במטריצה.
עליזה שואלת את החתול (לאחר שהיא מתחבטת בשאלה הקשה, אם פוסי צ'שיר הוא השם היאות לפנות אליו), לאן היא צריכה ללכת, והחתול עונה לה, שזה מאד תלוי בשאלה לאן היא רוצה להגיע. וכאשר עליזה אומרת לו, שבעצם זה לא בדיוק משנה לה לאן היא תגיע. החתול כמובן חובט בכדור המורם לו להנחתה, ו ונותן את התשובה, שאם זה המצב, אז זה לא באמת משנה באיזה דרך היא תבחר. הרבה לא מכירים את המשך הדיאלוג, שהוא אולי יותר חשוב לענינינו, שבו עליזה מנסה להחזיר את הכדור למגרש של היריב, בטענה, שכל עוד היא תגיע לאיזה שהוא מקום, זה פחות או יותר בסדר. והחתול משיב לה, שהיא בהחלט תגיע לאנשהו, אם היא תלך מספיק זמן.

אז לאן אתה רוצה להגיע בביצועים של המערכת ? מה ? אתה רוצה לומר לי שזה לא מופיע כדרישה מכומתת ומוגדרת היטב במסמכי האיפיון של המערכת ? אהה…


הרבה פעמים שאני מוזמן ללקוח כדי לפתור בעיה של ביצועים, מסתבר שהדרישות לא הוגדרו מראש (ואם הוגדרו לא הוגדרו בצורה הניתנת למדידה), אלא הבעיה צצה פתאום בשטח אצל המשתמש. מאחר והרבה פעמים ביצועים קשורים לארכיטקטורה, וארכיטקטורה זה לא דבר שניתן לשנות בקלות, בטח לא לאחר שגמרו לכתוב את הפרויקט, הפתרון אף פעם לא פשוט.
ואני לא צריך להדגיש בנקודה הזו, את הברור מאליו, שאם היו מגדירים את זה נכון מראש, ובצורה כמותית מוגדרת היטב, בדרישות המערכת, ובאיפיון, יש סיכוי טוב, שהארכיטקט היה מתאים את התכנון לדרישות, כבר בשלב התכנון, והבעיה הזו, כבר לא היתה מתעוררת אצל הלקוח.
מה שאומר שעשית מסע ארוך, והגעת בדיוק לאיזה שהוא מקום. וזה, כמובן By Design, כי המטרה לא הוגדרה, ולאף אחד לא היה בעצם באמת מושג, לאן הולכים, כל עוד בסופו של דבר, נגיע לאנשהו. בקיצור, הדיאלוג של עליזה עם החתול, זה תאור מדויק, של תהליך ההתנהלות של פרויקט פיתוח תכנה מערכתי טיפוסי. ועוד לא הגענו בכלל לקטע עם המפטי דמפטי, שגם הוא מוזכר אי שם בהרפתקאותיה של עליזה (הפעם בארץ המראה).
ההקדמה הזו היתה לדעתי החלק הכי חשוב בהרצאה, כי אנשים נוטים לקחת Profiler ולעשות את הקוד שלהם הכי יעיל שאפשר, בשעה שהבעיה היא בכלל במסד הנתונים, או ברשת, או בכלל משהו אחר לגמרי כמו ריבוי של פטפטת מיותרת בין השרת ללקוח.
לאחר ההקדמה הקצרה הזו, עברתי, פחות או יותר, על רוב ההיכולות היפות והחזקות של ה Visual Studio 2010 Profiler, וכמובן שלא הספקתי להיכנס לעומק, ובקושי הצלחתי לדגדג את הכלי. מיקרוסופט התקדמה הרבה עם הכלי הזה, ויש שם המון יכולות חזקות וחדשות.
יש כמובן יכולת דגימה עם Sampeling ויכולת איסוף מידע באמצעות Instrumentation (שמשתמש כמובן ב ETW, למי שיודע מה זה). לכל אחת משיטת הדגימה הללו יש את היתרונות והחסרונות שלה, שחשוב להבין אותם היטב, לפני שמשתמשים בכלי כדי למדוד משהו.
יש יכולת מדידה גם ב Native וגם ב Managed. יש תמיכה מלאה גם ב 64 ביט וגם ב 32 ביט. יש גם תמיכה מלאה במדידת השפעה של ריבוי ליבות במערכות עם מרובות נימים. יש יכולת ספציפית לעקוב אחר אורך חיים והתנהגות של אוביקטי דוט נט בזכרון. ומה שהכי מעניין, זה יכולת להכליל באיסוף המידע את הפניות של התכנה לשכבות אחרות, כמו למשל קריאות של מסד נתונים, ובכך לאתר צווארי בקבוק בגישה למסד הנתונים. וכמובן איסוף של מוני ה CPU וגם Performance Counters עם טריגרים והכל.
את כל האיסוף אתה יכול לבצע גם באמצעות Scripts ללא הפעלה של ה Visual Studio GUI מה שפותח אפשרויות מענינות של שימוש אוטומטי בכלי לאחר כל Build. ומאחר שאתה יכול להשוות בין מדידות שונות, קל נורא לדעת די מהר עם ה Build הנוכחי טוב יותר או רע יותר מה Build הקודם מבחינת הביצועים.
יש גם המון יכולות לפלטר לחתוך ולעבד את המידע הנאסף, וכתוצאה מכך יש למשתמש יכולת לבצע ניתוחים ואנליזות מורכבות, שרק המעבר הבסיסי עליהם לוקח יום הדרכה שלם.
בקיצור פגז של כלי.
הבעיה היא שכמו עם כל כלי מדידה, הוא דורש לימוד. הפעלה לא נכונה של החוגות והכפתורים, תגרום לכך שתמדוד את הדבר הלא נכון, או לחילופין, שהמדידה תשפיע על המערכת בצורה כזו, שהיא תהיה שגויה. אלה דברים שלא מופיעים בתיעוד, ודווקא על הנושאים החשובים האלה, ניסיתי להרחיב בהרצאה. כך שרוב ההרצאה היתה הדגמות, ותשובות לשאלות מהקהל על כל מיני פרות קדושות ששחטתי פה ושם.
למי שרוצה את השקפים, הם זמינים כאן. אבל החלק החשוב בהרצאה היו ההדגמות, הניתוחים של תוצאות המדידות, ובעיקר המסקנות, שלא תמיד היו מה שה Profiler אמר. לצערי דווקא את הדברים החשובים האלה לא תמצאו בשקפים.
למי שתוהה מה בדיוק מצוייר לי על החולצה, אז תמיד חלמתי שבזמן שאני מדבר, תהיה לי להקת ליווי, כדי שיהיה קצת קצב ברקע, אז הפעם הבאתי איתי אחת כזו:
