לאחר חודשיים של פיתוח, לינוס טורוואלדס שחרר את הליבה. Linux 6.6. בין השינויים הבולטים: מתזמן משימות חדש של EEVDF; מנגנון shadow stack להגנה מפני פרצות; תמיכה ב-fs-verity ב-OverlayFS; יישום quota ו-xattr ב-tmpfs; הכנת fsck מקוונת ב-XFS; מעקב משופר אחר ייצוא סמלים "GPL בלבד"; תמיכה בשקעי רשת ב-io_uring; רנדומיזציה של זיכרון ב-kmalloc(); ReiserFS הוצא משימוש; פרימיטיבים עבור מנהל ההתקן Vulkan NVK נוספו ל-Nouveau.
הגרסה החדשה משלבת 15291 תיקונים מ-2058 מפתחים, עם גודל תיקון של 39 מגה-בייט (השינויים השפיעו על 14844 קבצים, הוסיפו 553359 שורות קוד והסירו 284012 שורות). הגרסה הקודמת כללה 14674 תיקונים מ-2016 מפתחים, עם גודל תיקון של 78 מגה-בייט. כ-44% מכלל השינויים בגרסה 6.6 קשורים למנהלי התקנים, כ-17% מהשינויים קשורים לעדכוני קוד ספציפיים לארכיטקטורות חומרה, 11% קשורים למחסנית הרשת, 4% קשורים למערכות קבצים ו-3% קשורים לתת-מערכות ליבה פנימיות.
חידושים מרכזיים בקרנל 6.6:
- שירותי זיכרון ומערכת
- מתזמן משימות חדש, EEVDF (Earliest Eligible Virtual Deadline First), יושם, והוא מחליף את מתזמן המשימות CFS (Completely Fair Scheduler), שסופק החל מגרסת ליבה 2.6.23. בעת בחירת התהליך הבא להעברת הביצוע, המתזמן החדש לוקח בחשבון תהליכים שלא קיבלו משאבי CPU מספיקים או שקיבלו כמות גדולה באופן לא הוגן של זמן CPU. במקרה הראשון, העברת הבקרה לתהליך נכפתה, בעוד שבמקרה השני, העברת הבקרה מתעכבת. מתזמן המשימות הישן של CFS השתמש בהיוריסטיקה ובכוונון עדין כדי לזהות תהליכים הדורשים תשומת לב מיוחדת, בעוד שהמתזמן החדש עוקב אחריהם בצורה מפורשת יותר ואינו דורש כוונון עדין. צפוי ש-EEVDF יפחיתו את ההשהיה במשימות ש-CFS נתקלה בהן בבעיות תזמון.
- בוצעו שינויים בטיפול בסמלים פנימיים של GPL בלבד, שמטרתם להקשות על מודולים קנייניים להשתמש במתווכים של GPL בלבד כדי לעקוף מגבלות גישה על תת-מערכות ליבה המאפשרות רק קוד מורשה על ידי GPL. הפונקציה symbol_get() מושבתת כעת עבור מודולים קנייניים, ומונעת מהם לחפש סמלים המסומנים כ-GPL בלבד. לעומת זאת, מודולי GPL לא יוכלו למצוא סמלים שיוצאו על ידי מודולים קנייניים.
- הגדרות תור עבודה נוספות (תור עבודה לא מאוגד) נוספו כדי לשפר את יעילות השימוש החוזר במטמון המעבד במערכות גדולות עם מספר מטמוני L3. הליבה כוללת גם את כלי השירות tools/workqueue/wq_dump.py לבדיקת תצורת תור העבודה הנוכחית.
- תמיכה ראשונית בפעולות ופקודות ספציפיות לשקעי רשת נוספה לתת-המערכת io_uring. הפקודה sysctl io_uring_disabled נוספה כדי להשבית את io_uring בכל המערכת. קלט/פלט ישיר במצב אסינכרוני הואץ משמעותית גם ב-io_uring. העלייה בתפוקה והפחתת ההשהיה עבור פעולות קלט/פלט לאחר יישום שינויים אלה מגיעות ל-37%.
- מהדר JIT עבור BPF יושם עבור ארכיטקטורת PA-RISC.
- ההגדרה /sys/devices/system/cpu/smt/control תומכת כעת בפרמטרים מספריים הקובעים את מספר ה-threads הזמינים לכל ליבת מעבד. בעבר, רק הערכים "on" ו-"off" להפעלה והשבתה של תמיכה בריבוי-threading סימטרי נתמכו. ניתן להשתמש בתכונה חדשה זו במעבדי PowerPC מסוימים התומכים ב-SMT hotplug כדי להפעיל SMT באופן סלקטיבי על ליבות ספציפיות במהלך הפעולה.
- המשך העברת שינויים מענף Rust-for-Linux, הקשור לשימוש ב-Rust כשפה שנייה לפיתוח דרייברים ומודולי ליבה (תמיכה ב-Rust אינה פעילה כברירת מחדל, ואינה גורמת לכך ש-Rust נכלל ברשימת תלויות הבנייה המחייבות עבור הליבה). בוצעה ההגירה ל-Rust 1.71.1 ול-bindgen 0.65.1. התכונה 'Zeroable' יושמה. נוספו פקודות המאקרו הפרוצדורליות 'paste!' ו-'#[derive(Zeroable)]'. תאימות עם '#[pin_data]' הובטחה. נוספו פונקציות האתחול '{,pin_}init_array_from_fn()' ושיטת '{,pin_}chain'. הורחבו היכולות של מודול 'types'. היכולת להריץ בדיקות מתיעוד Rust נוספה למסגרת בדיקות היחידות של kunit.
- תת-המערכת "eventfs" נוספה, מה שמפחית משמעותית את צריכת הזיכרון במערכת המעקב על ידי ביטול אחסון מבנים מיותרים המשמשים לייצוג נקודות מעקב במערכת הקבצים. בעבר, מבנים כאלה נוצרו עבור כל נקודות המעקב, ללא קשר לשאלה האם נעשה שימוש במעקב. בעזרת eventfs, ניתן ליצור מבנים כאלה באופן דינמי, רק בעת הצורך.
- היכולות של כלי השירות perf הורחבו.
- מידע לאבחון יעילות מנגנון מיזוג ליבות Samepage (KSM) נוסף לקובץ /proc/pid/smaps.
- ממשק ה-API של Frontswap, המאפשר הקצאת מחיצות swap בזיכרון שאינו ניתן לכתובת ישירה ואינו מספק מידע בזמן אמת על שטח פנוי, הוסר. ממשק API זה שימש רק ב-zswap, ולכן הוחלט להשתמש בפונקציונליות זו ישירות ב-zswap, ובכך לבטל תקורה מיותרת.
- עבור ארכיטקטורת RISC-V, נוספה תמיכה בגישה למוני ביצועים ממרחב המשתמש ויכולת להציב קובץ dump של ליבה לאחר קריסה באזור שמעבר לגבול של 4GB.
- נוספה תמיכה ראשונית עבור הוראות ARM SME (Scalable Matrix Extension).
- יישם את היכולת להשתמש בכלי ניפוי שגיאות KDB, KGDB, kcov, KFENCE ו-KASAN במערכות עם ארכיטקטורת LoongArch.
- נוספה תמיכה בקבצי בדיקת ליבה במערכת האינטגרציה הרציפה GitLab, המשמשת בפיתוח מנהלי התקנים של גרפיקה.
- תת-מערכת דיסק, קלט/פלט ומערכות קבצים
- מערכת הקבצים OverlayFS תומכת כעת באחסון גיבובי fs-verity בתכונה המורחבת overlay.verity (xattr), אשר ניתן להשתמש בה כדי לאמת את שלמותם ואותנטיותם של קבצים בשכבות OverlayFS התחתונות באמצעות גיבובי קריפטוגרפיים ומפתחות. לפיכך, OverlayFS כולל כעת את כל השינויים הנדרשים על ידי פרויקט Composefs כדי לפעול כשכבה מעל OverlayFS ו-EROFS.
- מערכת הקבצים XFS הוכנה לתמוך בכלי השירות fsck לבדיקה ותיקון מקוונים של בעיות שזוהו, מבלי לנתק את מערכת הקבצים. בנוסף, XFS תומך כעת בשימוש בתיקים גדולים במטמון העמודים והוסיף מספר אופטימיזציות קשורות, המשפרות משמעותית את הביצועים עבור עומסי עבודה מסוימים.
- מערכת הקבצים tmpfs תומכת כעת בתכונות מורחבות המוגדרות על ידי המשתמש (xattrs), קלט/פלט ישיר ומכסות ספציפיות למשתמש ולקבוצה. קיזוזי ספריות התייצבו, מה שפתור בעיות בייצוא tmpfs דרך NFS.
- כדי לשפר את האבטחה, הדגל FSCONFIG_CMD_CREATE_EXCL נוסף לממשק ה-API לניהול הרכבה. דגל זה מונע שיתוף של בלוק-העל בין נקודות הרכבה מרובות (מונע צירוף מחיצה אחת לנקודות הרכבה מרובות). האפשרות "--exclusive" נוספה לכלי הרכבה כדי להפעיל דגל זה.
- תת-המערכת VFS תומכת כעת בשינויים בזמן אמת בפרמטרים של זמן גישה ושינוי (atime, mtime). בעבר, נתוני זמן באו לידי ביטוי בעיכוב מסוים, מה שהפריע למעקב אחר נתונים במטמון במערכות כמו NFS (בשל העיכוב בזיהוי שינויים בקבצים, המערכת יכלה להניח בטעות שנתוני המטמון היו מעודכנים). תכונה חדשה זו זמינה עבור Btrfs, Ext4, tmpfs ו-XFS.
- Btrfs הוציאה משימוש את מנגנון בדיקת השלמות המובנה שלה, שהופעל בזמן הבנייה באמצעות הפרמטר BTRFS_FS_CHECK_INTEGRITY. מנגנון זה אינו מתוחזק עוד, אינו נבדק עוד, ויוצר עומס נוסף על המעבד והזיכרון. בנוסף, Btrfs ביצעה אופטימיזציה של ביצועי קוד בדיקת מערכת הקבצים החדש שלה (scrub).
- מערכת הקבצים Ext4 כוללת כעת בדיקות תקופתיות לעדכוני סופר-בלוק ומאיצה הקצאת זיכרון בעת הוספה לסוף קובץ.
- תת-המערכת FUSE תומכת כעת בתכונה btime ("זמן לידה"), המציינת את זמן יצירת ה-inode.
- שינוי הרשאות עבור קישורים סמליים אסור.
- קריאת המערכת fchmodat2() נוספה. היא שונה מקריאת המערכת fchmodat() בכך שיש לה ארגומנט נוסף לציון דגלים. נכון לעכשיו, רק AT_SYMLINK_NOFOLLOW ו-AT_EMPTY_PATH נתמכים. דגלים אלה מאפשרים לפונקציית libc fchmodat() להשבית בקלות את הסרת ההפניות של קישורים סמליים ולאפשר שימוש במתאר קובץ כאשר מצוין נתיב ריק.
- מערכת הקבצים EROFS (מערכת קבצים מורחבת לקריאה בלבד), שתוכננה לשימוש במחיצות לקריאה בלבד, תומכת כעת באלגוריתם הדחיסה Deflate. מסנן bloom הסתברותי משמש להאצת חיפושים אחר מאפיינים מורחבים.
- ההגדרה CONFIG_BUFFER_HEAD נוספה, המאפשרת בניית הליבה ללא שימוש במבנה buffer_head. בעת בנייה ללא buffer_head, ניתן להשתמש בהתקני בלוקים ובמערכות קבצים מסוימות, כגון xfs, btrfs, cramfs, erofs ו-squashfs.
- מנהל ההתקן של הבלוק ublk, המאפשר העברת לוגיקה ספציפית לתהליך מרחב המשתמש, תומך כעת בהתקני אחסון אזוריים (חלוקת קבוצות של בלוקים או סקטורים לאזורים, המאפשרת רק הוספה סדרתית של נתונים עם עדכון קבוצת הבלוקים כולה).
- יישום מערכת הקבצים ReiserFS הועבר מקטגוריית הנתמכת לקטגוריית המיושנת. התמיכה ב-ReiserFS מתוכננת להסתיים בשנת 2025. הסיבות שצוינו להוצאת ReiserFS משימוש כוללות קיפאון בתמיכה, בעיה בלתי פתורה משנת 2038, היעדר יכולות סבילות לתקלות ורצון להפחית את עלות התחזוקה של שינויים במערכות קבצים צולבות הקשורים לתמיכה ב-API להרכבה, iomap ופורוטורים חדשים.
- שרת ה-NFS מיישם מנגנון האצלת כתיבה עבור NFSv4, מה שמשפר את יעילות שמירת המטמון של כתיבת קבצים כדי להפחית את תעבורת הרשת. כעת כלולה תמיכה בפעולת READ_PLUS, שהוגדרה ב-NFS 4.2.
- תמיכה ב-fscrypt נוספה למערכת הקבצים Ceph.
- וירטואליזציה ואבטחה
- יישום של Shadow Stack נוסף. מנגנון זה חוסם פרצות ניצול רבות על ידי מינוף יכולות החומרה של מעבדי אינטל כדי להגן מפני דריסה של כתובת ההחזרה מפונקציה במקרה של גלישת מאגר של הפונקציה. הגנה זו פועלת על ידי אחסון כתובת ההחזרה לא רק על הפונקציה הרגילה אלא גם על פונקציה נפרדת בשם "shadow", שלא ניתן לשנותה ישירות לאחר העברת השליטה לפונקציה. לפני היציאה מהפונקציה, כתובת ההחזרה נשלפת מחסנית הצללים ומושווית לכתובת ההחזרה מהפונקציה הראשית. אי התאמה בכתובות גורמת לזריקת חריגה, החוסמת מצבים בהם פרצה ניצול הצליחה לדרוס כתובת על הפונקציה הראשית. פונקציה של Shadow Stack בחומרה נתמכת רק בגירסאות 64 סיביות, בעוד שגירסאות 32 סיביות משתמשות באמולציית תוכנה.
- נוספה תמיכה בבנייה עם מהדר Clang כאשר מצב ההגנה CFI (Control Flow Integrity) מופעל, החוסם הפרות של זרימת בקרה הנגרמות על ידי פרצות אשר משנות מצביעי פונקציה המאוחסנים בזיכרון.
- עבור ארכיטקטורת RISC-V, מופעלת אקראיות של מיקום הזיכרון של הליבה בעת האתחול.
- הדגל SECCOMP_USER_NOTIF_FD_SYNC_WAKE_UP נוסף לקריאה למערכת seccomp(), מה שמאפשר לעיבוד אירועים מתהליכים מנוטרים באופן סינכרוני לצורך פעולה יעילה יותר של מתזמן המשימות.
- הפונקציה kmalloc() מספקת אקראיות של מטמוני slab, מה שמקשה על ניצול פגיעויות הליבה.
- מהאפשרויות הקשורות להפעלת מערכת בקרת גישה כפויה SELinux, ההתייחסות לסוכנות לביטחון לאומי של ארה"ב הוסרה. מאחר שהפרויקט מתפתח תחת חסות הקהילה במשך 20 שנה ונתמך על ידי מתחזקים עצמאיים, הוחלט לעבור לשם "SE".Linux" במקום "NSA SELinux" בתגובות ובתיעוד ב-Kconfig (לדוגמה, ההסבר לפרמטר הבנייה SECURITY_SELINUX שונה מ-"NSA SELinux תמיכה" ב-"SE"Linux תְמִיכָה").
- לקריאה למערכת userfaultfd() יש כעת פעולת UFFDIO_POISON המאפשרת סימון דפי זיכרון כמורעלים, שניתן להשתמש בה כדי להעביר דפי זיכרון פגומים. מכונות וירטואליות ממערכת אחת לאחרת.
- ממשק סמלי חדש (/dev/vfio/devices/vfioX) נוסף לתת-מערכת VFIO לניהול התקני VFIO, המאפשר למשתמש לפתוח קובץ ישירות עם התקן, מבלי לגשת לממשק הקבוצה הישן /dev/vfio/$groupID.
- В שרת NFS ביטל את התמיכה בסוגי הצפנת Kerberos מדור קודם באמצעות אלגוריתמי DES ו-3DES.
- בעת הפעלה בסביבת Hypervisor של Hyper-V, נוספה תמיכה עבור מערכות אורח המוגנות על ידי טכנולוגיית AMD SEV-SNP (Secure Nested Paging) ו-Intel TDX (Trusted Domain Extensions).
- בעת בניית הליבה במצב "W=1", אזהרות המהדר "-Wformat-overflow", "-Wformat-truncation", "-Wstringop-overflow" ו-"-Wrestrict" מופעלות כברירת מחדל. האזהרה "-Wenum-conversion" מופעלת עבור כל הבניות.
- תת מערכת רשת
- יישום משפחת הכתובות AF_XDP (eXpress Data Path) הורחב כדי לתמוך במנות המאוחסנות במספר מאגרים (לדוגמה, מאגר אחד עשוי להכיל את כותרת החבילה, ואחר עשוי להכיל את הנתונים, או ששרשרת של מאגרים מרובים עשויה להכיל מסגרות Ethernet גדולות). תוכניות המשתמשות בשקעי AF_XDP יכולות כעת לקבל ולשדר מנות ממספר מאגרים בו זמנית.
- תת-מערכת BPF עודכנה לתמיכה באיחוי מנות IPv4 ו-IPv6, כמו גם ליכולת לסנן מנות מקוטעות.
- BPF הוסיפה פרוטוקול חדש, update_socket_protocol, המאפשר לתוכניות BPF לשנות את הפרוטוקול המבוקש עבור שקעים חדשים. לדוגמה, תוכנית BPF יכולה להחליף TCP באופן שקוף ב-MPTCP (TCP מרובה נתיבים) כדי לייעל את תעבורת היישומים. BPF מוסיפה גם תמיכה בניהול ניתוב מנות על פני זרמי MPTCP שונים.
- מודול ksmbd, המספק יישום שרת קבצים ברמת הליבה המבוסס על פרוטוקול SMB3, הוזנח כיוון שהוא ניסיוני. נוספה תמיכה בשילוב פעולות קריאה (קריאת בקשות מורכבות).
- Оборудование
- מערכת המשנה DRM (מנהל רינדור ישיר) עודכנה כדי להבטיח שמנהל התקן NVK בקוד פתוח יעבוד ביעילות עם יישום Vulkan graphics API עבור כרטיסי מסך של NVIDIA. מנהל התקן Nouveau DRM תוכנן במקור עבור OpenGL, ולכן חסרים לו את הפרימיטיבים הדרושים למנהלי התקנים של Vulkan כדי לעבוד ביעילות, כגון תמיכה באובייקטים מסונכרנים וניהול מרחב כתובות וירטואלי.
- מנהל ההתקן של AMDGPU תומך כעת ב-SDMA 6.1.0, HDP 6.1, SMUIO 14.0, PSP 14.0, IH 6.1 ו-GFX 9.4.3. קוד טעינת הקושחה של ה-PSP (מעבד אבטחת פלטפורמה) עובד מחדש. התמיכה בטכנולוגיית הסנכרון האדפטיבית FreeSync הורחבה (נוספה תמיכה ב-Freesync Panel Replay V2).
- מנהל ההתקן של i915 ממשיך לתמוך בשבבי Intel Meteor Lake. שופרה התמיכה בהגנה מפני העתקה באמצעות HDCP (High-bandwidth Digital Content Protection). קוד האינטראקציה עם הצג עובד מחדש.
- האפשרויות להשבתת טעינת המיקרו-קוד בזמן הבנייה - MICROCODE_INTEL ו- MICROCODE_AMD - הוסרו מ- Kconfig. הליבה נבנית כעת תמיד עם קוד טעינת מיקרו-קוד עבור מערכות x86, אך ניתן להשבית את טעינת המיקרו-קוד בפועל על ידי ציון פרמטר הליבה 'dis_ucode_ldr'.
- לתת-מערכת הקול יש כעת את היכולת לשלוט בהתקני קול המחוברים דרך תת-מערכת IIO (קלט/פלט תעשייתי).
- נוספה תמיכה עבור ממשקי האודיו Intel LunarLake, Intel ArrowLake ו-AMD ACP5x, קודקים Cirrus Logic CS42L43, Realtek RT1017 ו-TI TAS2781, ומגברים Cirrus Logic CS35L56 ו-Winic aw88261. נוספה תמיכה עבור AMD Van Gogh ASoC.
- נוסף מנהל התקן של גאדג'ט USB MIDI 2.0, המדמה את ממשק USB MIDI 2.0, המקושר להתקן rawmid של ALSA UMP.
- נוספה תמיכה עבור בקרי Ethernet של Broadcom ASP 2.0 ו- Marvell 88Q2XXX.
- נוספה תמיכה עבור פאנלים מדגם Visionox R66451, TDO TL050HDV35, KD070FHFID015, Inanbo T28CP45TN89 ו-EDT ET028013DMA, בקרי תצוגה מדגם Loongson ובקרי מסך מגע מדגם Azoteq IQS7222D/IQS7210A/7211A.
- נוספה תמיכה עבור ARM SoC Qualcomm SM4450 (Snapdragon 4 Gen 2), TI AM62P5, Intel Agilex5, Qualcomm ipq5018, AN400 (Amlogic T7)
- נוספה תמיכה בלוחות ARM Samsung Galaxy Tab 3 8.0, FriendlyElec NanoPC T6, Amlogic A311D2, Khadas Vim4, Xiaomi SM7125, Facebook Yosemite 4, Orange Pi Zero 3, Radxa ROCK 4SE.
במקביל, קרן התוכנה החופשית של אמריקה הלטינית יצרה גרסה של הגרעין החינמי לחלוטין 6.6 - Linux-libre 6.6-gnu, נוקה מרכיבי קושחה ומנהלי התקנים המכילים רכיבים שאינם חופשיים או מקטעי קוד עם טווח מוגבל. גרסה 6.6 כוללת קוד ניקוי בלובים מעודכן במנהלי התקנים ותת-מערכות שונות, כגון מנהלי התקנים של TI gigabit RU ethernet, MediaTek 792x wifi, Cirrus Logic cs42l43 mfd, cs35l56 HD-audio, ו-aw88261 SoC. שמות בלובים בקבצי dts עבור ארכיטקטורת Aarch64 נוקו. בלובים הוסרו ממנהלי ההתקן החדשים של ivpu, מנהלי התקנים של Bluetooth, מנהלי התקנים של מסך מגע ומקודד/מפענח Qualcomm Venus V4L2.
מקור: OpenNet.ru
