הבנת ארכיטקטורה של NUMA

Understanding Numa Architecture



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

עיצוב אוטובוסי הקלט/פלט מייצג את עורקי המחשב וקובע באופן משמעותי כמה ומהירות ניתן להחליף נתונים בין הרכיבים היחידים המפורטים למעלה. הקטגוריה העליונה מובילה על ידי רכיבים המשמשים בתחום מחשוב בעל ביצועים גבוהים (HPC). החל מאמצע 2020, בין הנציגים העכשוויים של HPC ניתן למנות את Nvidia Tesla ו- DGX, Radeon Instinct ומוצרי מאיץ מבוססי Intel Xeon Phi GPU (ראה [1,2] להשוואות מוצרים).







הבנת NUMA

גישה לא אחידה לזיכרון (NUMA) מתארת ​​ארכיטקטורת זיכרון משותפת המשמשת במערכות עיבוד מרובות עכשוויות. NUMA היא מערכת מחשוב המורכבת מכמה צמתים בודדים באופן שהזיכרון המצרפי משותף בין כל הצמתים: לכל מעבד מוקצה זיכרון מקומי משלו ויכול לגשת לזיכרון ממעבדים אחרים במערכת [12,7].



NUMA היא מערכת חכמה המשמשת לחיבור יחידות עיבוד מרכזיות מרובות (CPU) לכל כמות של זיכרון מחשב הזמין במחשב. הצמתים היחידים של NUMA מחוברים באמצעות רשת מדרגית (אוטובוס I/O) כך שמעבד יכול לגשת באופן שיטתי לזיכרון המשויך לצמתים אחרים של NUMA.



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





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

מבט לאחור: אבולוציה של מעבדים מרובי זיכרונות

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



כפי שהוסבר על ידי פרנק דמנמן [8], בתחילת שנות השבעים, הצורך במערכות שיכולות לתת שירות למספר פעולות משתמש בו זמנית וליצור נתונים מוגזמים הפך למיינסטרים עם הכנסת מערכות מסדי נתונים יחסיים. למרות הקצב המרשים של ביצועי מעבד אחד, מערכות מרובי מעבדים היו מצוידות טוב יותר להתמודד עם עומס עבודה זה. כדי לספק מערכת חסכונית, שטח כתובות זיכרון משותף הפך למוקד המחקר. בשלב מוקדם, זכו למערכות שמשתמשות במתג מוטות צולבים, אולם מורכבות העיצוב הזו גדלה יחד עם גידול המעבדים, מה שהפך את המערכת מבוססת האוטובוסים לאטרקטיבית יותר. מעבדים במערכת אוטובוסים [יכולים] לגשת לכל שטח הזיכרון על ידי שליחת בקשות באוטובוס, דרך חסכונית מאוד להשתמש בזיכרון הזמין בצורה מיטבית ככל האפשר.

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

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

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

שיפור יעילות הגישה לנתונים היא אחת המטרות העיקריות של עיצוב המעבד העכשווי. כל ליבת מעבד ניתנה במטמון קטן ברמה אחת (32 KB) ובמטמון ברמה 2 גדולה יותר (256 KB). הליבות השונות יחלקו מאוחר יותר מטמון ברמה 3 של מספר MB, שגודלו גדל במידה ניכרת עם הזמן.

כדי להימנע מטעויות מטמון - בקשת נתונים שאינם במטמון - משקיעים זמן מחקר רב במציאת המספר הנכון של מטמון CPU, מבני מטמון ואלגוריתמים מתאימים. עיין [8] להסבר מפורט יותר של הפרוטוקול של אחסון במטמון [4] ​​וקוהרנטיות מטמון [3,5], כמו גם רעיונות העיצוב מאחורי NUMA.

תמיכת תוכנה עבור NUMA

ישנם שני אמצעי ייעול תוכנה שעשויים לשפר את הביצועים של מערכת התומכת בארכיטקטורת NUMA - זיקה של מעבד ומיקום נתונים. כפי שהוסבר ב [19], זיקת המעבד […] מאפשרת כריכה ופרק של תהליך או חוט למעבד יחיד, או טווח של מעבדים כך שהתהליך או החוט יבוצעו רק על המעבד או המעבדים המיועדים במקום כל מעבד. המונח מיקום נתונים מתייחס לשינויי תוכנה שבהם הקוד והנתונים נשמרים קרוב ככל האפשר בזיכרון.

מערכות ההפעלה השונות הקשורות ל- UNIX ו- UNIX תומכות ב- NUMA בדרכים הבאות (הרשימה שלהלן לקוחה מ [14]):

  • תמיכה ב- Silicon Graphics IRIX בארכיטקטורת ccNUMA מעל 1240 מעבדים עם סדרות שרת Origin.
  • Microsoft Windows 7 ו- Windows Server 2008 R2 הוסיפו תמיכה בארכיטקטורת NUMA על פני 64 ליבות לוגיות.
  • גרסה 2.5 של ליבת לינוקס כבר הכילה תמיכה בסיסית ב- NUMA, אשר שופרה עוד יותר במהדורות הקרנל הבאות. גרסה 3.8 של ליבת לינוקס הביאה בסיס NUMA חדש שאיפשר פיתוח מדיניות NUMA יעילה יותר במהדורות גרעין מאוחרות יותר [13]. גרסה 3.13 של ליבת לינוקס הביאה מדיניות רבות שמטרתן לשים תהליך קרוב לזיכרון שלו, יחד עם טיפול במקרים, כגון שיתוף דפי זיכרון בין תהליכים או שימוש בדפי ענק שקופים; הגדרות בקרת מערכת חדשות מאפשרות הפעלה או השבתה של איזון NUMA, כמו גם הגדרת פרמטרים שונים של איזון NUMA [15].
  • הן אורקל והן OpenSolaris מודל ארכיטקטורה NUMA עם הכנסת קבוצות לוגיות.
  • FreeBSD הוסיף זיקה NUMA ותצורת מדיניות ראשוניים בגרסה 11.0.

בספר מדעי המחשב והטכנולוגיה, הליכי הוועידה הבינלאומית (CST2016) נינג קאי מציע כי מחקר ארכיטקטורת NUMA התמקד בעיקר בסביבת המחשוב המתקדמת והצעת מחיצות רדיקס המודעות ל- NUMA (NaRP), אשר מייעל את הביצועים של מטמונים משותפים בצמתים NUMA להאיץ יישומי בינה עסקית. ככזה, NUMA מייצג אמצע בין מערכות זיכרון משותף (SMP) עם כמה מעבדים [6].

NUMA ו- Linux

כפי שצוין לעיל, גרעין לינוקס תומך ב- NUMA מאז גירסה 2.5. הן Debian GNU/Linux והן אובונטו מציעים תמיכה ב- NUMA לאופטימיזציה של תהליכים באמצעות שתי חבילות התוכנה numactl [16] ו- numad [17]. בעזרת הפקודה numactl, תוכל לרשום את מלאי הצמתים הזמינים NUMA במערכת שלך [18]:

# numactl -חומרה
זמין:2צמתים(0-1)
צוֹמֶת0מעבד:0 1 2 3 4 5 6 7 16 17 18 19 עשרים עשרים ואחת 22 2. 3
צוֹמֶת0גודל:8157MB
צוֹמֶת0חינם:88MB
צוֹמֶת1מעבד:8 9 10 אחת עשרה 12 13 14 חֲמֵשׁ עֶשׂרֵה 24 25 26 27 28 29 30 31
צוֹמֶת1גודל:8191MB
צוֹמֶת1חינם:5176MB
מרחקים של הצומת:
צוֹמֶת0 1
0:10 עשרים
1:עשרים 10

NumaTop הוא כלי שימושי שפותח על ידי אינטל לניטור יישוב זיכרון זמן ריצה וניתוח תהליכים במערכות NUMA [10,11]. הכלי יכול לזהות צווארי בקבוק פוטנציאליים הקשורים ל- NUMA ומכאן לסייע לאיזון מחדש של הקצאות זיכרון/מעבד כדי למקסם את הפוטנציאל של מערכת NUMA. עיין [9] לתיאור מפורט יותר.

תרחישי שימוש

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

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

סיכום

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

קישורים והפניות

  1. השווה את NVIDIA Tesla לעומת Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. השווה את NVIDIA DGX-1 לעומת Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. קוהרנטיות מטמון, ויקיפדיה, https://en.wikipedia.org/wiki/Cache_coherence
  4. חטטנות אוטובוסים, ויקיפדיה, https://en.wikipedia.org/wiki/Bus_snooping
  5. פרוטוקולי קוהרנטיות מטמון במערכות מרובת מעבדים, חנונים לחנונים, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. מדעי המחשב והטכנולוגיה - הליכי הוועידה הבינלאומית (CST2016), נינג קאי (עורכת), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. דניאל פ. בובט ומרקו צ'סאטי: הבנת ארכיטקטורת NUMA בהבנת ליבת לינוקס, מהדורה שלישית, או'ריילי, https://www.oreilly.com/library/view/understanding-the-linux/0596005652/
  8. פרנק דנמאן: NUMA צלילה עמוקה חלק 1: מ- UMA ל- NUMA, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. קולין איאן קינג: NumaTop: כלי ניטור מערכת NUMA, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. נומטופ, https://github.com/intel/numatop
  11. חבילת numatop עבור Debian GNU / Linux, https://packages.debian.org/buster/numatop
  12. ג'ונתן קהאיאס: הבנת גישה/ארכיטקטורות זיכרון לא אחידות (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. Linux Kernel News עבור Kernel 3.8, https://kernelnewbies.org/Linux_3.8
  14. גישה לא אחידה לזיכרון (NUMA), ויקיפדיה, https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. תיעוד ניהול זיכרון לינוקס, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html
  16. חבילת numactl עבור Debian GNU/Linux, https://packages.debian.org/sid/admin/numactl
  17. מספר חבילות עבור Debian GNU/Linux, https://packages.debian.org/buster/numad
  18. כיצד למצוא אם תצורה של NUMA מופעלת או מושבתת ?, https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. זיקה של מעבד, ויקיפדיה, https://en.wikipedia.org/wiki/Processor_affinity

תודה

המחברים מבקשים להודות לג'רולד רופרטכט על תמיכתו בעת הכנת מאמר זה.

על המחברים

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

פרינס קיי נהנדה הוא מהנדס מכשור ובקרה (מטרולוגיה) במדידת Paeflow בהארארה, זימבבואה.

פרנק הופמן עובד בכביש-רצוי מברלין (גרמניה), ז'נבה (שוויץ) וקייפטאון (דרום אפריקה)-כמפתח, מאמן ומחבר למגזינים כמו Linux-User ו- Linux Magazine. הוא גם מחבר שותף של ספר ניהול חבילות דביאן ( http://www.dpmb.org ).