בשנה שעברה דנו כאן בבלוג בהצעה של ByteDance (יוצר טיקטוק) לכלי בשם Parker (PARTitioned KERnel), טכנולוגיה ניסיונית המאפשרת למספר ליבות לינוקס לפעול בו זמנית. ועכשיו, קצת יותר משנה וחצי לאחר מכן, יצא כלי ציבורי חדש מהפרויקט, "Multikernel Linux (mklinux-v7.0-mk2)".
פיתוח זה מציג גרסה ייעודית של ליבת לינוקס המאפשרת ביצוע בו זמנית של מספר מופעי ליבה עצמאיים בתוך שרת פיזי יחיד. על ידי פעולה ישירה על גבי השרת החשוף, טכנולוגיה זו מבטלת לחלוטין את הצורך בהיפר-ויזורים או בשכבות וירטואליזציה, ומעניקה לכל מופע גישה ישירה לזיכרון, למעבד ולמכשירים שהוקצו.
בהתבסס על ליבת לינוקס 7.0 שפורסמה לאחרונה, הפרויקט מאפשר הפעלת תכונה זו דרך פרמטר התצורה CONFIG_MULTIKERNEL . אם אפשרות זו מושבתת, הליבה המתקבלת זהה לחלוטין ומתנהגת כמו לינוקס 7.0 סטנדרטי. נכון לעכשיו, גרסה ראשונה זו (v7.0-mk2) תומכת בלעדית בארכיטקטורות x86_64 ונועדה לגשר על פער הביצועים והאבטחה בין וירטואליזציה מסורתית לבידוד קונטיינרים.
בידוד ללא קנס ביצועים
הבעיה הגדולה ביותר עם וירטואליזציה היא "מס" הביצועים שגובה היפר-ויזורים. לעומת זאת, לינוקס מרובת ליבות מבטלת מעברי יציאה ממכונות וירטואליות , תרגום זיכרון ברמה השנייה והתקורה שנוצרת על ידי דגמי התקנים.
על פי נתוני ביצועים שפורסמו לאחר בדיקות על מעבדי Xeon Gold 5418Y (Sapphire Rapids), מערכת מרובת הליבות מדגישה עלייה דרמטית במהירות הביצוע בהשוואה ל-KVM אורחי. לדוגמה, מעבר הקשר בין תהליכים מהיר פי 2,5, זמן ההשהיה של ה-pipe מצטמצם ביותר ממחצית (פי 2,18), וקריאות מערכת בסיסיות, כגון פעולות קריאה וכתיבה, מרוויחות ביותר מ-25% בזמן תגובה.
בהשוואה למכולות Docker מסורתיות, Multikernel מציע הגנה מעולה מכיוון שמכיוון שהמכולות חולקות את אותה ליבת מארח, פגיעות ברמת הליבה, פאניקה או רוויה פנימית של נעילה משפיעה על כל הדיירים. במערכת האקולוגית Multikernel, לכל סביבה יש ליבה עצמאית משלה ; כלומר, אם מופע אחד סובל מכשל קריטי, האחרים ממשיכים לפעול ללא פגע, מה שמבטיח סביבה מבודדת אידיאלית להפעלת כל דבר, החל משרתי אינטרנט ועד לעומסי עבודה אינטנסיביים של אימון בינה מלאכותית (למידת מכונה) על אותה חומרה.
הקצאה ותזמור דינמיים עם Kerf
לינוקס מרובת ליבות פועלת באמצעות ליבה מארחת המנהלת מאגר משאבים גדול (מעבדים, זיכרון RAM והתקני PCI). תוך ניצול מבנה עץ ההתקנים הקיים (נגיש בכתובת /sys/fs/multikernel/), הליבה יוצרת מאגר זה ומפעילה "ליבות צאצאים" דרך תת-המערכת kexec_file_load() המקורית. באמצעות יכולות החיבור החם של לינוקס, ניתן להעביר משאבים אלה באופן דינמי בין מופעים מבלי להידרש אתחול מחדש של השרת, מה שמבטיח ביצועים צפויים וניתנים להתאמה בזמן אמת.
כדי לתזמר את המערכת האקולוגית הזו, המפתחים הציגו את כלי שורת הפקודה Kerf . כלי זה מנהל את כל מחזור החיים של המופעים, תוך הסתמכות על מודולים משלימים בקוד פתוח. אחד מהם הוא Lazy CMA, אשר מקצה זיכרון פיזי רציף בזמן ריצה מבלי לדרוש כל תצורה לפני אתחול.
עמוד התווך השני הוא DAXFS, מודול המאפשר ל-instances לשתף מערכות קבצים ישירות בזיכרון; הודות לכך, Kerf יכול לאתחל ליבת צאצא ישירות בתוך תמונת מכולה של Docker, לנצל את מערכת הקבצים שלה ללא צורך בשכבות אמולציה ולהשתמש בתיאורים בזיכרון לחיבור רשת ללא העתקת נתונים.
ראוי לציין כי מהדורה ראשונה זו עברה מבחני יציבות אינטנסיביים תחת ארכיטקטורות דפדוף של 5 רמות ו-KASLR פעיל, מה שמדגים כי שחזור משאבים בטוח לחלוטין גם כאשר ליבת צאצא קורסת.
על ידי מתן אפשרות לעומסי עבודה שהתנגשו עקב נעילות מערכת (כגון מספר רב של ניתוק קישור או שינוי שם של תהליכים באותו מטמון) להיות מחולקים על פני ליבות נפרדות המיושרות לשקעי המעבד הפיזיים, Multikernel Linux מדגים את היכולת להתרחב מעבר למחסום הביצועים שמוטל על ידי ליבה מונוליטי יחיד, ופותח עידן חדש באיחוד שרתים ובמחשוב ענן בעל ביצועים גבוהים.
לבסוף, אם אתם מעוניינים ללמוד עוד, תוכלו למצוא פרטים נוספים בקישור הבא.