נתוני הגרסה של הליבה

בדף הזה מופיע סיכום של התכונות העיקריות בכל מהדורת ליבה, וקישורים למידע נוסף.

תכונות חדשות בגרעין 6.12

בקטע הזה מוסבר על תכונות חדשות בליבה 6.12.

פרופיילינג של הקצאת זיכרון

כדי להבין את השימוש בזיכרון, צריך לדעת איפה מתבצעות ההקצאות. ‫Kernel 6.12 כולל מערכת חדשה לייחוס הקצאת זיכרון שנקראת memory allocation profiling (CONFIG_MEM_ALLOC_PROFILING בהגדרה). בעזרת פרופיל הקצאת זיכרון, כל הקצאה משויכת לשורת מקור ייחודית, כך שאפשר לזהות במהירות בעיות בהקצאות. בנוסף, פרופיילינג של הקצאת זיכרון:

  • הוא משמש במהלך שלב ההנדסה, אבל הוא זמין בתמונת GKI רגילה.

  • אפשר להפעיל את האפשרות הזו באמצעות פרמטר האתחול sysctl.vm.mem_profiling.

  • האפשרות הזו פועלת גם במודולים בתוך הליבה וגם במודולים שנטענו.

‫io_uring מהיר יותר עם קריאה ללא העתקה וקריאה מרובה

בליבת 6.12, המודולים statsd ו-logd משתמשים ב-sendfile zero-copy, וכך משפרים את הביצועים שלהם.

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

שיפורים ביכולות ובאפשרויות התמיכה של Berkeley Packet Filter‏ (BPF)

בליבת 6.12, ערכת הכלים BPF הועברה כדי לתמוך ב-CO-RE ובכמה תכונות מודרניות. בנוסף, טוען BPF חדש מאפשר שימוש ב-BPF מודרני לתוכניות שמהוות חלק מ-AOSP.

ביצוע דרך שרת proxy

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

תכונות חדשות בגרעין 6.6

בקטע הזה מוסבר על תכונות חדשות בליבת 6.6.

תמיכה ב-Rust

בפרויקטים רבים של ליבת 6.6 נעשה שימוש ב-Rust.

נעילות לכל אזור זיכרון וירטואלי (VMA)

ליבת 6.6 משתמשת בנעילות לכל אזור זיכרון וירטואלי כדי לטפל בבעיות של התנגשות עם mmap_sem (לשעבר mmap_lock). לכן, יכול להיות שזמני ההפעלה של אפליקציות שמשתמשות במספר גבוה של שרשורים יתקצרו ב-20% לכל היותר.

התזמן Earliest Eligible Virtual Deadline First (EEVDF) מחליף את CFS

ה-EEVDF מחליף את Completely Fair Scheduler (CFS) כדי לאזן טוב יותר את הגישה למעבד בין משימות קצרות וארוכות.

צריכת חשמל מופחתת מקריאות חוזרות (callback) של עדכון עותק לקריאה (RCU)

באפשרות RCU_LAZY נעשה שימוש בשיטה של אצווה להחזרת קריאות (callback) של RCU שמבוססת על טיימר, כדי לחסוך בחשמל. במערכת עם עומס נמוך או במצב סרק, האפשרות הזו יכולה להפחית את צריכת החשמל ב-5% עד 10%.

דחיסת זיכרון ZRAM משופרת

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

תכונות חדשות בגרעין 6.1

בקטע הזה מוסברות התכונות החדשות בגרעין 6.1.

אבטחה מהירה יותר עם שלמות זרימת הבקרה של ליבת המערכת (KCFI)

‫KCFI מחליף את שלמות זרימת הבקרה (CFI), וכתוצאה מכך עלות זמן הריצה פוחתת ולא נוצרת עלות בזמן ה-build. העלות המופחתת של זמן הריצה מאפשרת להפעיל את KCFI ביותר מקומות בהשוואה ל-CFI, במיוחד בנקודות מעקב וב-vendor hooks.

בנוסף ל-KCFI, ליבה 6.1 כוללת תכונות אבטחה רבות, כמו בדיקת גבולות קפדנית של memcpy והפחתת הסיכון להתקפות ספקולטיביות של קו ישר.

מידע נוסף על KCFI זמין במאמר בנושא Kernel control flow integrity.

Multi-Generational LRU (MGLRU)

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

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

מידע נוסף על MGLRU זמין במאמר בנושא Multi-Gen LRU.

תזמון

תחזוקה ועדכון של מתזמן המשימות הם חלק חשוב מהעבודה לשיפור ליבת המערכת. עדכוני ליבה בגרסה 6.1 כוללים:

  • נוסף תזמון שמודע לאשכולות, שמשפר את הביצועים על ידי מעבר לליבות שמשתפות מטמון L2.
  • הוסר היוריסטיקה מיותרת של מרווח אנרגיה. העדכון הזה משפר את ניצול האנרגיה בעד 5% על ידי הגבלת חלק מההעברות.
  • שיפור איזון העומסים כדי להפחית את זמן האחזור של ההתעוררות.
  • העברנו את תקופות החסד המקוצרות של RCU ל-kthread בזמן אמת. העדכון הזה הפחית באופן משמעותי את חריגות זמן האחזור שקשורות ל-RCU.

גרפיקה

הליבה 6.1 מכילה שיטות חדשות ל-dma-buf לייצוא ולייבוא של קובצי סנכרון, בהתאם לצורך ב-Vulcan Video API.

השיטה החדשה futex_waitv() מפשטת את העברת המשחקים מפלטפורמות אחרות על ידי המתנה לכמה futexes בו-זמנית.

כלים לניפוי באגים

אפשר להשתמש ב-Kernel Concurrency SANitizer ‏ (KCSAN) בגרסאות build לניפוי באגים כדי לזהות מצבי מירוץ בקוד הליבה.

בנוסף, אפשר להשתמש ב-Kernel Memory SANitizer‏ (KMSAN) כדי למצוא ערכים לא מאותחלים בקרנל.

שיפורים בתמיכה ב-ARM64

ליבת 6.1 כוללת שיפורים רבים לארכיטקטורת ARM64, כולל:

  • תמיכה בתוספי טיימר ARMv8.6
  • תמיכה באלגוריתם לאימות מצביעים QARMA3
  • תמיכה ראשונית ב-ARMv9 Scalable Matrix Extension (SME)
  • שיפורים בתיקון של תכונת החלופות, שמובילים לגודל קטן יותר של תמונת הליבה