انتشار هسته لینوکس 5.9

پس از دو ماه توسعه، لینوس توروالدز معرفی شده انتشار هسته لینوکس 5.9. از جمله قابل توجه ترین تغییرات: محدود کردن واردات نمادها از ماژول های اختصاصی به ماژول های GPL، سرعت بخشیدن به عملیات تعویض متن با استفاده از دستورالعمل پردازنده FSGSBASE، پشتیبانی از فشرده سازی تصویر هسته با استفاده از Zstd، بازسازی اولویت بندی رشته ها در هسته، پشتیبانی از PRP. (پروتکل افزونگی موازی)، زمان‌بندی آگاه از پهنای باند در زمان‌بندی مهلت، بسته‌بندی پیشگیرانه صفحات حافظه، پرچم قابلیت CAP_CHECKPOINT_RESTOR، تماس سیستم ()close_range، بهبود عملکرد dm-crypt، حذف کد برای مهمان‌های Xen PV جدید 32 بیتی مکانیزم مدیریت، گزینه “rescue” در 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 به ارث می رسد).
    • اضافه پشتیبانی از موتور kcompactd برای پیش بسته بندی صفحات حافظه در پس زمینه برای افزایش تعداد صفحات حافظه بزرگ موجود در هسته. بر اساس برآوردهای اولیه، بسته‌بندی پس‌زمینه، با هزینه حداقل سربار، می‌تواند تاخیر در تخصیص صفحات حافظه بزرگ (صفحه عظیم) را 70 تا 80 برابر در مقایسه با مکانیسم بسته‌بندی که قبلاً استفاده می‌شد، کاهش دهد، که در صورت نیاز (در صورت نیاز) راه‌اندازی شد. ). برای تنظیم مرزهای تکه تکه شدن خارجی که kcompactd ارائه خواهد کرد، sysctl vm.compaction_proactiveness اضافه شده است.
    • اضافه پشتیبانی از فشرده سازی تصویر هسته با استفاده از الگوریتم استاندارد (zstd).
    • پشتیبانی از دستورالعمل های پردازنده برای سیستم های x86 پیاده سازی شده است FSGSBASE، که به شما امکان می دهد محتویات رجیسترهای FS/GS را از فضای کاربر بخوانید و تغییر دهید. در هسته، از FSGSBASE برای سرعت بخشیدن به عملیات سوئیچینگ متن با حذف عملیات نوشتن غیر ضروری MSR برای GSBASE استفاده می شود و در فضای کاربر از تماس های غیرضروری سیستم برای تغییر FS/GS جلوگیری می کند.
    • اضافه پارامتر "allow_writes" به شما این امکان را می دهد که تغییرات را در رجیسترهای MSR پردازنده از فضای کاربر ممنوع کنید و دسترسی به محتویات این ثبات ها را برای خواندن عملیات محدود کنید، زیرا تغییر MSR می تواند منجر به مشکلات شود. به طور پیش فرض، نوشتن هنوز غیرفعال نشده است و تغییرات MSR در گزارش منعکس می شود، اما در آینده برنامه ریزی شده است که دسترسی پیش فرض را به حالت فقط خواندنی تغییر دهید.
    • به رابط ورودی/خروجی ناهمزمان io_uring پشتیبانی کامل از عملیات خواندن بافر ناهمزمان که به رشته های هسته نیاز ندارند اضافه شده است. انتظار می‌رود که در نسخه‌های آینده پشتیبانی از ضبط انجام شود.
    • در مهلت زمانبندی I/O اجرا شد برنامه ریزی بر اساس ظرفیت اجازه می دهد تصمیم گیری صحیح در مورد سیستم های نامتقارن مانند سیستم های مبتنی بر ARM DynamIQ و big.LITTLE که هسته‌های CPU قدرتمند و کم‌بازده را در یک تراشه ترکیب می‌کنند. به طور خاص، حالت جدید به شما امکان می دهد از عدم تطابق برنامه ریزی زمانی که یک هسته کند CPU منابع مناسب برای انجام یک کار را به موقع ندارد، جلوگیری کنید.
    • مدل مصرف انرژی در هسته (چارچوب مدل انرژی) اکنون است توصیف می کند نه تنها رفتار مصرف انرژی CPU، بلکه دستگاه های جانبی را نیز پوشش می دهد.
    • فراخوانی سیستم ()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 هنگام ایجاد، حذف یا حرکت برای آیتم‌های دایرکتوری و اشیاء غیر دایرکتوری اجرا می‌کند.
    • برای cgroup ها اجرا شد یک کنترلر حافظه اسلب جدید، که برای انتقال حسابداری اسلب از سطح صفحه حافظه به سطح شی هسته قابل توجه است، که امکان اشتراک گذاری صفحات اسلب را در گروه های مختلف به جای تخصیص کش های اسلب جداگانه برای هر cgroup فراهم می کند. رویکرد پیشنهادی افزایش کارایی استفاده از اسلب، کاهش اندازه حافظه مورد استفاده برای اسلب به میزان 30 تا 45 درصد، کاهش قابل توجه مصرف کلی حافظه هسته و کاهش تکه تکه شدن حافظه را ممکن می سازد.
    • در زیر سیستم صدا ALSA и پشته USB، مطابق با اخیرا تصویب شده است توصیه هایی در مورد استفاده از اصطلاحات فراگیر در هسته لینوکس؛ اصطلاحات سیاسی نادرست پاکسازی شدند. کد از کلمات "slave"، "master"، "blacklist" و "Whitelist" پاک شده است.
  • مجازی سازی و امنیت
    • هنگام ساختن هسته با استفاده از کامپایلر Clang ظاهر شد توانایی پیکربندی (CONFIG_INIT_STACK_ALL_ZERO) مقدار دهی اولیه خودکار به صفر از همه متغیرهای ذخیره شده در پشته (هنگام ساختن، "-ftrivial-auto-var-init=zero" را مشخص کنید).
    • در زیر سیستم seccomp، هنگام استفاده از حالت کنترل فرآیند در فضای کاربر، اضافه فرصت جایگزینی توصیفگرهای فایل در فرآیند نظارت شده برای شبیه سازی کامل فراخوانی های سیستمی که منجر به ایجاد توصیفگرهای فایل می شود. این قابلیت در سیستم‌های کانتینر ایزوله و پیاده‌سازی جعبه ایمنی برای Chrome مورد تقاضا است.
    • برای معماری های xtensa و csky، پشتیبانی برای محدود کردن تماس های سیستمی با استفاده از زیرسیستم seccomp اضافه شده است. برای xtensa، پشتیبانی از مکانیسم ممیزی به علاوه اجرا شده است.
    • اضافه پرچم قابلیت جدید CAP_CHECKPOINT_RESTORE، که به شما امکان می دهد بدون انتقال امتیازات اضافی، به قابلیت های مربوط به انجماد و بازیابی وضعیت فرآیندها دسترسی داشته باشید.
    • GCC 11 تمام ویژگی های مورد نیاز را ارائه می دهد
      ابزار اشکال زدایی KCSAN (عفونی کننده همزمانی هسته)، که برای تشخیص پویا شرایط مسابقه در هسته طراحی شده است. بنابراین، KCSAN اکنون می تواند با هسته های ساخته شده در GCC استفاده شود.

    • برای AMD Zen و مدل های CPU جدیدتر اضافه پشتیبانی از فناوری P2PDMA، که به شما امکان می دهد از DMA برای انتقال مستقیم داده بین حافظه دو دستگاه متصل به گذرگاه PCI استفاده کنید.
    • حالتی به dm-crypt اضافه شده است که به شما امکان می دهد با انجام پردازش داده های رمزنگاری بدون استفاده از صف های کاری، تاخیر را کاهش دهید. این حالت همچنین برای عملکرد صحیح با منطقه بندی شده دستگاه های بلوک (دستگاه هایی با مناطقی که باید به صورت متوالی نوشته شوند و کل گروه بلوک ها را به روز می کنند). کارهایی برای افزایش توان عملیاتی و کاهش تأخیر در dm-crypt انجام شده است.
    • کد حذف شده برای پشتیبانی از مهمانان 32 بیتی در حال اجرا در حالت paravirtualization با استفاده از Hypervisor Xen. کاربران چنین سیستم هایی باید به استفاده از هسته های 64 بیتی در محیط های مهمان یا استفاده از حالت های مجازی سازی کامل (HVM) یا ترکیبی (PVH) به جای paravirtualization (PV) برای اجرای محیط ها روی آورند.
  • زیرسیستم دیسک، I/O و سیستم های فایل
    • در سیستم فایل Btrfs اجرا شد یک گزینه "rescue" mount که دسترسی به سایر گزینه های بازیابی را یکپارچه می کند. پشتیبانی از گزینه های "alloc_start" و "subvolrootid" حذف شده است و گزینه "inode_cache" منسوخ شده است. بهینه‌سازی‌های عملکرد انجام شده‌اند، به ویژه سرعت بخشیدن به اجرای عملیات ()fsync. اضافه توانایی استفاده از انواع جایگزین چک‌سام‌های غیر از CRC32c.
    • اضافه امکان استفاده از رمزگذاری درون خطی (Inline Encryption) در سیستم های فایل ext4 و F2FS که برای فعال کردن آن گزینه mount “inlinecrypt” ارائه شده است. حالت رمزگذاری درون خطی به شما امکان می دهد از مکانیسم های رمزگذاری تعبیه شده در کنترلر درایو استفاده کنید، که به طور شفاف ورودی/خروجی را رمزگذاری و رمزگشایی می کند.
    • در XFS امن شده است بازنشانی inode (فلاش) در حالت کاملا ناهمزمان که هنگام انجام عملیات پاکسازی حافظه، فرآیندها را مسدود نمی کند. مشکل طولانی مدت سهمیه را حل کرد که باعث شد هشدارهای محدودیت نرم و ایند به اشتباه ردیابی شوند. اجرای یکپارچه پشتیبانی DAX برای ext4 و xfs.
    • در Ext4 اجرا شد پیش بارگذاری بیت مپ های تخصیص بلوک همراه با محدود کردن اسکن گروه‌های اولیه، بهینه‌سازی زمان لازم برای نصب پارتیشن‌های بسیار بزرگ را کاهش داد.
    • در F2FS اضافه ioctl F2FS_IOC_SEC_TRIM_FILE، که به شما امکان می دهد از دستورات TRIM/discard برای بازنشانی فیزیکی داده های مشخص شده در یک فایل استفاده کنید، به عنوان مثال، کلیدهای دسترسی را بدون باقی ماندن داده های باقیمانده در درایو حذف کنید.
      در F2FS نیز اضافه حالت جدید جمع‌آوری زباله GC_URGENT_LOW، که با حذف برخی بررسی‌ها برای قرار گرفتن در حالت غیرفعال قبل از راه‌اندازی زباله‌گیر، با شدت بیشتری کار می‌کند.

    • در bcache، bucket_size برای وسعت ها از 16 به 32 بیت افزایش یافته است تا برای فعال کردن حافظه پنهان دستگاه منطقه بندی شده آماده شود.
    • قابلیت استفاده از رمزگذاری درون خطی بر اساس رمزگذاری سخت افزاری داخلی ارائه شده توسط کنترلرهای UFS به زیرسیستم SCSI اضافه شده است.حافظه فلش جهانی).
    • یک پارامتر خط فرمان جدید هسته "debugfs" اضافه شده است که به شما امکان می دهد در دسترس بودن شبه FS با همین نام را کنترل کنید.
    • سرویس گیرنده NFSv4.2 از ویژگی های فایل توسعه یافته (xattr) پشتیبانی می کند.
    • در dm-dust اضافه رابط برای نمایش یکباره لیستی از تمام بلوک های بد شناسایی شده روی دیسک ("dmsetup message dust1 0 listbadblocks").
    • برای md/raid5، پارامتر /sys/block/md1/md/stripe_size برای پیکربندی اندازه بلوک STRIPE اضافه شده است.
    • برای دستگاه های ذخیره سازی NVMe اضافه پشتیبانی از دستورات منطقه‌بندی درایو (ZNS، NVM Express Zoned Namespace)، که به شما امکان می‌دهد فضای ذخیره‌سازی را به مناطقی تقسیم کنید که گروه‌هایی از بلوک‌ها را برای کنترل کامل‌تر بر قرار دادن داده‌ها در درایو تشکیل می‌دهند.
  • زیر سیستم شبکه
    • در نت فیلتر اضافه توانایی رد بسته ها در مرحله قبل از بررسی مسیریابی (از عبارت REJECT اکنون می توان نه تنها در زنجیره های INPUT، FORWARD و OUTPUT، بلکه در مرحله PREROUTING برای icmp و tcp نیز استفاده کرد).
    • در nftables اضافه توانایی ممیزی رویدادهای مربوط به تغییرات پیکربندی.
    • در nftable ها در netlink API اضافه پشتیبانی از زنجیره های ناشناس که نام آنها به صورت پویا توسط هسته اختصاص داده می شود. هنگامی که یک قانون مرتبط با یک زنجیره ناشناس را حذف می کنید، خود زنجیره به طور خودکار حذف می شود.
    • BPF برای عبور، فیلتر کردن و اصلاح عناصر آرایه‌های انجمنی (نقشه‌ها) بدون کپی کردن داده‌ها در فضای کاربر، از تکرارکننده‌ها پشتیبانی می‌کند. تکرارکننده ها را می توان برای سوکت های TCP و UDP استفاده کرد که به برنامه های BPF اجازه می دهد روی لیست سوکت های باز تکرار کنند و اطلاعات مورد نیاز خود را از آنها استخراج کنند.
    • نوع جدیدی از برنامه BPF BPF_PROG_TYPE_SK_LOOKUP اضافه شده است، که زمانی راه اندازی می شود که هسته به دنبال سوکت شنیداری مناسب برای اتصال ورودی می گردد. با استفاده از یک برنامه BPF مانند این، می‌توانید کنترل‌کننده‌هایی ایجاد کنید که تصمیم می‌گیرند یک اتصال با کدام سوکت مرتبط باشد، بدون اینکه توسط فراخوانی سیستم ()محدود شود. به عنوان مثال، می توانید یک سوکت را با طیف وسیعی از آدرس ها یا پورت ها مرتبط کنید. علاوه بر این، پشتیبانی از پرچم SO_KEEPALIVE به bpf_setsockopt() اضافه شده است و قابلیت نصب هندلرهای BPF_CGROUP_INET_SOCK_RELEASE که هنگام آزاد شدن سوکت فراخوانی می شوند، پیاده سازی شده است.
    • پشتیبانی پروتکل اجرا شد PRP (پروتکل افزونگی موازی)، که امکان سوئیچینگ مبتنی بر اترنت را به یک کانال پشتیبان، شفاف برای برنامه‌ها، در صورت خرابی هر یک از اجزای شبکه فراهم می‌کند.
    • mac80211 را پشته کنید اضافه پشتیبانی از مذاکره چهار مرحله ای کانال WPA/WPA2-PSK در حالت نقطه دسترسی.
    • قابلیت تغییر زمان‌بندی qdisc (رشته صف) برای استفاده از الگوریتم مدیریت صف شبکه FQ-PIE (Flow Queue PIE) به‌طور پیش‌فرض، با هدف کاهش تأثیر منفی بافر بسته‌های میانی بر تجهیزات شبکه لبه (bufferbloat) در شبکه‌های با مودم های کابلی
    • ویژگی‌های جدیدی به MPTCP (MultiPath TCP) اضافه شده است، پسوند پروتکل TCP برای سازماندهی عملیات اتصال TCP با تحویل بسته‌ها به طور همزمان در طول چندین مسیر از طریق رابط‌های شبکه مختلف مرتبط با آدرس‌های IP مختلف. پشتیبانی از کوکی syn، DATA_FIN، تنظیم خودکار بافر، تشخیص سوکت و پرچم‌های REUSEADDR، REUSEPORT و V6ONLY در setsockopt اضافه شده است.
    • برای جداول مسیریابی مجازی VRF (Virtual Routing and Forwarding) که امکان سازماندهی عملیات چندین دامنه مسیریابی را در یک سیستم فراهم می کند، حالت "سخت" پیاده سازی شده است. در این حالت، یک جدول مجازی تنها می تواند با جدول مسیریابی که در سایر جداول مجازی استفاده نمی شود، مرتبط شود.
    • درایور وایرلس ath11k است اضافه پشتیبانی از فرکانس 6 گیگاهرتز و اسکن طیفی.
  • Оборудование
    • کد حذف شده برای پشتیبانی از معماری UniCore، توسعه یافته در مرکز میکروپروسسوری دانشگاه پکن و در هسته لینوکس در سال 2011 گنجانده شده است. این معماری از سال 2014 حفظ نشده است و هیچ پشتیبانی در GCC ندارد.
    • پشتیبانی از معماری RISC-V اجرا شده است kcov (رابط اشکال زدایی برای تجزیه و تحلیل پوشش کد هسته)، kmemleak (سیستم تشخیص نشت حافظه)، حفاظت از پشته، علامت های پرش و عملیات بدون تیک (چند وظیفه مستقل از سیگنال های تایمر).
    • برای معماری PowerPC، پشتیبانی از صف های spinlock پیاده سازی شده است که به طور قابل توجهی عملکرد را در موقعیت های تضاد قفل بهبود بخشیده است.
    • برای معماری های ARM و ARM64، مکانیسم تنظیم فرکانس پردازنده به طور پیش فرض فعال است زمانبندی (cpufreq guvernator)، که مستقیماً از اطلاعات زمان‌بندی کار برای تصمیم‌گیری در مورد تغییر فرکانس استفاده می‌کند و می‌تواند بلافاصله به درایورهای cpufreq دسترسی پیدا کند تا فرکانس را سریع تغییر دهد و بلافاصله پارامترهای عملکرد CPU را با بار فعلی تنظیم کند.
    • درایور DRM i915 برای کارت های گرافیک اینتل شامل پشتیبانی از تراشه های مبتنی بر ریزمعماری است دریاچه موشک و پشتیبانی اولیه برای کارت های گسسته اضافه شده است اینتل Xe DG1.
    • درایور Amdgpu پشتیبانی اولیه از پردازنده های گرافیکی AMD را اضافه کرد Navi 21 (Navy Flounder) و Navi 22 (سیچلاید سینا). پشتیبانی از موتورهای شتاب دهنده و رمزگشایی ویدیوی UVD/VCE برای GPU جزایر جنوبی (Radeon HD 7000) اضافه شده است.
      یک ویژگی برای چرخش نمایشگر به میزان 90، 180 یا 270 درجه اضافه شده است.

      جالب اینجاست که درایور پردازنده گرافیکی AMD آن است بزرگترین درایور در هسته - حدود 2.71 میلیون خط کد دارد که تقریباً 10٪ از کل اندازه هسته (27.81 میلیون خط) است. در همان زمان، 1.79 میلیون خط توسط فایل‌های هدر تولید شده به صورت خودکار با داده‌های مربوط به رجیسترهای GPU، و کد C 366 هزار خط است (برای مقایسه، درایور Intel i915 شامل 209 هزار خط و Nouveau - 149 هزار خط است).

    • در راننده Nouveau اضافه پشتیبانی از بررسی یکپارچگی فریم به فریم با استفاده از CRC (بررسی چرخه ای افزونگی) در موتورهای نمایشگر گرافیکی NVIDIA. پیاده سازی بر اساس اسناد ارائه شده توسط NVIDIA است.
    • درایورهای اضافه شده برای پنل های LCD: Frida FRD350H54004، KOE TX26D202VM0BWA، CDTech S070PWS19HP-FC21، CDTech S070SWV29HG-DC44، Tianma TM070JVHG33 و XBD599da.
    • زیرسیستم صوتی ALSA پشتیبانی می کند اینتل سایلنت استریم (حالت برق مداوم برای دستگاه های 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، X10A2، X2A2، Plus. Ultra)، Jetson Xavier NX، Amlogic WeTek Core2، Aspeed EthanolX، پنج برد جدید مبتنی بر NXP i.MX6، MikroTik RouterBoard 3011، Xiaomi Libra، Microsoft Lumia 950، Sony Xperia Z5، MStar، Microchip KeepSparx5، Intel. نسخه 3، Renesas RZ/G2H.

در همان زمان، بنیاد نرم افزار آزاد آمریکای لاتین شکل گرفت
گزینه هسته کاملا رایگان 5.9 - Linux-libre 5.9-gnuپاک شده از عناصر سفت‌افزار و درایور حاوی اجزای غیر رایگان یا بخش‌های کد، که دامنه آن توسط سازنده محدود شده است. نسخه جدید بارگذاری blob را در درایورهای WiFi rtw8821c و SoC MediaTek mt8183 غیرفعال می کند. کد تمیز کردن لکه به روز شده در درایورها و زیرسیستم های Habanalabs، Wilc1000، amdgpu، mt7615، i915 CSR، Mellanox mlxsw (Spectrum3)، r8169 (rtl8125b-2) و x86 لمسی.

منبع: opennet.ru

اضافه کردن نظر