מהדורת ליבת לינוקס 5.9

לאחר חודשיים של פיתוח, לינוס טורוואלדס הגישו שחרור ליבה לינוקס 5.9. בין השינויים הבולטים ביותר: הגבלת ייבוא ​​סמלים ממודולים קנייניים למודולי GPL, זירוז פעולות החלפת הקשר באמצעות הוראת המעבד FSGSBASE, תמיכה בדחיסת תמונת ליבה באמצעות Zstd, עיבוד מחדש של תעדוף השרשורים בקרנל, תמיכה ב-PRP (Parallel Redundancy Protocol), תזמון מודע לרוחב פס במתזמן המועדים, אריזה מונעת של דפי זיכרון, דגל יכולת CAP_CHECKPOINT_RESTOR, קריאת מערכת close_range(), שיפורי ביצועים dm-crypt, הסרת קוד לאורחי Xen PV 32-bit, זיכרון לוח חדש מנגנון ניהול, אפשרות "הצלה" ב-Btrfs, תמיכה בהצפנה מוטבעת ב-ext4 ו-F2FS.

הגרסה החדשה כוללת 16074 תיקונים ממפתחים משנת 2011,
גודל תיקון - 62 מגה-בייט (השינויים השפיעו על 14548 קבצים, נוספו 782155 שורות קוד, 314792 שורות נמחקו). כ-45% מכלל הוצגו ב-5.9
שינויים קשורים למנהלי התקנים, בערך 15% מהשינויים
גישה לעדכון קוד ספציפי לארכיטקטורות חומרה, 13%
קשור לערימת הרשת, 3% למערכות קבצים ו-3% למערכת הפנימית
תת-מערכות ליבה.

העיקרי חידושים:

  • שירותי זיכרון ומערכת
    • הידק הגנה מפני שימוש בשכבות GPL לקישור מנהלי התקנים קנייניים עם רכיבי ליבה המיוצאים רק עבור מודולים תחת רישיון GPL. הדגל TAINT_PROPRIETARY_MODULE עובר כעת בירושה בכל המודולים שמייבאים סמלים ממודולים עם דגל זה. אם מודול GPL ינסה לייבא סמלים ממודול שאינו GPL, מודול ה-GPL הזה יירש את התווית TAINT_PROPRIETARY_MODULE ולא יוכל לגשת לרכיבי ליבה הזמינים רק למודולים בעלי רישיון GPL, גם אם המודול יובא בעבר סמלים מ- הקטגוריה "gplonly". הנעילה ההפוכה (ייצוא רק EXPORT_SYMBOL_GPL במודולים שייבאו את EXPORT_SYMBOL_GPL), שעלולה לשבור את עבודתם של מנהלי התקנים קנייניים, אינה מיושמת (רק דגל המודול הקנייני עובר בירושה, אך לא ה-GPL bindings).
    • נוסף תמיכה במנוע kcompactd עבור אריזה מראש של דפי זיכרון ברקע כדי להגדיל את מספר דפי הזיכרון הגדולים הזמינים לקרנל. על פי הערכות ראשוניות, אריזת רקע, במחיר של תקורה מינימלית, יכולה לצמצם עיכובים בהקצאת דפי זיכרון גדולים (עמוד ענק) פי 70-80 בהשוואה למנגנון האריזה שהיה בשימוש בעבר, שהופעל בעת הצורך (על פי דרישה). ). כדי להגדיר את גבולות הפיצול החיצוני ש-kcompactd תספק, נוספה sysctl vm.compaction_proactiveness.
    • נוסף תמיכה בדחיסת תמונת ליבה באמצעות אלגוריתם זסטנדרד (zstd).
    • תמיכה בהוראות מעבד יושמה עבור מערכות x86 FSGSBASE, המאפשר לך לקרוא ולשנות את התוכן של אוגרי FS/GS ממרחב המשתמש. בקרנל, FSGSBASE משמש להאצת פעולות החלפת הקשר על ידי ביטול פעולות כתיבה מיותרות של MSR עבור GSBASE, ובמרחב המשתמש היא נמנעת קריאות מערכת מיותרות לשינוי FS/GS.
    • נוסף הפרמטר "allow_writes" מאפשר לך לאסור שינויים באוגרי MSR של המעבד ממרחב המשתמש ולהגביל את הגישה לתוכן של אוגרים אלה כדי לקרוא פעולות, שכן שינוי ה-MSR עלול להוביל לבעיות. כברירת מחדל, הכתיבה עדיין לא מושבתת, ושינויים ב-MSR באים לידי ביטוי ביומן, אך בעתיד מתוכנן להחליף את ברירת המחדל למצב קריאה בלבד.
    • לממשק ה-I/O האסינכרוני io_uring נוספה תמיכה מלאה עבור פעולות קריאה אסינכרוניות מאגרות שאינן דורשות שרשורי ליבה. תמיכה בהקלטה צפויה במהדורה עתידית.
    • במועד האחרון של מתזמן I/O מוטמע תכנון המבוסס על יכולת, מְאַפשֶׁר לקבל החלטות נכונות על מערכות אסימטריות כגון מערכות מבוססות ARM DynamIQ ו-big.LITTLE, המשלבים ליבות CPU חזקות ופחות יעילות באנרגיה בשבב אחד. בפרט, המצב החדש מאפשר לך להימנע מאי התאמה בתזמון כאשר לליבת מעבד איטית אין את המשאבים המתאימים להשלמת משימה בזמן.
    • מודל צריכת האנרגיה בקרנל (Energy Model framework) הוא כעת מתאר את לא רק התנהגות צריכת החשמל של המעבד, אלא גם מכסה התקנים היקפיים.
    • קריאת המערכת close_range() יושמה כדי לאפשר לתהליך לסגור מגוון שלם של מתארי קבצים פתוחים בבת אחת.
    • מהטמעת קונסולת הטקסט ומנהל ההתקן של fbcon הקוד הוסר, המספק את היכולת לגלול טקסט לאחור באופן פרוגרמטי (CONFIG_VGACON_SOFT_SCROLLBACK) ביותר מכמות זיכרון הווידאו במצב VGA.
    • עוצב מחדש אלגוריתם להקצאת עדיפויות לשרשורים בתוך הקרנל. האפשרות החדשה מספקת עקביות טובה יותר בכל תתי מערכות הליבה בעת הקצאת עדיפויות למשימות בזמן אמת.
    • נוסף sysctl sched_uclamp_util_min_rt_default לשלוט בהגדרות חיזוק ה-CPU עבור משימות בזמן אמת (לדוגמה, אתה יכול לשנות את ההתנהגות של משימות בזמן אמת בזמן אמת כדי לחסוך בחשמל לאחר מעבר לסוללה או במערכות ניידות).
    • נעשו הכנות להטמעת תמיכה בטכנולוגיית Transparent Huge Pages במטמון הדפים.
    • מנוע ה-fanotify מיישם דגלים חדשים FAN_REPORT_NAME ו-FAN_REPORT_DIR_FID כדי לדווח על שם אב ומידע FID ייחודי כאשר אירועי יצירה, מחיקה או תנועה מתרחשים עבור פריטי ספרייה ואובייקטים שאינם ספרייה.
    • עבור cgroups מוטמע בקר זיכרון לוח חדש, הבולט בהעברת חשבונאות לוחות מרמת עמוד הזיכרון לרמת אובייקט הקרנל, מה שמאפשר לשתף דפי לוח בקבוצות cgroups שונות, במקום להקצות מטמון לוחות נפרדים לכל cgroup. הגישה המוצעת מאפשרת להגביר את יעילות השימוש ב-slab, להקטין את גודל הזיכרון המשמש ל-slab ב-30-45%, להפחית משמעותית את צריכת הזיכרון הכוללת של הקרנל ולהפחית את פיצול הזיכרון.
    • בתת מערכת הסאונד אלסה и ערימת USB, בהתאם ל אומצה לאחרונה המלצות על שימוש בטרמינולוגיה כוללנית בליבת לינוקס; מונחים לא תקינים מבחינה פוליטית נוקו. הקוד נוקה מהמילים "עבד", "מאסטר", "רשימה שחורה" ו"רשימה לבנה".
  • וירטואליזציה ואבטחה
    • בעת בניית הקרנל באמצעות מהדר Clang הופיע היכולת להגדיר (CONFIG_INIT_STACK_ALL_ZERO) אתחול אוטומטי לאפס של כל המשתנים המאוחסנים בערימה (בעת הבנייה, ציין "-ftrivial-auto-var-init=zero").
    • בתת המערכת של seccomp, בעת שימוש במצב בקרת תהליכים בחלל המשתמש, הוסיף הזדמנות החלפה של מתארי קבצים בתהליך המנוטר כדי לחקות באופן מלא קריאות מערכת המובילות ליצירת מתארי קבצים. הפונקציונליות מבוקשת במערכות מיכל מבודדות ובהטמעות ארגז חול עבור Chrome.
    • עבור הארכיטקטורות xtensa ו-csky, נוספה תמיכה להגבלת קריאות מערכת באמצעות תת-המערכת seccomp. עבור xtensa, תמיכה במנגנון הביקורת מיושמת בנוסף.
    • נוסף דגל יכולת חדש CAP_CHECKPOINT_RESTORE, המאפשר לך לספק גישה ליכולות הקשורות להקפאה ושיחזור של מצב התהליכים ללא העברת הרשאות נוספות.
    • GCC 11 מספק את כל התכונות שאתה צריך
      כלי איתור באגים KCSAN (Kernel Concurrency Sanitizer), שנועד לזהות באופן דינמי תנאי גזע בתוך הקרנל. לפיכך, כעת ניתן להשתמש ב-KCSAN עם גרעינים שנבנו ב-GCC.

    • עבור AMD Zen ודגמי CPU חדשים יותר הוסיף תמיכה בטכנולוגיית P2PDMA, המאפשרת להשתמש ב-DMA להעברת נתונים ישירה בין הזיכרון של שני התקנים המחוברים לאפיק PCI.
    • ל-dm-crypt נוסף מצב המאפשר לצמצם את השהייה על ידי ביצוע עיבוד נתונים קריפטוגרפי ללא שימוש בתורי עבודה. מצב זה נחוץ גם לפעולה נכונה עם אזורי התקני בלוק (מכשירים עם אזורים שחייבים להיכתב ברצף, עדכון כל קבוצת הבלוקים). נעשתה עבודה להגדלת התפוקה והפחתת זמן ההשהיה ב-dm-crypt.
    • הוסר קוד כדי לתמוך באורחים של 32 סיביות הפועלים במצב פר-וירטואליזציה בהפעלת ה-Xen hypervisor. משתמשים במערכות כאלה צריכים לעבור לשימוש בגרעין של 64 סיביות בסביבות אורח או להשתמש במצבי וירטואליזציה מלאים (HVM) או משולבים (PVH) במקום פרוירטואליזציה (PV) כדי להפעיל סביבות.
  • תת-מערכת דיסק, קלט/פלט ומערכות קבצים
    • במערכת הקבצים Btrfs מוטמע אפשרות הרכבה של "הצלה" המאחדת את הגישה לכל אפשרויות השחזור האחרות. התמיכה באפשרויות "alloc_start" ו-"subvolrootid" הוסרה, והאפשרות "inode_cache" הוצאה משימוש. בוצעו אופטימיזציות של ביצועים, במיוחד שהאיצו באופן ניכר את ביצוע פעולות fsync() . נוסף היכולת להשתמש בסוגים חלופיים של סכומי ביקורת שאינם CRC32c.
    • נוסף היכולת להשתמש בהצפנה מוטבעת (Inline Encryption) במערכות קבצים ext4 ו-F2FS, כדי לאפשר את אפשרות ההרכבה "inlinecrypt" מסופקת. מצב הצפנה מוטבע מאפשר לך להשתמש במנגנוני ההצפנה המובנים בבקר הכונן, שמצפין ומפענח קלט/פלט בשקיפות.
    • ב-XFS מְאוּבטָח איפוס inode (שטיפה) במצב אסינכרוני לחלוטין שאינו חוסם תהליכים בעת ביצוע פעולת ניקוי זיכרון. פתרה בעיית מכסה ארוכת שנים שגרמה למעקב שגוי אחר אזהרות מגבלות רכות ואינודיות. הטמעה אחידה של תמיכת DAX עבור ext4 ו-xfs.
    • ב-Ext4 מוטמע טען מראש מפות סיביות של הקצאת בלוק. בשילוב עם הגבלת סריקה של קבוצות לא אתחולות, האופטימיזציה הפחיתה את הזמן הדרוש להרכבת מחיצות גדולות מאוד.
    • ב-F2FS הוסיף ioctl F2FS_IOC_SEC_TRIM_FILE, המאפשר לך להשתמש בפקודות TRIM/discard כדי לאפס פיזית נתונים שצוינו בקובץ, למשל, כדי למחוק מפתחות גישה מבלי להשאיר נתונים שיוריים בכונן.
      גם ב-F2FS הוסיף מצב איסוף אשפה חדש GC_URGENT_LOW, שעובד בצורה אגרסיבית יותר על ידי ביטול כמה בדיקות למצב סרק לפני הפעלת אוסף האשפה.

    • ב-bcache, ה-bucket_size for degrees הוגדל מ-16 ל-32 סיביות כהכנה להפעלת מטמון מכשיר אזורי.
    • היכולת להשתמש בהצפנה מוטבעת המבוססת על הצפנת חומרה מובנית המסופקת על ידי בקרי UFS נוספה לתת-מערכת SCSI (אחסון פלאש אוניברסלי).
    • נוסף פרמטר שורת פקודה הליבה חדש "debugfs", המאפשר לך לשלוט בזמינות של הפסאודו-FS באותו שם.
    • לקוח NFSv4.2 מספק תמיכה בתכונות קובץ מורחבות (xattr).
    • ב-dm-אבק הוסיף ממשק להצגת בבת אחת רשימה של כל הבלוקים השגויים שזוהו בדיסק ("dmsetup message dust1 0 listbadblocks").
    • עבור md/raid5, הפרמטר /sys/block/md1/md/stripe_size נוסף כדי להגדיר את גודל הבלוק STRIPE.
    • עבור התקני אחסון NVMe הוסיף תמיכה בפקודות אזורי כונן (ZNS, NVM Express Zoned Namespace), המאפשרת לחלק את שטח האחסון לאזורים המרכיבים קבוצות של בלוקים לשליטה מלאה יותר על מיקום הנתונים בכונן.
  • תת מערכת רשת
    • ב-Netfilter הוסיף היכולת לדחות מנות בשלב שלפני בדיקת הניתוב (עכשיו ניתן להשתמש בביטוי REJECT לא רק בשרשרת INPUT, FORWARD ו-OUTPUT, אלא גם בשלב PREROUTING עבור icmp ו-tcp).
    • ב-nftables הוסיף היכולת לבקר אירועים הקשורים לשינויי תצורה.
    • ב-nftables ב-netlink API הוסיף תמיכה בשרשראות אנונימיות, ששמה מוקצה באופן דינמי על ידי הקרנל. כאשר אתה מוחק כלל המשויך לשרשרת אנונימית, השרשרת עצמה נמחקת אוטומטית.
    • BPF מוסיף תמיכה באיטרטורים כדי לעבור, לסנן ולשנות אלמנטים של מערכים אסוציאטיביים (מפות) מבלי להעתיק נתונים למרחב המשתמש. ניתן להשתמש באיטרטורים עבור שקעי TCP ו-UDP, המאפשרים לתוכניות BPF לעבור על רשימות של שקעים פתוחים ולחלץ מהם את המידע הדרוש להם.
    • נוסף סוג חדש של תוכנית BPF BPF_PROG_TYPE_SK_LOOKUP, המופעלת כאשר הקרנל מחפש שקע האזנה מתאים לחיבור נכנס. באמצעות תוכנית BPF כמו זו, אתה יכול ליצור מטפלים שמקבלים החלטות לגבי איזה שקע יש לשייך חיבור, מבלי להיות מוגבל על ידי קריאת המערכת bind() . לדוגמה, אתה יכול לשייך שקע בודד לטווח של כתובות או יציאות. בנוסף, נוספה תמיכה בדגל SO_KEEPALIVE ל-bpf_setsockopt() והוטמעה היכולת להתקין מטפלי BPF_CGROUP_INET_SOCK_RELEASE, הנקראים כאשר השקע משוחרר.
    • יושמה תמיכה בפרוטוקול PRP (Parallel Redundancy Protocol), המאפשר מעבר מבוסס Ethernet לערוץ גיבוי, שקוף לאפליקציות, במקרה של כשל ברכיבי רשת כלשהם.
    • מחסנית mac80211 הוסיף תמיכה במשא ומתן בערוץ WPA/WPA2-PSK בעל ארבעה שלבים במצב נקודת גישה.
    • נוספה את היכולת להחליף את מתזמן ה-qdisc (משמעת תורים) לשימוש באלגוריתם ניהול תורי הרשת FQ-PIE (Flow Queue PIE) כברירת מחדל, שמטרתו להפחית את ההשפעה השלילית של אחסון מנות ביניים על ציוד רשת קצה (bufferbloat) ברשתות עם מודמי כבלים.
    • תכונות חדשות נוספו ל-MPTCP (MultiPath TCP), הרחבות של פרוטוקול TCP לארגון פעולת חיבור TCP עם משלוח מנות בו זמנית לאורך מספר מסלולים דרך ממשקי רשת שונים המשויכים לכתובות IP שונות. נוספה תמיכה עבור syn cookie, DATA_FIN, כוונון אוטומטי של חיץ, אבחון שקעים ודגלי REUSEADDR, REUSEPORT ו-V6ONLY ב-setsockopt.
    • עבור טבלאות ניתוב וירטואליות VRF (Virtual Routing and Forwarding), המאפשרות ארגון תפעול של מספר תחומי ניתוב על מערכת אחת, הוטמע המצב ה"קפדני". במצב זה, ניתן לשייך טבלה וירטואלית רק לטבלת ניתוב שאינה בשימוש בטבלאות וירטואליות אחרות.
    • מנהל ההתקן האלחוטי הוא ath11k הוסיף תמיכה בתדר 6GHz ו סריקה ספקטרלית.
  • Оборудование
    • הוסר קוד כדי לתמוך בארכיטקטורת UniCore, שפותח במרכז המיקרו-מעבדים של אוניברסיטת פקין ונכלל בליבת לינוקס ב-2011. ארכיטקטורה זו אינה מתוחזקת מאז 2014 ואין לה תמיכה ב-GCC.
    • תמיכה בארכיטקטורת RISC-V יושמה kcov (ממשק debugfs לניתוח כיסוי קוד ליבה), kmemleak (מערכת זיהוי דליפות זיכרון), הגנת מחסנית, סימני קפיצה ופעולות ללא תקתק (ריבוי משימות ללא תלות באותות טיימר).
    • עבור ארכיטקטורת PowerPC, הוטמעה תמיכה בתורי spinlock, אשר שיפרה משמעותית את הביצועים במצבי עימות נעילה.
    • עבור ארכיטקטורות ARM ו-ARM64, מנגנון ויסות תדר המעבד מופעל כברירת מחדל לוח זמנים (cpufreq governor), אשר משתמש ישירות במידע מתזמן המשימות כדי לקבל החלטה על שינוי התדר ויכול לגשת מיד למנהלי התקנים של cpufreq כדי לשנות במהירות את התדר, תוך התאמה מיידית של פרמטרי הפעולה של המעבד לעומס הנוכחי.
    • מנהל ההתקן i915 DRM עבור כרטיסי מסך של אינטל כולל תמיכה בשבבים המבוססים על מיקרוארכיטקטורה אגם הרקטות והוספה תמיכה ראשונית בכרטיסים דיסקרטיים Intel Xe DG1.
    • מנהל ההתקן של Amdgpu הוסיף תמיכה ראשונית עבור GPUs של AMD Navi 21 (חיל הים פלנדר) ו Navi 22 (סיינה ציקליד). נוספה תמיכה במנועי האצה ופענוח UVD/VCE וידאו עבור ה-GPU של האיים הדרומיים (Radeon HD 7000).
      נוסף מאפיין כדי לסובב את התצוגה ב-90, 180 או 270 מעלות.

      מעניין, מנהל ההתקן עבור AMD GPU זה הדרייבר הגדול ביותר בקרנל - יש לו כ-2.71 מיליון שורות קוד, שהם כ-10% מגודל הליבה הכולל (27.81 מיליון שורות). במקביל, 1.79 מיליון קווים מטופלים על ידי קבצי כותרות שנוצרו אוטומטית עם נתונים עבור אוגרי GPU, וקוד C הוא 366 אלף שורות (לשם השוואה, מנהל ההתקן של Intel i915 כולל 209 אלף שורות, ונובו - 149 אלף).

    • בנהג נובו הוסיף תמיכה בבדיקת תקינות מסגרת למסגרת באמצעות CRC (בדיקות יתירות מחזוריות) במנועי תצוגה של NVIDIA GPU. היישום מבוסס על תיעוד שסופק על ידי NVIDIA.
    • נוספו דרייברים עבור לוחות LCD: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 ו-Xingbangda XBD599.
    • תת-מערכת השמע ALSA תומכת Intel Silent Stream (מצב הפעלה רציף עבור התקני HDMI חיצוניים כדי למנוע עיכוב בעת תחילת השמעה) ו מכשיר חדש לשלוט בתאורה של כפתורי ההפעלה וההשתקה של המיקרופון, וכן הוספת תמיכה בציוד חדש, כולל בקר לונגסון 7A1000.
    • נוספה תמיכה בלוחות, מכשירים ופלטפורמות ARM: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (בשימוש ב-Sony Xperia 10, 10 Plus, XA2 ו-XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, חמישה לוחות חדשים המבוססים על NXP i.MX2, MikroTik RouterBoard 6, Xiaomi Libra, Microsoft Lumia 3011, Sony Xperia Z950, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v5, Renesas RZ/G3H.

במקביל, קרן התוכנה החופשית של אמריקה הלטינית נוצר
אפשרות ליבה חינמית לחלוטין 5.9 - Linux-libere 5.9-gnu, מנוקה מרכיבי קושחה ומנהלי התקנים המכילים רכיבים או קטעי קוד שאינם חופשיים, שהיקפם מוגבל על ידי היצרן. המהדורה החדשה משביתה טעינת בלובים במנהלי התקנים עבור WiFi rtw8821c ו-SoC MediaTek mt8183. קוד ניקוי כתמים מעודכן ב-Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, מלאנוקס mlxsw (Spectrum3), r8169 (rtl8125b-2) ו-x86 מנהלי התקנים ותתי מערכות מסך מגע.

מקור: OpenNet.ru

הוספת תגובה