רשת תקשורת לאובייקטים – GOBSnet – במעבדים מרובי ליבות

אסף גליל

בשנים האחרונות חלה התפתחות עצומה בזמינות מעבדים מרובי ליבות.   התפתחות זו מקיפה  משפחות מעבדים שמאופינות בביצועים גבוהים וגם את אלו המאופינות על ידי הספקים נמוכים.
בישומי  Embedded  השאיפה הינה תמיד להשיג את הביצועים הטובים ביותר בהספק הנמוך ביותר האפשרי. עם התפתחות האפשרויות לריבוי ליבות וירידת הספקים – הפכו ישומי  Embedded  רבים לאפשריים בצורות שונת של ביזור ליבות – על אותה פלטפורמת  PC  ובין פלטפורמות  PC.
השיטה המקובלת לצורת השימוש בריבוי הליבות במערכות  Embedded  במיוחד  באלו הדורשות ביצועי זמן אמת הינה  Asymmetrical Multi Processing – AMP. הסיבה היא שבישומי זמן אמת נתוני הטיפול בפסיקות חשובים ביותר, וב AMP  משיגים שליטה מוחלטת ובידוד – כך שטיפול בפסיקות  בליבה אחת אינו משפיע כלל על נתוני הטיפול בפסיקות בליבה אחרת. סכמת מערכת כזו מופיעה בשרטוט מס‘ 1.
כל ליבה מריצה עותק מלא של מע”ה כך שבמקביל רצות על הפלטפורמה מספר מע”ה מלאות. לכל ליבה מוקצים התקני ה  I/O  שבהם עליה לטפל – כך ניתן לטפל בכמה התקנים מבלי שתהיה כל הפרעה הדדית ביניהם.
חברת TenAsys  שפעילה כבר שנים רבות בפיתוח ובהספקת מע”ה לזמן אמת  על  X86 – נעזרת בארכיטקטורת  AMP  עבור מע”ה שלה הקרויה  INtime.
כדי לאפשר את ביצוע ה- AMP  יש ל  INtime  שתי תכונות עזר:
1 –  Embedded Virtualization
2 –  Global Object Network

שרטוט 1

Embedded Virtualization
באמצעות כלי הקונפיגורציה של  INtime  מחולק הזכרון בין הליבות. מערכת הגנה ברמת חומרת המעבד – אינה מאפשרת לתוכנת ליבה אחת לגלוש – ובכך מושג הבידוד.  בנוסף כל מרכיב  I/O  משוייך – יחד עם הפסיקות שלו – לליבה  מסוימת שבה ירוצו התהליכים שיטפלו ברכיב.
תוך כדי ריצה – תישמור שיכבת הוירטואליזציה הזו – על מה שהוגדר. ניתן כמובן לשנות את הקצאות הזיכרון ושיוך ההתקנים לליבות  – ולהגדיר אותם בצורה האופטימלית  תוך כדי התפתחות הפרויקט ובהסתברות על כלים למדידת זמנים: זמני ביצוע, וזמני תגובה לפסיקות. הכלי האופטימלי לנושא הוא  INscope  שמסופק עם המערכת ומציג את התוצאות בצורה גרפית עבור כל ליבה – ברזולוציה של כמיקרו שניה אחת.

שרטוט 2

Global Objects Network – היכולת לתקשר במנגנוני זמן אמת בין ליבות.
כל מערכת לזמן אמת פועלת על אוביקטים (Mailbox Semaphore Shared Memory etc.) שבעבודה איתם מושגות התכונות הנדרשות.  ל INtime הוסיפו יכולת  לפעול על אובייקט שנמצא על ליבות אחרות ומוגדר כגלובלי.
האוביקט יכול להמצא על ליבה אחרת באותו ה- PC  או על Host אחר המריץ  INtime. האובייקט מכונה  Global Object, והיכולת לתקשר באמצעותו קרויה  Global Object Network או בקיצור  GOBSnet.
בהסתכלות על המערכות המקושרות – לכל ליבה (Node) המריצה INtime  ישנו שם לוגי המורכב ממספר ה- Host ומספר הליבה. למשל  Host 2 Node B  הינה מע”ה  INtime  שרצה  על ליבה 1 במחשב Node)  PC) מספר
שרטוט 2 ממחיש את השמות הלוגיים.
מעל ה-  Intime Kernel  שרץ על כל ליבה, רצים שני שרותים (מסומנים גם הם) בשרטוט מס‘ 2: האחד GOBS manager שמנהל את האינטראקציה בין ה- Objects. והשני   DSM  שמנהל את האינטראקציה בין ה- Processes למימשק ה- API. בכל ישום שרץ התווספו פניות לזיהוי  Node וליצירת  reference object  שמשקף את ה- remote object  שעליו פועלים.
האוביקטים הינם אלו הרגילים: Shared Memory ,Semaphore ,Mailbox וכל הפקודות הפועלות על אוביקט רגיל – פועלות גם על  Global Object.

שרטוט 3

ביזור הפתרון
כל ישום בנוי מ- processes. ניתן לבזר את ה- processes בין Nodes שונים מהשיקולים הבאים:
ביצועים – אם ה- processes צורכים זמן  cpu  רב, ניתן לפזר אותם ל  nodes  אחרים.
דטרמיניסטיות – אם ישנם יותר מידי תהליכים שזמן התגובה של כל אחד מהם לטיפול של  Interrupt Thread   חשוב – אזי באמצעות הביזור של התהליכים – מאפשרים  שכל ה- Interrupt thread  לא יופרעו האחד מהשני וכמובן לא יפריעו לתהליכים שרצים על  Node  אחר.
מרחק – אם ההתקנים שבהם אמורה המערכת לטפל  פרושים במרחק האחד ממשנהו – יש לשקול הקצאת  Nodes   על  תוספת של  PCs  שמחוברים בחיבור  LAN.
האמצעים לביזור התהליכים הם סטטיים או דינמיים, או שילוב של שניהם.
חלוקת סטטית  פירושה  שכאשר ה  kernel מתחיל לרוץ הוא מטעין את התהליכים, בסדר הדרוש, כל אחד לליבה שהוגדרה עבורו.
חלוקה דינמית היא אפשרות לטעון תהליך תוך כדי ריצה בהתאם לקריטריונים מסוימים שקובע המתכנן.
בשרטוט  מס‘ 3 מומחשת יכולת הביזור שהוזכרה. במצב הראשוני כל ליבה מריצה ישום המסומן במספר הליבה המקורית שהריצה אותו: APP1 APP2  וכו. APP1  מטפל גם בהתקן  I/O.
תוך כדי פיתוח מבחינים ש APP1  אינו מספיק לעבד את המידע המתקבל מההתקן  וחלקים ממנו אינם מסוגלים להשלים עבודתם במועד.
הפתרון הוא לחלק את  APP1  לשני ישומים – האחד שמטפל בעיקר ב  I/O  והשני שמעבד את הנתונים שהתקבלו מההתקן. ההתקשרות בין חלקי  APP1  היא באמצעות  Global Objects. החלוקה אינה פוגעת כלל בדטרמיניסטיות שמקבל התקן ה  I/O  ומאפשרת יכולת עיבוד של הנתונים שאינה מופרעת כלל ע”י הטיפול בהתקן.
עבור ישומים 3 ו- 4 הכיוון הוא הפוך – במקום להתקשר על ידי אוביקטים גלובליים, הם מתקשרים ביניהם על ידי אוביקטים רגילים.
על ידי הוספת מספר קטן של שורות  code  לזיהוי ה  Node  , והקצאה שתלויה בזיהוי – מקבלים תוכנה שפועלת ללא כל שינוי אפילו אם מבצעים הקצאה שונה של התהליכים לליבות.
משמעות יכולות GOBSnet  לתכנון מערכות.
התכונה החשובה שמתקבלת באמצעות השימוש ב  Global Objects  הינה יכולת ה  scaling:  התאמת מבנה המערכת מבחינת חומרה ותוכנה לדרישות גידול.
השימוש ב  Global Objects  מאפשר  לכתוב את התוכנה פעם אחת עבור כל הגדלים הדרושים, ולבחור בצורה פשוטה בכלי קונפיגורציה את כל ההקצאות במערכת:
גידול זיכרון, פיזור תהליכים שרצו על ליבה אחת לכמה ליבות (גם על ליבות שרצות על  PC  אחר), העברת  תהליכים מעבודה על כמה ליבות לליבה אחת.
השקיפות הזו שמושגת במערכת  AMP  – דומה לזו הטבעית כל כך במערכת  SMP  – אבל בשני יתרונות משמעותיים שאינם אפשריים ב  SMP:
הביזור אינו פוגע בדטרמיניסטיות של המערכת בטיפול בהתקנים.
הביזור אפשרי לא רק לליבות שעל אותו ה-  PC  אלא גם על  PC  אחרים שנמצאים ברשת.

שרטוט 4

לסיכום
מעל מעבדים מרובי ליבות ניתן לשלב בין  Nodes  שמריצים את מע”ה  Distributed INtime – ללא  Windows  עם  Nodes  שמריצים  Intime for Windows.
אם ההתקשורת בין כל תהליכי זמן אמת מבוצעת מעל  GOBSnet – יכול המתכנן להתאים את קונפיגורצית החומרה (מספר הליבות, קיום של  Nodes  שמחוברים ברשת) לדרישות הלקוח, ללא שינוי תכנה, ובשמירה מלאה על ביצועי זמן אמת של המערכת.  שרטוט מס‘ 4 מציג מערכת כזו.
על המחבר: אסף גליל הוא מהנדס יישומים של חברת (TenAsys (www.TenAsys.com    והחברה שבבעלותו מיצגת אותה בישראל.
לאסף למעלה מ 30 שנות נסיון במערכות משובצות מחשב עם דגש על מעבדים ותוכנות למשפחותX86.

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