בדף הזה מפורט סיכום של התכונות העיקריות בכל גרסה של הליבה, ומוצגים קישורים למידע נוסף.
תכונות חדשות בליבה 6.12
בקטע הזה מוסבר על התכונות החדשות בליבה 6.12.
ניתוח פרופילים של הקצאת זיכרון
המפתח להבנת השימוש בזיכרון הוא לדעת איפה מתבצעות ההקצאות.
ליבה 6.12 כוללת מערכת חדשה לזיהוי הקצאת זיכרון שנקראת יצירת פרופיל של הקצאת זיכרון (CONFIG_MEM_ALLOC_PROFILING
בתצורה).
כשמשתמשים בפרופיל הקצאת הזיכרון, כל הקצאה משויכת לשורת מקור ייחודית, כך שאפשר לזהות במהירות בעיות בהקצאות.
בנוסף, פרופיילינג של הקצאת זיכרון:
משמש בשלב ההנדסה, אבל זמין בתמונת ה-GKI הרגילה.
אפשר להפעיל אותו באמצעות הפרמטר
sysctl.vm.mem_profiling
.הבדיקה פועלת גם במודולים בתוך הליבה וגם במודולים טעונים.
io_uring מהיר יותר עם קריאה ללא העתקה וקריאה בכמה סבבים
בליבה 6.12, המודולים statsd
ו-logd
משתמשים ב-sendfile zero-copy, לשיפור הביצועים שלהם.
בנוסף, בגרסה הזו של הליבה מופעלת קריאה של כמה צילומים (multishot read), שבה פעולת קריאה אחת יכולה לאחזר כמה קטעי נתונים בו-זמנית, וכך לשפר את הביצועים.
שיפורים ביכולות ובתמיכה של Berkeley Packet Filter (BPF)
בליבה 6.12, ערכת הכלים של BPF הועברה כדי לתמוך ב-CO-RE ובתכונות מודרניות נוספות. בנוסף, מעבד טעינה חדש של BPF מאפשר להשתמש ב-BPF מודרני בתוכניות שנכללות ב-AOSP.
ביצוע דרך שרת proxy
ביצוע באמצעות שרת proxy מאפשר לתזמן לקבל צילי מעבד מתהליכים בעדיפות גבוהה כדי לשחזר מנעולים שנמצאים בחזקת תהליכים בעדיפות נמוכה יותר. התכונה הזו מפחיתה את הבעיות של היפוך העדיפויות.
תכונות חדשות בליבה 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) בגרסאות build לניפוי באגים כדי לזהות מרוצים בקוד הליבה.
בנוסף, אפשר להשתמש ב-Kernel Memory SANitizer (KMSAN) כדי למצוא ערכים שלא הוקצו בליבה.
שיפורים בתמיכה ב-ARM64
הליבה של גרסת 6.1 כוללת כמה שיפורים לארכיטקטורת ARM64, כולל:
- תמיכה בתוספי הטיימרים של ARMv8.6
- תמיכה באלגוריתם QARMA3 לאימות של מצביע
- תמיכה ראשונית ב-ARMv9 Scalable Matrix Extension (SME)
- שיפורים בתיקוני הבאגים של התכונות החלופיות, שמובילים לגודל קובץ אימג' קטן יותר של הליבה