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

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

תכונות חדשות בליבה 6.12

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

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

המפתח להבנת השימוש בזיכרון הוא לדעת איפה מתבצעות ההקצאות. ליבה 6.12 כוללת מערכת חדשה לזיהוי שיוך של הקצאת זיכרון שנקראת יצירת פרופיל של הקצאת זיכרון (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

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

תכונות חדשות ב-Kernel 6.6

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

תמיכה ב-Rust

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

מנעולים לכל אזור של זיכרון וירטואלי (VMA)

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

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

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

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

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

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

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

תכונות חדשות בליבה 6.1

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

אבטחה מהירה יותר באמצעות תקינות תהליך הבקרה בליבה (KCFI)

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

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

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

LRU של כמה דורות (MGLRU)

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

ההטמעה של MGLRU כוללת גם תמיכה בעץ חדש מסוג maple tree שבטוח ל-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) ב-builds לניפוי באגים כדי לזהות מרוצים בקוד הליבה.

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

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

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

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