שיקולים בתכנון מערכות מרובות ליבות

מאת: אבי כהן, פרטק אמבדד סולושנס

השימוש במעבדים מרובי ליבה  (multicore processors) הופך לנפוץ בעת האחרונה, ומשפיע בצורה ניכרת על פיתוח מוצרים צבאים ואזרחים כאחד.  כאשר בעבר המשמעות לסוג זה של פיתוח הייתה שימוש ביותר ממעבד אחד על כרטיס,  כיום שימוש בריבוי ליבות על מעבד אחד מאפשר למערכות הפעלה ואפליקציות שימוש בכוח עיבוד חזק במיוחד ודורש חשיבה שונה בתכנון האפליקציה תוך שימוש נכון במערכות הפעלה שתוכננו במיוחד לשימושים מסוג זה.  כאשר נכנסים לעומק נושא פיתוח אפליקציות תוך שימוש במעבדים מרובי הליבות, מבינים שעם היתרונות של מעבדים אלו, קיימים גם מכשולים רבים שחייבים להילקח בחשבון בתהליך התכנון.
הגורם הראשון שמשפיע על פיתוח התוכנה זה תכנון מערכת ההפעלה שחייבת לתמוך ב-  Asymmetric Multiprocessing  או, אפילו עדיף, ארכיטקטורת  Symmetric Multiprocessing.  גישת SMP מאפשרת שליטה בליבות עם מערכת הפעלה אחת השולטת בכל פונקציות הניהול לרבות תזמון, מסרים, סנכרון, ניהול זיכרון וכל השירותים האחרים הדרושים ליישום מערכת שלמה.  גישה זו פועלת היטב עבור מערכות פשוטות יחסית, אך קשה ליישום כשמורכבות המערכת גדל.  הגישה החלופית AMP, מצדדת בהפעלת עותק עצמאי של מערכת ההפעלה על כל אחת מהליבות.  דבר זה מאפשר פיתוח מערכות מורכבות ויחד עם זאת גמישות רבה יותר.  לדוגמה כל ליבה יכולה להתחיל מחדש באופן עצמאי, בלי להשפיע על אופן ריצת הליבות האחרות.  תועלת נוספת בגישה זו היא האפשרות להריץ מערכות הפעלה שונות (לדוגמה לינוקס ו- LynxOS) על כל ליבה.
גם סוגיות של מחשוב מקבילי  וקישור ליבה (processor affinity) אמורים לקבל התייחסות.  לאפליקציות עצמן יש גם נושאים שחייבים שיקול דעת כמו הקצאת משאבים ועיבוד מקבילי. מחשוב במקביל זו הרצה בו זמנית של מספר משימות עם אינטראקציה ביניהן.  משימות אלה עשויות להיות מיושמות בתוכניות נפרדות או כמערכת של תהליכים שנוצרו ע”י תוכנית אחת.  משימות יכולות להתבצע על מעבד יחיד או מספר מעבדים.

בחירת מערכת הפעלה לאיזון עומס העבודה
בעולם המחשב מרובה הליבות, הפונקציות המבוצעות ע”י מערכת ההפעלה הופכות לרב שכבתיות ומורכבות יותר.  תכנון מערכת ההפעלה חייב לקחת בחשבון יכולת טיפול בבעיות העלולות להיווצר כתוצאה מביצוע לא נכון של בוזמניות שהן בסיס שימוש במעבדים אלו.  דוגמאות של טיפול גנרי של מערכת הפעלה כולל אתחול מערכת, טיפול בפסיקות, תזמון ומניעה הדדית (mutual exclusion)  במובן של מערכות הפעלה זמן אמת (RTOS) גורמים נוספים כמו תזמון עדיפויות, determinism, ושיהוי פסיקות (interrupt latency) חייב להישמר גם במעבדים מרוביי ליבה.
אחת מהאופטימיזציות של התכנון במעבדים מרובי ליבה הנקרא Processor affinity, מאפשר לאפליקציות לבקש קישור או זיקה לליבת מעבד.  היתרון של אופטימיזציה זו היא יעול ביצועי הזיכרון המטמון (cache). במקרה זה, מערכת ההפעלה מתזמנת את ריצת האפליקציה על הליבה המקושרת כל עוד זה לא משפיע על תזמון המערכת כולה.    Processor affinity מנצלת את העובדה שאפליקציה מסוימת רצה על ליבה ספציפית, ובפעם הבאה שתידרש ריצה מחדש, האפליקציה שוב תרוץ מאותה ליבה.  דבר זה משפר את ניצול המעבד וגורם לתוכנה לרוץ מהר יותר ללא פגיעה בביצועים.  לעומת זאת, במקרים מסוימים המערכת תחליט שניצולת טובה יותר תתרחש כאשר דווקא ההפך יקרה.  אפליקציה מסוימת תרוץ על ליבה אחת, ובריצה הבאה תרוץ על ליבה אחרת. מקרים כאלה מתרחשים כאשר שתי אפליקציות שדורשות כוח מחשוב חזק במיוחד רצות על אותה ליבה כאשר ליבה אחרת פנויה לגמרי.   קיימת עוד אפשרות קישור יותר קשיחה, כאשר הבקשה לריצה היא על אותה ליבה ספציפית בכל פעם.  דבר זה יכול לגרום ל priority inversion במערכות הפעלה זמן אמת.  מערכות הפעלה זמן אמת אמורות להתחשב בקישוריות לליבה בתכנון שלהן בלי לגרום לבעיות ביצועי זמן אמת וזמני תגובה ארוכים.
דוגמה למערכת הפעלה שמהווה פתרון של בעיה זו, הינה מערכת הפעלה זמן אמת LynxOS התומכת ב- SMP ויכולה לתזמן מטלות בצורה שקופה ודינמית כאשר העומסים מאוזנים בצורה יעילה בין המעבדים הזמינים. מערכת ההפעלה זו תומכת באיזון עומסים בלי לפגוע בבסיס דרישות זמן אמת ודֶּטֶרְמִינִיזְם.

ייעול אפליקציות לריצה על מערכות מרובות ליבה
תכנון נכון של מערכת הפעלה למעבדים מרוביי ליבה במערכות משובצות מחשב, מנצל בצורה הטובה ביותר את תכונת ה- multithreading.  תכונה זו מאפשרת יכולות חישוב מקביליות כאשר תהליכונים (threads) רבים רצים בתהליך (process) בודד.  במעבדים מרובי ליבה, תכונה זו מאפשרת מקביליות אמתית.  אפליקציות שנכתבו למערכות עם מעבד יחיד לא תמיד ירוצו בצורה יעילה על מערכות המשלבות מעבדי ריבוי ליבה.  כל תחרות מובנת על משאבים ימנע ריצה מקבילית ויגרום לצוואר בקבוק.  אפליקציות שתכליתן ריצה על מעבד יכולות לנצל טוב יותר את ריבוי המעבדים מאשר אפליקציות שדורשות גישה רציפה לזיכרון או ל- I/O.  אפליקציות שהן multithreaded יכולות בצורה עקיפה לגרום לתחרות על משאבים כאשר הן מבקשות שרות ממערכת ההפעלה.
כאשר בוחנים אפליקציות שרצות על פתרונות מרוביי ליבה, המתכננים חייבים להחליט על הקצאת פונקציות מתוך האפליקציה ואם קיים צורך, לתכנן אותה מחדש כדי שתוכל להשתמש במקביליות. המתכננים חייבים לבחון את המאזן בין שימוש ב- multithreading כנגד nonmultithreading  כדי לרתום את הכוח של מעבדים מרוביי הליבה. במקרים מסוימים, ביצועי המערכת יהיו טובים יותר דווקא במערכת עם מעבד אחד.

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

תגובות סגורות