إصدار Linux 5.7 kernel

بعد شهرين من تطوير لينوس تورفالدس المقدمة الافراج عن النواة لينكس شنومكس. من بين أبرز التغييرات: تطبيق جديد لنظام الملفات exFAT، ووحدة باريودب لإنشاء أنفاق UDP، وحماية تعتمد على مصادقة المؤشر لـ ARM64، والقدرة على إرفاق برامج BPF بمعالجات LSM، وتطبيق جديد لـ Curve25519، وتقسيم- كاشف القفل، توافق BPF مع PREEMPT_RT، إزالة الحد الأقصى لحجم السطر المكون من 80 حرفًا في الكود، مع مراعاة مؤشرات درجة حرارة وحدة المعالجة المركزية في جدولة المهام، والقدرة على استخدام clone() لتفرخ العمليات في مجموعة cgroup أخرى، والحماية من الكتابة إلى الذاكرة باستخدام userfaultfd.

الإصدار الجديد قبل 15033 إصلاحًا من 1961 مطورًا،
حجم التصحيح - 39 ميجابايت (أثرت التغييرات على 11590 ملفًا، تمت إضافة 570560 سطرًا من التعليمات البرمجية،
تمت إزالة 297401 سطرًا). حوالي 41٪ من إجمالي ما تم تقديمه في 5.7
ترتبط التغييرات ببرامج تشغيل الأجهزة، حوالي 16٪ من التغييرات لها
الموقف تجاه تحديث التعليمات البرمجية الخاصة ببنيات الأجهزة، 13%
تتعلق بمكدس الشبكة و 4٪ لأنظمة الملفات و 4٪ للداخلية
الأنظمة الفرعية للنواة.

رئيسي الابتكارات:

  • نظام القرص الفرعي ، I / O وأنظمة الملفات
    • تمت إضافة تطبيق برنامج تشغيل exFAT الجديد، تأسست استنادًا إلى قاعدة التعليمات البرمجية "sdfat" (2.x) الحالية التي طورتها شركة Samsung لهواتفها الذكية التي تعمل بنظام Android. كان برنامج التشغيل الذي تمت إضافته مسبقًا إلى kernel يعتمد على كود Samsung القديم (الإصدار 1.2.9) وكان متأخرًا بحوالي 10% عن برنامج التشغيل الجديد من حيث الأداء. دعونا نتذكر أن إضافة دعم exFAT إلى النواة أصبح ممكنًا بعد Microsoft опубликовала المواصفات العامة وإتاحة براءات اختراع exFAT للاستخدام بدون حقوق ملكية على Linux.
    • تطبق Btrfs أمر ioctl() جديد - BTRFS_IOC_SNAP_DESTROY_V2، والذي يسمح لك بحذف قسم فرعي بواسطة معرفه. يتم توفير الدعم الكامل لاستنساخ النطاقات المضمنة. تم توسيع عدد نقاط الإلغاء لعمليات إعادة التوزيع، مما أدى إلى تقليل فترات الانتظار الطويلة عند تنفيذ أمر "إلغاء الرصيد". تم تسريع تحديد الروابط الخلفية إلى نطاقات (على سبيل المثال، انخفض وقت تنفيذ البرنامج النصي للاختبار من ساعة إلى عدة دقائق). تمت إضافة القدرة على إرفاق نطاقات الملف بكل inode للشجرة. تمت إعادة تصميم نظام الحظر المستخدم عند الكتابة إلى الأقسام الفرعية وعند استبعاد NOCOW. تحسين كفاءة تنفيذ fsync للنطاقات.
    • قام XFS بتحسين فحص البيانات التعريفية وfsck للأقسام النشطة. تم اقتراح مكتبة لإعادة بناء هياكل btree، والتي سيتم استخدامها في المستقبل لإعادة صياغة xfs_repair وتنفيذ إمكانية الاسترداد دون إلغاء تثبيت القسم.
    • تمت إضافة الدعم التجريبي لوضع قسم مبادلة في مخازن SMB3 إلى CIFS. تم تنفيذ امتدادات POSIX لـ readdir، المحددة في مواصفات SMB3.1.1. تحسين أداء الكتابة لصفحات بحجم 64 كيلو بايت عند تمكين الوضع الصارم = التخزين المؤقت واستخدام إصدارات البروتوكول 2.1+.
    • تم نقل FS EXT4 من bmap وiopoll إلى استخدام iomap.
    • يوفر F2FS دعمًا اختياريًا لضغط البيانات باستخدام خوارزمية zstd. بشكل افتراضي، يتم استخدام خوارزمية LZ4 للضغط. تمت إضافة دعم للأمر "chattr -c الالتزام". يتم توفير عرض وقت التركيب. تمت إضافة ioctl F2FS_IOC_GET_COMPRESS_BLOCKS للحصول على معلومات حول عدد الكتل المضغوطة. تمت إضافة إخراج بيانات الضغط عبر statx.
    • أضاف نظام ملفات Ceph القدرة على تنفيذ عمليات إنشاء الملفات وحذفها (إلغاء الارتباط) محليًا دون انتظار استجابة من الخادم (العمل في الوضع غير المتزامن). التغيير، على سبيل المثال، يمكن أن يحسن الأداء بشكل ملحوظ عند تشغيل الأداة المساعدة rsync.
    • تمت إضافة القدرة على استخدام virtiofs كنظام ملفات عالي المستوى إلى OVERLAYFS.
    • إعادة كتابتها كود اجتياز المسار في VFS، تمت إعادة صياغة كود تحليل الارتباط الرمزي، وتم توحيد اجتياز نقطة التحميل.
    • في النظام الفرعي SCSI للمستخدمين المحرومين سمح تنفيذ أوامر ZBC.
    • في dm_writecache مُنفّذ القدرة على مسح ذاكرة التخزين المؤقت تدريجيًا استنادًا إلى المعلمة max_age، التي تحدد الحد الأقصى لعمر الكتلة.
    • في dm_integrity مضاف دعم عملية "التجاهل".
    • في null_blk مضاف دعم استبدال الأخطاء لمحاكاة حالات الفشل أثناء الاختبار.
    • أضيفت بواسطة القدرة على إرسال إشعارات udev حول تغييرات حجم الجهاز المحظور.
  • النظام الفرعي للشبكة
    • تم تضمين Netfilter التغييرات، تسريع معالجة قوائم المطابقة الكبيرة (مجموعات nftables) بشكل كبير، والتي تتطلب التحقق من مجموعة من الشبكات الفرعية ومنافذ الشبكة والبروتوكول وعناوين MAC.
      التحسينات صنع في وحدة nft_set_pipapo (سياسات PIle PAcket)، التي تحل مشكلة مطابقة محتويات الحزمة مع نطاقات حالة الحقل التعسفية المستخدمة في قواعد التصفية، مثل IP ونطاقات منافذ الشبكة (nft_set_rbtree وnft_set_hash يعالجان مطابقة الفاصل الزمني والانعكاس المباشر للقيم ). أظهر إصدار pipapo الموجه باستخدام تعليمات AVX256 2 بت على نظام مزود بمعالج AMD Epyc 7402 زيادة في الأداء بنسبة 420% عند تحليل 30 ألف سجل بما في ذلك مجموعات بروتوكولات المنافذ. وكانت الزيادة عند مقارنة مجموعة من الشبكة الفرعية ورقم المنفذ عند تحليل 1000 سجل 87% لـ IPv4 و128% لـ IPv6.

    • وأضاف وحدة bareudp، التي تسمح لك بتغليف بروتوكولات L3 المختلفة، مثل MPLS وIP وNSH، في نفق UDP.
    • استمر تكامل مكونات MPTCP (MultiPath TCP)، وهو امتداد لبروتوكول TCP لتنظيم تشغيل اتصال TCP مع تسليم الحزم في وقت واحد عبر عدة مسارات عبر واجهات شبكة مختلفة مرتبطة بعناوين IP مختلفة.
    • أضيفت بواسطة دعم آليات تسريع الأجهزة لتغليف إطارات Ethernet في 802.11 (Wi-Fi).
    • عند نقل جهاز من مساحة اسم شبكة إلى أخرى، يتم ضبط حقوق الوصول وملكية الملفات المقابلة في sysfs.
    • تمت إضافة القدرة على استخدام علامة SO_BINDTODEVICE للمستخدمين غير الجذر.
    • تم قبول الجزء الثالث من التصحيحات، وهو تحويل مجموعة أدوات ethtool من ioctl() إلى استخدام واجهة netlink. تسهل الواجهة الجديدة إضافة الملحقات، وتحسن معالجة الأخطاء، وتسمح بإرسال الإشعارات عندما تتغير الحالة، وتبسط التفاعل بين النواة ومساحة المستخدم، وتقلل من عدد القوائم المسماة التي تحتاج إلى المزامنة.
    • تمت إضافة القدرة على استخدام مسرعات الأجهزة الخاصة لإجراء عمليات تتبع الاتصال.
    • في نتفلتر مضاف خطاف لتوصيل مصنفات الحزم الصادرة (الخروج)، والذي يكمل الخطاف الموجود مسبقًا للحزم الواردة (الدخول).
  • المحاكاة الافتراضية والأمن
    • تمت إضافة تنفيذ الأجهزة لمصادقة المؤشر (مصادقة المؤشر) ، والذي يستخدم تعليمات وحدة المعالجة المركزية ARM64 المتخصصة للحماية من الهجمات باستخدام تقنيات البرمجة الموجهة للعودة (ROP)، حيث لا يحاول المهاجم وضع التعليمات البرمجية الخاصة به في الذاكرة، ولكنه يعمل على أجزاء من تعليمات الآلة المتوفرة بالفعل في المكتبات المحملة، وينتهي مع تعليمات عودة التحكم. يعود الأمان إلى استخدام التوقيعات الرقمية للتحقق من عناوين الإرجاع على مستوى النواة. يتم تخزين التوقيع في الأجزاء العلوية غير المستخدمة من المؤشر نفسه. على عكس تطبيقات البرامج، يتم إنشاء التوقيعات الرقمية والتحقق منها باستخدام تعليمات وحدة المعالجة المركزية الخاصة.
    • أضيفت بواسطة القدرة على حماية منطقة الذاكرة من الكتابة باستخدام استدعاء النظام userfaultfd()، المصمم لمعالجة أخطاء الصفحات (الوصول إلى صفحات الذاكرة غير المخصصة) في مساحة المستخدم. تتمثل الفكرة في استخدام userfaultfd() لاكتشاف انتهاكات الوصول إلى الصفحات التي تم وضع علامة عليها كمحمية ضد الكتابة ولاستدعاء معالج يمكنه الاستجابة لمحاولات الكتابة هذه (على سبيل المثال، للتعامل مع التغييرات أثناء إنشاء لقطات مباشرة للعمليات الجارية، الحالة التقاط عند تفريغ عمليات تفريغ الذاكرة على القرص، وتنفيذ الذاكرة المشتركة، وتتبع التغييرات في الذاكرة). وظائف مقابل باستخدام mprotect() بالاشتراك مع معالج الإشارة SIGSEGV، ولكنه يعمل بشكل أسرع بشكل ملحوظ.
    • لقد قام SELinux بإهمال المعلمة "checkreqprot"، التي تسمح لك بتعطيل عمليات التحقق من حماية الذاكرة عند معالجة القواعد (مما يسمح باستخدام مناطق الذاكرة القابلة للتنفيذ، بغض النظر عن القواعد المحددة في القواعد). يُسمح لارتباطات Kernfs بأن ترث سياق الأدلة الأصلية الخاصة بها.
    • هيكل متضمن وحدة KRSI، والذي يسمح لك بإرفاق برامج BPF بأي خطافات LSM في النواة. يتيح لك التغيير إنشاء وحدات LSM (وحدة أمان Linux) في شكل برامج BPF لحل مشكلات التدقيق والتحكم الإلزامي في الوصول.
    • تم تنفيذها يعمل على تحسين أداء /dev/random عن طريق تجميع قيم CRNG بدلاً من استدعاء تعليمات RNG بشكل فردي. تحسين أداء getrandom و/dev/random على أنظمة ARM64 التي توفر تعليمات RNG.
    • تنفيذ المنحنى الإهليلجي Curve25519 استبدال للخيار من المكتبة HACL، لأي منهم معطى دليل رياضي للتحقق من الموثوقية الرسمية.
    • وأضاف آلية الإبلاغ عن صفحات الذاكرة الفارغة. باستخدام هذه الآلية، يمكن لأنظمة الضيف نقل معلومات حول الصفحات التي لم تعد مستخدمة إلى النظام المضيف، ويمكن للمضيف استعادة بيانات الصفحة.
    • في فيفيو/PCI مضاف دعم SR-IOV (المحاكاة الافتراضية للإدخال/الإخراج أحادية الجذر).
  • خدمات الذاكرة والنظام
    • من 80 إلى 100 حرف زيادة تحديد الحد الأقصى لطول السطر في النصوص المصدر. في الوقت نفسه، لا يزال يُنصح المطورون بالبقاء ضمن 80 حرفًا لكل سطر، لكن هذا لم يعد حدًا صارمًا. بالإضافة إلى ذلك، سيؤدي تجاوز الحد الأقصى لحجم الخط الآن إلى إصدار تحذير فقط في حالة تشغيل checkpatch باستخدام الخيار '--strict'. سيجعل التغيير من الممكن عدم تشتيت انتباه المطورين تلاعب مع المسافات وتشعر بمزيد من الحرية عند محاذاة التعليمات البرمجية، وكذلك سيمنع كسر الخط المفرط، مزعجة فهم الكود والبحث.
    • أضيفت بواسطة دعم وضع التمهيد المختلط EFI، والذي يسمح لك بتحميل نواة 64 بت من البرامج الثابتة 32 بت التي تعمل على وحدة المعالجة المركزية 64 بت دون استخدام أداة تحميل تشغيل متخصصة.
    • متضمن نظام لتحديد وتصحيح الأقفال المنقسمة ("قفل الانقسام")، والذي يحدث عند الوصول إلى البيانات غير المحاذاة في الذاكرة نظرًا لأنه عند تنفيذ تعليمات ذرية، تتقاطع البيانات مع خطين من ذاكرة التخزين المؤقت لوحدة المعالجة المركزية. يؤدي هذا الحظر إلى أداء كبير (1000 دورة أبطأ من العملية الذرية على البيانات التي تقع في سطر ذاكرة تخزين مؤقت واحد). اعتمادًا على معلمة التمهيد "split_lock_detect"، يمكن للنواة اكتشاف مثل هذه الأقفال بسرعة وإصدار تحذيرات أو إرسال إشارة SIGBUS إلى التطبيق الذي يسبب القفل.
    • يوفر برنامج جدولة المهام تتبع أجهزة استشعار درجة الحرارة (الضغط الحراري) ويتم تنفيذها مع مراعاة ارتفاع درجة الحرارة عند وضع المهام. باستخدام الإحصائيات المقدمة، يمكن للمنظم الحراري ضبط الحد الأقصى لتردد وحدة المعالجة المركزية عند ارتفاع درجة حرارته، ويأخذ برنامج جدولة المهام الآن في الاعتبار انخفاض طاقة الحوسبة بسبب هذا الانخفاض في التردد عند جدولة المهام للتشغيل (في السابق، استجاب برنامج الجدولة للتغييرات بشكل متكرر مع تأخير معين، لبعض الوقت اتخاذ القرارات بناءً على افتراضات مضخمة حول موارد الحوسبة المتاحة).
    • يتضمن برنامج جدولة المهام المؤشرات الثابتة تتبع الحمل، مما يسمح لك بتقدير الحمل بشكل صحيح، بغض النظر عن تردد تشغيل وحدة المعالجة المركزية الحالي. يتيح لك التغيير التنبؤ بشكل أكثر دقة بسلوك المهام في ظل ظروف التغيرات الديناميكية في الجهد وتردد وحدة المعالجة المركزية. على سبيل المثال، المهمة التي تستهلك ثلث موارد وحدة المعالجة المركزية بسرعة 1 ميجاهرتز ستستهلك ثلثي الموارد عندما ينخفض ​​التردد إلى 3 ميجاهرتز، مما أدى في السابق إلى إنشاء افتراض خاطئ بأنها كانت تعمل بكامل طاقتها (أي ظهرت المهام أكبر إلى المجدول فقط عن طريق تقليل التردد، مما أدى إلى اتخاذ قرارات غير صحيحة في محافظ schedutil cpufreq).
    • تم تحويل برنامج تشغيل Intel P-state، المسؤول عن تحديد أوضاع الأداء، للاستخدام جدولة.
    • تم تنفيذ القدرة على استخدام النظام الفرعي BPF عند تشغيل النواة في الوقت الفعلي (PREEMPT_RT). في السابق، عندما تم تمكين PREEMPT_RT، كان يلزم تعطيل BPF.
    • تمت إضافة نوع جديد من برامج BPF - BPF_MODIFY_RETURN، والذي يمكن ربطه بوظيفة في النواة وتغيير القيمة التي ترجعها هذه الوظيفة.
    • أضيفت بواسطة فرصة استخدام استدعاء النظام clone3() لإنشاء عملية في مجموعة c مختلفة عن مجموعة cgroup الأصلية، مما يسمح للعملية الأصلية بتطبيق القيود وتمكين المحاسبة فورًا بعد إنشاء عملية أو سلسلة رسائل جديدة. على سبيل المثال، يمكن لمدير الخدمة تخصيص خدمات جديدة مباشرة لمجموعات التحكم المنفصلة، ​​وسيتم إيقاف العمليات الجديدة على الفور عند وضعها في مجموعات التحكم "المجمدة".
    • في كبيلد مضاف دعم متغير البيئة "LLVM=1" للتبديل إلى مجموعة أدوات Clang/LLVM عند بناء النواة. تم رفع متطلبات إصدار binutils (2.23).
    • تمت إضافة قسم /sys/kernel/debug/kunit/ إلى تصحيحات الأخطاء مع نتائج اختبارات kunit.
    • تمت إضافة معلمة تمهيد kernelpm_debug_messages (مماثلة لـ /sys/power/pm_debug_messages)، والتي تتيح إخراج معلومات تصحيح الأخطاء حول تشغيل نظام إدارة الطاقة (مفيدة عند تصحيح الأخطاء في وضع الإسبات ووضع الاستعداد).
    • إلى واجهة الإدخال/الإخراج غير المتزامنة io_uring دعم إضافي لصق او جمع() и اختيار المخزن المؤقت الذري.
    • تحسين ملف تعريف المجموعة باستخدام مجموعة أدوات الأداء. في السابق، كان بإمكان الأداء فقط تشكيل المهام في مجموعة تحكم معينة ولم يتمكن من معرفة مجموعة التحكم التي تنتمي إليها العينة الحالية. يتلقى perf الآن معلومات cgroup لكل عينة، مما يسمح لك بتكوين ملف تعريف لأكثر من مجموعة cgroup وتطبيق الفرز حسب
      cgroup في التقارير.

    • أضاف cgroupfs، وهو FS زائف لإدارة مجموعات cgroup، دعمًا للسمات الموسعة (xattrs)، والتي من خلالها، على سبيل المثال، يمكنك ترك معلومات إضافية للمعالجات في مساحة المستخدم.
    • في وحدة تحكم الذاكرة Cgroup مضافودعم الحماية العودية لقيمة "memory.low"، التي تنظم الحد الأدنى من ذاكرة الوصول العشوائي المتوفرة لأعضاء المجموعة. عند تركيب تسلسل هرمي لمجموعة cgroup باستخدام خيار "memory_recursiveprot"، سيتم توزيع قيمة "memory.low" التي تم تعيينها للعقد السفلية تلقائيًا على جميع العقد الفرعية.
    • وأضاف إطار عمل Uacce (إطار عمل التسريع الموحد/مساحة المستخدم الوصول) لمشاركة العناوين الافتراضية (SVA، العنونة الافتراضية المشتركة) بين وحدة المعالجة المركزية والأجهزة الطرفية، مما يسمح لمسرعات الأجهزة بالوصول إلى هياكل البيانات في وحدة المعالجة المركزية الرئيسية.
  • بنيات الأجهزة
    • بالنسبة لبنية ARM، يتم تنفيذ القدرة على جلب الذاكرة بسرعة.
    • بالنسبة لبنية RISC-V، تمت إضافة دعم التوصيل السريع وإزالة وحدات المعالجة المركزية (CPU hotplug). بالنسبة لـ RISC-V 32 بت، يتم تنفيذ eBPF JIT.
    • تمت إزالة القدرة على استخدام أنظمة ARM 32 بت لتشغيل بيئات ضيف KVM.
    • تمت إزالة تطبيق NUMA "الوهمي" لبنية s390، والذي لم يتم العثور على حالات استخدام له لتحقيق تحسينات في الأداء.
    • بالنسبة إلى ARM64، تم إضافة دعم لامتداد AMU (وحدة مراقبة النشاط)، المحدد في ARMv8.4 وتوفير عدادات الأداء المستخدمة لحساب عوامل تصحيح قياس التردد في برنامج جدولة المهام.
  • معدات
    • أضيفت بواسطة دعم أجهزة vDPA التي تستخدم قناة تبادل البيانات التي تتوافق مع مواصفات Virtio. يمكن أن تكون أجهزة vDPA إما أجهزة متصلة فعليًا أو أجهزة افتراضية تمت محاكاتها بالبرامج.
    • في النظام الفرعي GPIO ظهر أمر ioctl() جديد لمراقبة التغييرات، مما يسمح لك بإبلاغ العملية بالتغييرات في حالة أي خط GPIO. كمثال لاستخدام الأمر الجديد عرضت فائدة مراقبة gpio.
    • في برنامج تشغيل i915 DRM لبطاقات فيديو Intel يتم تضمين الدعم الافتراضي لشرائح Tigerlake ("Gen12") وإضافة الدعم الأولي للتحكم في الإضاءة الخلفية OLED. تحسين الدعم لرقائق Ice Lake وElkhart Lake وBaytrail وHaswell.
    • في برنامج التشغيل amdgpu مضاف القدرة على تحميل البرامج الثابتة في شريحة USBC لـ ASIC. تحسين الدعم لشرائح AMD Ryzen 4000 "Renoir". يوجد الآن دعم للتحكم في لوحات OLED. عرض حالة البرامج الثابتة المقدمة في debugfs.
    • تمت إضافة القدرة على استخدام OpenGL 4 في أنظمة الضيف إلى برنامج تشغيل vmwgfx DRM لأنظمة المحاكاة الافتراضية VMware (كان OpenGL 3.3 مدعومًا سابقًا).
    • تمت إضافة برنامج تشغيل DRM جديد لنظام عرض منصة TI Keystone.
    • برامج التشغيل المضافة لألواح LCD: Feixin K101 IM2BA02، Samsung s6e88a0-ams452ef01، Novatek NT35510، Elida KD35T133، EDT، NewEast Optoelectronics WJFH116008A، Rocktech RK101II01D-CT، Frida FRD350H54004.
    • إلى نظام إدارة الطاقة مضاف دعم منصة Intel Jasper Lake (JSL) المستندة إلى Atom.
    • تمت إضافة دعم لأجهزة الكمبيوتر المحمول Pinebook Pro المستندة إلى Rockchip RK3399 والكمبيوتر اللوحي Pine64 PineTab والهاتف الذكي PinePhone على أساس Allwinner A64.
    • تمت إضافة دعم لبرامج ترميز الصوت والرقائق الجديدة:
      Amlogic AIU، Amlogic T9015، Texas Instruments TLV320ADCX140، Realtek RT5682، ALC245، Broadcom BCM63XX I2S، Maxim MAX98360A، Presonus Studio 1810c، MOTU MicroBook IIc.

    • دعم إضافي للوحات ومنصات ARM Qualcomm Snapdragon 865 (SM8250)، IPQ6018، NXP i.MX8M Plus، Kontron “sl28”، 11 i.MX6 TechNexion Pico، ثلاثة خيارات Toradex Colibri جديدة، Samsung S7710 Galaxy Xcover 2 استنادًا إلى ST -Ericsson u8500، DH Electronics DHCOM SoM وPDK2، Renesas M3ULCB، Hoperun HiHope، Linutronix Testbox v2، PocketBook Touch Lux 3.

المصدر: opennet.ru

إضافة تعليق