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

پس از دو ماه توسعه، لینوس توروالدز انتشار هسته لینوکس 6.8 را ارائه کرد. از جمله قابل توجه ترین تغییرات: درایور Xe برای پردازنده های گرافیکی اینتل، حالت حفاظتی برای دستگاه های بلوک با سیستم فایل نصب شده، مکانیسم زمان بندی وظایف سرور Deadline، بهینه سازی خودکار ادغام صفحات حافظه یکسان، اولین درایور در زبان Rust، listmount و statmount. فراخوانی سیستم، حذف bpfilter و مکانیسم SLAB guest_memfd در KVM، پروفایل دسترسی به داده ها.

نسخه جدید شامل 15641 اصلاحات از توسعه دهندگان 2018 است، حجم پچ 44 مگابایت است (تغییرات روی 12212 فایل تأثیر گذاشت، 663864 خط کد اضافه شد، 339094 خط حذف شد). آخرین نسخه دارای 18405 اصلاحات توسط 2066 توسعه دهنده بود و اندازه پچ 72 مگابایت بود. حدود 42 درصد از کل تغییرات معرفی شده در 6.8 مربوط به درایورهای دستگاه، تقریباً 15 درصد تغییرات مربوط به به روز رسانی کدهای خاص معماری سخت افزار، 14 درصد مربوط به پشته شبکه، 6 درصد مربوط به سیستم های فایل و 3 درصد است. مربوط به زیرسیستم های هسته داخلی هستند.

6.8 میلیون شی در مخزن Git با هسته 9.996 وجود دارد که نشان می دهد هسته بعدی 6.9 نقطه عطف 10 میلیون شی Git را خواهد شکست. قبلاً، تغییر در شماره‌های شاخه 3.x و 4.x به خوبی با تعداد اشیاء git در مخزن همبستگی داشت - هسته 3.0 زمانی منتشر شد که تقریباً 2 میلیون شی در مخزن وجود داشت و هسته 4.0 - 4 میلیون شی. در همان زمان، در سال 2019، نسخه 5.0 این زنجیره منطقی را شکست، زیرا در زمان تشکیل، مخزن شامل تقریباً 6.5 میلیون شی git بود.

نوآوری های کلیدی در هسته 6.8:

  • زیرسیستم دیسک، I/O و سیستم های فایل
    • یک حالت برای مسدود کردن نوشتن مستقیم برای مسدود کردن دستگاه‌هایی که سیستم فایل نصب شده‌اند اضافه شده است (پس از فعال کردن حالت، کاربر ریشه نمی‌تواند از طریق دستکاری در سطح دستگاه بلوک، تغییراتی در FS ایجاد کند). به طور پیش‌فرض، حالت غیرفعال است و باید پارامتر BLK_DEV_WRITE_MOUNTED در هنگام ساخت مشخص شود. برای پارتیشن های با Btrfs، مسدود کردن هنوز کار نمی کند، زیرا تغییرات لازم هنوز در کد Btrfs انجام نشده است.
    • فراخوانی های سیستم listmount() و statmount() اضافه شده است که به شما امکان می دهد اطلاعات دقیقی در مورد سیستم های فایل نصب شده از فضای کاربر به دست آید.
    • در سیستم فایل XFS، کار برای پیاده‌سازی قابلیت استفاده از ابزار fsck برای بررسی و تصحیح مشکلات شناسایی‌شده به‌صورت آنلاین، بدون باز کردن سیستم فایل ادامه دارد.
    • Ext4 از فراخوانی dioread_nolock برای بلوک های کوچکتر از یک صفحه حافظه استفاده می کند که با حذف قفل های غیر ضروری عملکرد را بهبود می بخشد. برخی از توابع به استفاده از برگه های صفحه تبدیل شده اند.
    • Btrfs برای غیرفعال کردن حافظه پنهان بلوک آزاد، پشتیبانی از پرچم نصب "nospace_cache" را اضافه کرد. برخی از توابع به استفاده از برگه های صفحه تبدیل شده اند.
    • سیستم فایل EROFS (سیستم فایل فقط خواندنی قابل ارتقا) که برای استفاده در پارتیشن‌های فقط خواندنی طراحی شده است، پشتیبانی از فشرده‌سازی صفحات فرعی و بهبود عملکرد در موقعیت‌های کم حافظه را اضافه کرده است.
    • سیستم فایل F2FS پشتیبانی از دستگاه‌های ذخیره‌سازی منطقه‌بندی شده را بهبود بخشیده است (تقسیم گروه‌هایی از بلوک‌ها یا بخش‌ها به مناطق، که تنها به‌صورت متوالی داده‌ها با به‌روزرسانی کل گروه بلوک‌ها مجاز است).
    • برای فایل سیستم SMB قابلیت ایجاد فایل های دستگاه بلوکی و نمادین پیاده سازی شده است.
    • پشتیبانی جزئی برای بررسی و بازیابی یکپارچگی سیستم های فایل نصب شده به Bcachefs اضافه شده است.
    • زیرسیستم نقشه‌بردار دستگاه دیگر از کنترل‌کننده‌های MD_LINEAR، MD_MULTIPATH و MD_FAULTY که در سال 2021 منسوخ شدند، پشتیبانی نمی‌کند.
  • خدمات حافظه و سیستم
    • زیرسیستم Zswap با قابلیت تخلیه اجباری صفحات حافظه "سرد" که به آنها دسترسی پیدا نکرده اند و به احتمال زیاد بی ادعا باقی می مانند، تکمیل شده است و در صورت کمبود RAM فعال می شود. Zswap صفحاتی را که به پارتیشن swap منتقل می‌شوند، در حافظه پنهان ذخیره می‌کند، و در صورت امکان بدون شستشوی آن‌ها در پارتیشن swap غیرفشرده واقعی روی دیسک، آنها را در RAM به صورت فشرده ذخیره می‌کند. تغییراتی که در هنگام کم بودن حافظه ایجاد می شود به شما این امکان را می دهد که اندازه Zswap Pool ذخیره شده در RAM را کاهش دهید و حافظه سیستم را آزاد کنید.
    • Zswap حالت جدیدی را ارائه می‌کند که در صورت ناموفق بودن تلاش برای نوشتن، بازگشت به پارتیشن مبادله واقعی را به طور کامل غیرفعال می‌کند و صفحات موجود در zswap pool را به پارتیشن مبادله نمی‌کند.
    • مکانیسم سرور SCHED_DEADLINE به زمانبندی کار اضافه شده است، که مشکل استفاده ناکافی از منابع CPU توسط وظایف معمولی را در زمانی که CPU در انحصار وظایف با اولویت بالا (زمان بیدرنگ) است، حل می کند. برای جلوگیری از انحصار CPU، هسته قبلاً از مکانیسم Realtime throttling استفاده می کرد که سعی می کرد 5٪ را برای کارهای با اولویت پایین رزرو کند و 95٪ از زمان را برای کارهای بلادرنگ باقی بگذارد. از آنجایی که کارهای معمولی در بسیاری از موقعیت‌ها زمان کافی برای پردازشگر دریافت نمی‌کردند، این مکانیسم بسیار مورد انتظار بود. سرور SCHED_DEADLINE مکانیسم رزرو منابع کارآمدتری را پیاده سازی می کند.
    • زیرسیستم DAMON (Data Access MONitor) که به شما امکان می دهد دسترسی یک فرآیند به داده ها را در RAM نظارت کنید (مثلاً می توانید متوجه شوید که فرآیند به کدام مناطق حافظه دسترسی داشته است و کدام مناطق حافظه بدون ادعا باقی مانده است)، مکانیزمی برای تنظیم خودکار اضافه کرده است. پرخاشگری مصرف حافظه بر اساس سهمیه های مشخص شده.
    • اضافه شدن پشتیبانی از صفحات حافظه بزرگ چند اندازه (mTHP - صفحات بزرگ شفاف چند اندازه ای)، که به شما امکان می دهد حافظه را در بلوک های بزرگتر از صفحه اصلی، اما کوچکتر از یک صفحه THP سنتی تخصیص دهید.
    • اضافه شدن پشتیبانی از برگه های بزرگ (برگ های صفحه، صفحات حافظه ترکیبی) برای حافظه ناشناس (به FS گره نخورده، به عنوان مثال، از طریق malloc اختصاص داده شده است). هدف این تغییر بهبود عملکرد با تخصیص تکه های بزرگ حافظه در حین دسترسی به صفحات حافظه تخصیص نشده (عیب های صفحه) است. به عنوان مثال، استفاده از حجم های زیاد باعث شد تا زمان مونتاژ مجدد هسته تا 5% کاهش یابد (در حالی که زمان صرف شده در سطح هسته را تا 40%) کاهش داد.
    • پارامتر TRANSPARENT_HUGEPAGE_NEVER به فایل پیکربندی هسته اضافه شده است و غیرفعال کردن استفاده از Transparent Huge Pages را ممکن می سازد.
    • فراخوانی سیستم ()userfaultfd، که امکان ایجاد کنترل‌کننده‌هایی را برای دسترسی به صفحات حافظه تخصیص‌نشده (عیب‌های صفحه) در فضای کاربر ایجاد می‌کند، عملیات UFFDIO_MOVE را اضافه کرده است که در طول فشرده‌سازی پشته‌ای، اجازه می‌دهد تا صفحات حافظه را در فضای آدرس مجازی جابجا کنید. انجام عملیات تخصیص صفحه حافظه در تست های انجام شده، استفاده از UFFDIO_MOVE به ما این امکان را داد که زمان بسته بندی را تا 40 درصد در مقایسه با استفاده از عملیات UFFDIO_COPY کاهش دهیم.
    • مکانیزم "مشاور KSM" اضافه شده است که به شما امکان می دهد به طور خودکار پارامترهای زیرسیستم را برای ادغام صفحات حافظه یکسان (KSM - Kernel Samepage Merging) بهینه کنید.
    • ادامه مهاجرت تغییرات از شاخه Rust-for-Linux مربوط به استفاده از زبان Rust به عنوان زبان دوم برای توسعه درایورها و ماژول های هسته (پشتیبانی Rust به طور پیش فرض فعال نیست و منجر به گنجاندن Rust در بین نمی شود. وابستگی های اسمبلی مورد نیاز برای هسته). نسخه جدید شامل تغییراتی است که یک پوشش Rust بالاتر از سطح انتزاعی phylib اضافه می کند و درایور ax88796b_rust که از این پوشش استفاده می کند و از رابط PHY کنترلر اترنت Asix AX88772A (100MBit) پشتیبانی می کند. از نظر کارایی درایور Rust کاملا معادل درایور قدیمی ax88796b است که با زبان C نوشته شده است و با کارت های شبکه X-Surf 100 مجهز به تراشه AX88796B قابل استفاده است. برای معماری LoongArch، امکان نوشتن ماژول ها به زبان Rust وجود دارد. انتقال به استفاده از نسخه Rust 1.74.1 انجام شده است.
    • مکانیزم توکن BPF اضافه شده است که به شما امکان می دهد پردازش برخی از قابلیت های BPF مانند بارگذاری یک برنامه BPF یا ایجاد نقشه BPF را به طور انتخابی به فرآیندهای غیرمجاز در فضای کاربر واگذار کنید، که اعتبار آن توسط یک توکن خاص تأیید می شود.
    • عملکرد تأیید کننده برنامه BPF گسترش یافته است.
    • ابزار perf پشتیبانی از پروفایل داده را اضافه کرده است که به شما امکان می دهد خواندن و نوشتن را در ساختارهای داده ردیابی کنید، به عنوان مثال، به منظور شناسایی فعال ترین فیلدهای اصلاح شده در ساختارها. در سیستم‌هایی با پردازنده‌هایی که از جمع‌آوری اطلاعات در مورد عملیات حافظه پشتیبانی می‌کنند (Intel، AMD، ARM)، باید از دستور “perf mem record” برای جمع‌آوری آمار و “perf annotate –da-type” برای نمایش گزارش دسترسی به داده‌ها استفاده کنید. سازه های .
    • عملکرد پردازش تماس سیستمی در معماری s390 (IBM Z) بهینه‌سازی شد که در آزمایش‌ها منجر به تسریع در ورود تماس سیستمی تقریباً 11٪ شد.
    • امکان تغییر اندازه بافرهای ردیابی مورد استفاده برای بافر اطلاعات مربوط به رویدادهای ردیابی ارسال شده به فضای کاربر فراهم شده است.
    • مکانیسم تخصیص حافظه SLAB که قبلاً منسوخ شده بود حذف شده است و اکنون هسته از SLUB استفاده می کند. دلایل ذکر شده مشکلات تعمیر و نگهداری، مشکلات در کد، و تکراری بودن عملکرد با تخصیص دهنده SLUB پیشرفته تر است.
    • هنگام ساختن هسته، پرچم "-Wmissing-prototypes" فعال می شود، که هشدارهایی را برای فراخوانی توابع جهانی که تعریف نمونه اولیه ندارند، ایجاد می کند.
    • برای معماری RISC-V در سیستم هایی که از پسوند SUSP SBI پشتیبانی می کنند، پشتیبانی برای ورود به حالت آماده به کار با ذخیره حالت در RAM پیاده سازی شده است. امکان استفاده از فراخوانی سیستم riscv_hwprobe () برای به دست آوردن اطلاعات در مورد پسوندهای پشتیبانی شده برای معماری مجموعه دستورالعمل RISC-V را ارائه می دهد.
  • مجازی سازی و امنیت
    • سیستم جدید lsm_list_modules()، lsm_get_self_attr() و lsm_set_self_attr() را برای فهرست کردن ماژول‌های LSM بارگذاری شده (ماژول‌های امنیتی لینوکس) و دریافت/تنظیم ویژگی‌های ماژول LSM اضافه کرد. یک ساختار جدید lsm_ctx برای ارتباط در زمینه LSM بین فضای کاربر و هسته اضافه شده است.
    • زیرسیستم AppArmor به جای هش SHA-256 به استفاده از الگوریتم SHA-1 برای تأیید قوانین تغییر کرده است.
    • اجرای تابع strlcpy() که در تابستان در کتابخانه Glibc 3.38 C گنجانده شده بود، از هسته حذف شده است. Strlcpy جایگزینی برای تابع strncpy () است که حاوی حفاظت سرریز بافر است و همیشه بایت تهی انتهایی را تنظیم می کند.
    • در هایپروایزر KVM پشتیبانی برای زیرسیستم guest_memfd (حافظه مهمان-اول) اضافه شده است، که توابع مدیریت حافظه را فراهم می‌کند و ویژگی‌ها و بهینه‌سازی‌هایی را که با زیرسیستم مدیریت حافظه عمومی قابل دستیابی نیستند، فعال می‌کند. به عنوان مثال، guest_memfd امکان تخصیص و نگاشت حافظه غیرقابل دسترس برای سیستم مهمان را فراهم می‌کند که می‌تواند برای محاسبات محرمانه مورد استفاده قرار گیرد.
    • برای سیستم‌های مهمان که هایپروایزر KVM را اجرا می‌کنند، پشتیبانی از حالت LAM (مپوشان آدرس خطی) ارائه شده در پردازنده‌های اینتل فعال است، که امکان استفاده از بخشی از بیت‌های اشاره‌گرهای 64 بیتی (از 57 تا 62 بیت) را برای ذخیره ابرداده‌های غیر مرتبط با خطاب به.
    • هایپروایزر KVM برای سیستم های مبتنی بر معماری ARM64 پشتیبانی از آدرس های فیزیکی 52 بیتی (LPA2) را اضافه کرده است. برای سیستم‌هایی با معماری x86، امکان ساخت بدون شبیه‌سازی فراخوان‌های Hyper-V وجود دارد که امکان کاهش اندازه هسته را فراهم می‌کند.
    • درایور iaa (IAA Compression Accelerator) با استفاده از قابلیت های شتاب دهنده های رمزنگاری Intel Analytics Accelerator (IAA) برای سرعت بخشیدن به فشرده سازی و رفع فشرده سازی داده ها با استفاده از روش DEFLATE اضافه شده است.
    • در سمت میزبان، پشتیبانی از مکانیزم Intel TDX (Trusted Domain Extensions) پیاده‌سازی شده است که امکان ایجاد محیط‌های مهمان امن را فراهم می‌کند که هنگام استفاده از هایپروایزر KVM از رمزگذاری حافظه استفاده می‌کنند. ماشین‌های مجازی.
    • SELinux برای شناسایی فرآیندهای بوت که قبل از اعمال سیاست های SELinux شروع شده اند، SID "init" را اضافه کرده است. رابط /sys/fs/selinux بهبود یافته برای مدیریت SELinux.
  • زیر سیستم شبکه
    • یک سازماندهی مجدد در سطح پایین ساختارهای داده شبکه زیربنایی برای بهبود کارایی حافظه پنهان انجام شد. پیش از این، فیلدها در ساختارهای پشته شبکه socks، netdev، netns و mibs با اضافه شدن آنها مرتب می شدند که استفاده از حافظه پنهان پردازنده را محدود می کرد. بازنگری در قرارگیری متغیرها در ساختارها به لطف به حداقل رساندن استفاده از خطوط کش در مرحله انتقال داده و بهینه سازی دسترسی به متغیرها، منجر به افزایش قابل توجه سرعت TCP شد. در مواردی که چندین اتصال TCP موازی پردازش می شود، سرعت افزایش می تواند به 40٪ برسد.
    • زیرسیستم bpfilter که از BPF برای فیلتر کردن بسته ها استفاده می کند، حذف شده است. Bpfilter از زمان انتشار 4.18 عرضه شده است، اما هرگز به سطحی مناسب برای استفاده گسترده توسعه نیافته است. در سال های اخیر، کد bpfilter در هسته توسعه نیافته است و توسعه توسط فیس بوک در مخزن هتل ادامه یافته است.
  • Оборудование
    • این بسته شامل یک درایور جدید drm (مدیر رندر مستقیم) Xe برای پردازنده‌های گرافیکی مبتنی بر معماری Intel Xe است که در کارت‌های ویدیویی خانواده Intel Arc و گرافیک یکپارچه استفاده می‌شود و با پردازنده‌های Tiger Lake شروع می‌شود. درایور Xe به‌عنوان پایه‌ای برای کارکرد تراشه‌های جدید قرار می‌گیرد، بدون اینکه به کدی برای پشتیبانی از پلتفرم‌های قدیمی‌تر گره بخورد. این درایور با استفاده از معماری جدیدی ساخته شده است که از اجزای زیرسیستم DRM موجود و همچنین اجزای درایور عمومی i915 که به GPU های خاصی مانند کد تعامل صفحه نمایش، مدل حافظه و پیاده سازی execbuf متصل نیستند، بیشتر استفاده می کند. در Mesa، اجرای OpenGL و Vulkan در بالای درایور Xe از طریق تغییرات ایجاد شده در درایورهای Mesa Iris و ANV موجود اجرا می‌شود.
    • در درایور i915، کار برای اجرای پشتیبانی از تراشه های LunarLake (Xe 2) اینتل ادامه دارد. پشتیبانی بهبود یافته از تراشه های Intel Meteor Lake.
    • درایور Nouveau طوری پیکربندی شده است که به طور پیش‌فرض از توابع میان‌افزار GSP برای کار با پردازنده‌های گرافیکی NVIDIA بر اساس ریزمعماری Turing و Ampere استفاده کند، که در آن عملیات اولیه‌سازی و کنترل GPU توسط یک میکروکنترلر GSP جداگانه (پردازنده سیستم GPU) انجام می‌شود. وقتی تنظیم فعال باشد، درایور به جای برنامه ریزی مستقیم عملیات برای تعامل با تجهیزات، با دسترسی به سیستم عامل کار می کند.
    • درایور AMDGPU شامل پشتیبانی از ACPI WBRF و VPE DPM است، پردازش سرعت کانال PCIe تغییر کرده است، اعداد دنباله ۶۴ بیتی در صف‌های مورد استفاده برای همگام‌سازی استفاده می‌شوند، پشتیبانی از مکانیسم‌های مدیریت رنگ خاص AMD اضافه شده است، و مشکل تغییر به حالت خواب حل شده است.
    • اضافه شدن اجرای اولیه درایور برای پردازنده گرافیکی Broadcom VideoCore 7.1 مورد استفاده در بردهای Raspberry Pi 5.
    • درایور برای پردازنده‌های گرافیکی سری PowerVR 6 بر اساس ریزمعماری Rogue از Imagination Technologies اضافه شد.
    • اضافه شدن پشتیبانی از کنترلرهای Thunderbolt/USB4 که در تراشه‌های مبتنی بر ریزمعماری اینتل Lunar Lake یکپارچه شده‌اند.
    • درایورهای دوربین های مورد استفاده در SoC Starfive، GalaxyCore GC2145/GC0308، Chips&Media Wave و THine THP7312 اضافه شده است.
    • اضافه شدن پشتیبانی از کنترلرهای بازی NSO (Nintendo Switch Online) - انواع کنترلرهای قدیمی از SNES (Super Nintendo)، Genesis و N64 (Nintendo 64) که برای Nintendo Switch سازگار شده است. درایور برای گیم پدهای Adafruit Seesaw اضافه شد. پشتیبانی از کنترلرهای Lenovo Legion Go به درایور xpad اضافه شده است.
    • درایور dts اکنون از دستگاه های بازی Powkiddy RK2023، Powkiddy X55 و Anbernic RG351V پشتیبانی می کند.
    • اضافه شدن پشتیبانی از سیستم های صوتی مورد استفاده در تراشه های NXP i.MX8m MICFIL، Qualcomm SM8250، AMD ACP5x، Intel Arrow Lake، SM8550، SM8650 و X1E80100.
    • AMD تغییراتی را در زمینه پشتیبانی از سری پردازنده های آینده بر اساس ریزمعماری جدید Zen 5 ایجاد کرده است.
    • پشتیبانی اضافه شده از ARM64 SoC: Qualcomm SM8650 (Snapdragon 8 Gen 3)، Qualcomm X1E80100 (Snapdragon X Elite)، Samsung Exynos Auto v920، Google GS101 (Tensor G1)، MediaTek MT8188 و UnisocTanggula9620.
    • پشتیبانی اضافه شده برای بردها و دستگاه‌های ARM: Huashan Pi، Microsoft Lumia، HTC One Mini 2، Motorola MotoG 4G، Huawei Honor 5X/GR5، Anbernic RG351V، Powkiddy RK2023، Powkiddy X55، ComXpress مبتنی بر Marvell CN913x، Leus، و Chromebook بر اساس Mediatek MT8183، Toradex Verdin AM62، بردهای مبتنی بر Allwinner H616/H618.
    • پشتیبانی از پردازنده های ARM11 ARMv6K SMP متوقف شده است.

در همان زمان، بنیاد نرم‌افزار آزاد آمریکای لاتین نسخه‌ای از هسته کاملاً رایگان 6.8 - Linux-libre 6.8-gnu را تشکیل داد که از عناصر سفت‌افزار و درایورهای حاوی اجزا یا بخش‌های کد اختصاصی پاک شده است، که دامنه آن توسط محدود شده است. سازنده. در نسخه 6.8 کد پاکسازی لکه در درایورها و زیرسیستم های مختلف به روز شده است. درایورهای Intel qat_420xx، Imagination PowerVR، Intel Xe، Chips&Media Wave5، Intel VSC، Aquantia PHY و Realtek rtw8922a پاکسازی شدند. به دلیل حذف از کرنل، پاکسازی درایورهای atmel، hermes، orinoco_usb، libertas_cs و zd1201 متوقف شده است. نام حباب ها را در فایل های dts (devicetree) برای معماری های ARM و Aarch64 پاک کرد. مشکلات تمیز کردن درایور i915 برطرف شد.

منبع: opennet.ru

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