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

پس از دو ماه توسعه، لینوس توروالدز نسخه 6.1 هسته لینوکس را ارائه کرد. از جمله قابل توجه ترین تغییرات: پشتیبانی از توسعه درایورها و ماژول ها در زبان Rust، نوسازی مکانیسم تعیین صفحات حافظه استفاده شده، یک مدیر حافظه ویژه برای برنامه های BPF، یک سیستم برای تشخیص مشکلات حافظه KMSAN، KCFI (Kernelk Control) مکانیزم حفاظتی (Flow Integrity)، معرفی درخت ساختار Maple.

نسخه جدید شامل 15115 اصلاحات از 2139 توسعه دهنده است، اندازه پچ 51 مگابایت است که تقریباً 2 برابر کوچکتر از اندازه وصله های هسته های 6.0 و 5.19 است. این تغییرات بر 13165 فایل تأثیر گذاشت، 716247 خط کد اضافه شد و 304560 خط حذف شد. حدود 45 درصد از کل تغییرات معرفی شده در 6.1 مربوط به درایورهای دستگاه، تقریبا 14 درصد تغییرات مربوط به به روز رسانی کدهای خاص معماری سخت افزار، 14 درصد مربوط به پشته شبکه، 3 درصد مربوط به سیستم های فایل و 3 درصد است. مربوط به زیرسیستم های هسته داخلی هستند.

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

  • خدمات حافظه و سیستم
    • قابلیت استفاده از Rust به عنوان زبان دوم برای توسعه درایورها و ماژول های هسته اضافه شده است. دلیل اصلی پشتیبانی از Rust این است که با کاهش احتمال خطا در هنگام کار با حافظه، نوشتن درایورهای ایمن و باکیفیت دستگاه را آسان تر می کند. پشتیبانی Rust به طور پیش‌فرض غیرفعال است و باعث نمی‌شود که Rust به‌عنوان یک وابستگی ساخت هسته مورد نیاز گنجانده شود. کرنل تا کنون یک نسخه حداقلی و حذف شده از وصله ها را پذیرفته است که از 40 به 13 هزار خط کد کاهش یافته است و تنها حداقل لازم را فراهم می کند که برای ساخت یک ماژول هسته ساده نوشته شده به زبان Rust کافی است. در آینده برنامه ریزی شده است که به تدریج عملکرد موجود را افزایش داده و تغییرات دیگر را از شاخه Rust-for-Linux منتقل کند. به موازات آن، پروژه هایی برای استفاده از زیرساخت پیشنهادی برای توسعه درایورهای درایوهای NVMe، پروتکل شبکه 9p و پردازنده گرافیکی Apple M1 به زبان Rust در حال توسعه است.
    • برای سیستم‌های مبتنی بر معماری‌های AArch64، RISC-V و LoongArch با EFI، قابلیت بارگذاری مستقیم تصاویر هسته فشرده اجرا شده است. کنترل کننده هایی برای بارگیری، اجرا و تخلیه تصاویر هسته اضافه شده است که مستقیماً از EFI zboot فراخوانی می شوند. هندلرهایی برای نصب و حذف پروتکل ها از پایگاه داده پروتکل EFI نیز اضافه شده است. قبلاً باز کردن بسته بندی توسط یک بوت لودر جداگانه انجام می شد، اما اکنون می توان این کار را توسط یک کنترل کننده در خود هسته انجام داد - تصویر هسته به عنوان یک برنامه EFI شکل می گیرد.
    • این ترکیب شامل بخشی از وصله ها با اجرای یک مدل مدیریت حافظه چند سطحی است که به شما امکان می دهد بانک های حافظه را با ویژگی های عملکرد متفاوت جدا کنید. به عنوان مثال، صفحاتی که بیشترین استفاده را دارند ممکن است در سریع ترین حافظه ذخیره شوند، در حالی که صفحاتی که به ندرت استفاده می شوند ممکن است در حافظه نسبتا کند ذخیره شوند. Kernel 6.1 مکانیزمی را برای تعیین محل قرارگیری صفحات پرکاربرد در حافظه آهسته معرفی می کند تا بتوان آنها را به حافظه سریع ارتقا داد و همچنین یک مفهوم کلی از سطوح حافظه و عملکرد نسبی آنها را معرفی می کند.
    • این شامل مکانیسم MGLRU (Multi-Generational LRU) است که جایگزین پیاده سازی قدیمی LRU (کمترین اخیراً استفاده شده) بر اساس دو صف با ساختار چند مرحله ای می شود که بهتر تعیین می کند کدام صفحات حافظه واقعاً در حال استفاده هستند و کدام صفحات را می توان به بیرون فرستاد. پارتیشن swap
    • پشتیبانی از ساختار داده "درخت افرا" پیشنهاد شده توسط مهندسان اوراکل، که به عنوان جایگزین موثرتری برای ساختار "درخت قرمز-سیاه" است. درخت افرا گونه ای از B-tree است که از نمایه سازی محدوده پشتیبانی می کند و برای استفاده موثر از حافظه نهان پردازنده های مدرن طراحی شده است. برخی از زیرسیستم های مدیریت حافظه قبلاً به درخت افرا منتقل شده اند که تأثیر مثبتی بر عملکرد آنها داشته است. در آینده می توان از درخت افرا برای اجرای قفل محدوده استفاده کرد.
    • توانایی ایجاد برنامه‌های BPF «مخرب» که مخصوصاً برای شروع خاموشی اضطراری از طریق فراخوانی crash_kexec() طراحی شده‌اند به زیرسیستم BPF اضافه شده است. چنین برنامه‌های BPF ممکن است برای اهداف اشکال‌زدایی مورد نیاز باشد تا ایجاد یک خرابی در یک نقطه زمانی خاص را آغاز کند. برای دسترسی به عملیات مخرب هنگام بارگذاری یک برنامه BPF، باید پرچم BPF_F_DESTRUCTIVE را مشخص کنید، sysctl kernel.destructive_bpf_enabled را فعال کنید و حقوق CAP_SYS_BOOT را داشته باشید.
    • برای برنامه های BPF، شمارش عناصر cgroup و همچنین شمارش منابع (فایل ها، vma، پردازش ها و غیره) یک رشته یا وظیفه خاص امکان پذیر است. یک نوع نقشه جدید برای ایجاد بافرهای حلقه کاربر پیاده سازی شده است.
    • یک فراخوان ویژه برای تخصیص حافظه در برنامه های BPF (تخصیص دهنده حافظه) اضافه شده است که تخصیص حافظه ایمن تری را در زمینه BPF نسبت به kmalloc() استاندارد فراهم می کند.
    • بخش اول تغییرات یکپارچه شده است و امکان ایجاد درایور برای دستگاه های ورودی با رابط HID (دستگاه رابط انسانی) را فراهم می کند که در قالب برنامه های BPF پیاده سازی شده است.
    • هسته کد را برای پشتیبانی از فرمت فایل اجرایی a.out که در نسخه 5.1 منسوخ شده بود و از نسخه های 5.18 و 5.19 برای معماری های اصلی غیرفعال شده بود، به طور کامل حذف کرده است. فرمت a.out مدت‌هاست که در سیستم‌های لینوکس منسوخ شده است و تولید فایل‌های a.out توسط ابزارهای مدرن در تنظیمات پیش‌فرض لینوکس پشتیبانی نمی‌شود. لودر فایل های a.out را می توان به طور کامل در فضای کاربر پیاده سازی کرد.
    • برای سیستم های مبتنی بر معماری مجموعه دستورات LoongArch مورد استفاده در پردازنده های Loongson 3 5000 و پیاده سازی RISC ISA جدید، مشابه MIPS و RISC-V، پشتیبانی از رویدادهای اندازه گیری عملکرد (perf event)، kexec، kdump و کامپایل BPF JIT پیاده سازی شده است. .
    • رابط ورودی/خروجی ناهمزمان io_uring حالت جدیدی به نام IORING_SETUP_DEFER_TASKRUN را ارائه می دهد که اجازه می دهد تا کارهای مرتبط با بافر حلقه به طور موقت تا زمان درخواست برنامه به تعویق بیفتد، که می تواند برای کارهای دسته ای و جلوگیری از مشکلات تاخیر به دلیل پیش گرفتن استفاده شود. زمان اشتباه.
    • فرآیندهای موجود در فضای کاربر این قابلیت را دارند که تبدیل طیفی از صفحات حافظه معمولی را به مجموعه ای از صفحات حافظه بزرگ (Transparent Huge-Pages) آغاز کنند.
    • پیاده سازی دستگاه /dev/userfaultfd اضافه شده است که امکان دسترسی به عملکرد فراخوانی سیستم userfaultfd() را با استفاده از حقوق دسترسی در FS فراهم می کند. عملکرد userfaultfd به شما اجازه می دهد تا کنترل کننده هایی برای دسترسی به صفحات حافظه تخصیص نیافته (عیب های صفحه) در فضای کاربر ایجاد کنید.
    • الزامات نسخه ابزار GNU Make افزایش یافته است - اکنون حداقل نسخه 3.82 برای ساختن هسته مورد نیاز است.
  • زیرسیستم دیسک، I/O و سیستم های فایل
    • بهینه سازی عملکرد قابل توجهی در سیستم فایل Btrfs انجام شده است؛ در میان چیزهای دیگر، عملکرد فراخوانی FIEMAP ioctl به ترتیبی افزایش یافته است. پشتیبانی از نوشتن بافر ناهمزمان برای برنامه های کاربردی با استفاده از io_uring اضافه شده است. پشتیبانی از فایل های محافظت شده با fs-verity به عملیات "ارسال" اضافه شد.
    • سیستم فایل ext4 بهینه سازی های عملکرد مربوط به نگهداری مجله و عملیات فقط خواندنی را اضافه کرده است.
    • سیستم فایل EROFS (Enhanced Read-Only File System) که برای استفاده در پارتیشن های قابل دسترسی در حالت فقط خواندنی طراحی شده است، توانایی اشتراک گذاری داده های کپی شده در سیستم های فایل مختلف را پیاده سازی می کند.
    • فراخوانی سیستم statx() برای نمایش اطلاعاتی در مورد اینکه آیا ورودی/خروجی مستقیم می‌توان روی یک فایل اعمال کرد یا خیر اضافه شده است.
    • پشتیبانی از ایجاد فایل های موقت با پرچم O_TMPFILE به زیرسیستم FUSE (Filesystems in User Space) اضافه شده است.
  • مجازی سازی و امنیت
    • پیاده‌سازی مکانیسم حفاظتی CFI (Control Flow Integrity) جایگزین شده است و چک‌هایی را قبل از هر فراخوانی غیرمستقیم یک تابع اضافه می‌کند تا برخی از اشکال رفتار تعریف‌نشده را شناسایی کند که به طور بالقوه می‌تواند منجر به نقض دستور اجرای عادی (جریان کنترل) شود. نتیجه استفاده از اکسپلویت هایی است که نشانگرها را به توابع ذخیره شده در حافظه تغییر می دهند. اجرای استاندارد CFI از پروژه LLVM با گزینه ای نیز بر اساس استفاده از Clang جایگزین شده است، اما به طور ویژه برای محافظت از زیرسیستم های سطح پایین و هسته های سیستم عامل سازگار شده است. در LLVM، یک پیاده سازی جدید در نسخه Clang 16 ارائه می شود و با گزینه "-fsanitize=kcfi" فعال می شود. تفاوت اصلی با پیاده‌سازی جدید این است که به بهینه‌سازی زمان پیوند (LTO) وابسته نیست و باعث نمی‌شود که نشانگرهای تابع با پیوندهایی در جدول پرش جایگزین شوند.
    • برای ماژول‌های LSM (ماژول امنیتی لینوکس)، می‌توان کنترل‌کننده‌هایی ایجاد کرد که عملیات را برای ایجاد فضاهای نام متوقف می‌کنند.
    • ابزارهایی برای تأیید امضای دیجیتال PKCS#7 در برنامه های BPF ارائه شده است.
    • قابلیت باز کردن در حالت غیر مسدود کردن (O_NONBLOCK) که به طور ناخواسته در هسته 5.6 حذف شده بود، به /dev/random برگردانده شد.
    • در سیستم‌های با معماری x86، هشداری در صورت نگاشت صفحات حافظه توسط زیرسیستم‌های هسته که امکان اجرا و نوشتن را به طور همزمان فراهم می‌کنند، اضافه شده است. در آینده، امکان ممنوعیت کامل چنین نقشه برداری حافظه در حال بررسی است.
    • مکانیسم اشکال زدایی KMSAN (Kernel Memory Sanitizer) برای تشخیص استفاده از حافظه اولیه در هسته و همچنین نشت حافظه اولیه بین فضای کاربر و دستگاه ها اضافه شد.
    • بهبودهایی در تولید کننده اعداد شبه تصادفی CRNG امن رمزنگاری شده که در تماس getrandom استفاده می شود، انجام شده است. این تغییرات توسط Jason A. Donenfeld، نویسنده VPN WireGuard تهیه شده است و هدف آنها بهبود امنیت استخراج اعداد صحیح شبه تصادفی است.
  • زیر سیستم شبکه
    • پشته TCP این امکان را فراهم می کند (به طور پیش فرض غیرفعال است) برای استفاده از جداول هش سوکت به طور جداگانه برای هر فضای نام، که عملکرد را در سیستم هایی با تعداد فضای نام زیادی بهبود می بخشد.
    • کد برای پشتیبانی از پروتکل DECnet قدیمی حذف شد. خرده های API فضای کاربر در جای خود باقی می مانند تا به برنامه هایی که از DECnet استفاده می کنند اجازه کامپایل داده شود، اما این برنامه ها نمی توانند به شبکه متصل شوند.
    • پروتکل netlink مستند شده است.
  • Оборудование
    • درایور amdgpu پشتیبانی از DSC (فشرده سازی جریان نمایشگر) را برای فشرده سازی بدون تلفات هنگام تبادل اطلاعات با صفحه نمایش هایی که از وضوح بسیار بالا پشتیبانی می کنند، اضافه کرده است. کار برای ارائه پشتیبانی از پلتفرم های AMD RDNA3 (RX 7000) و CDNA (Instinct) ادامه دارد. پشتیبانی از اجزای IP DCN 3.2، SMU 13.x، NBIO 7.7، GC 11.x، PSP 13.x، SDMA 6.x و GMC 11.x اضافه شده است. درایور amdkfd (برای پردازنده های گرافیکی گسسته AMD مانند Polaris) از GFX 11.0.3 پشتیبانی می کند.
    • درایور i915 (اینتل) از GPU Meteor Lake پشتیبانی می کند. Meteor Lake و پردازنده‌های گرافیکی جدیدتر از رابط DP 2.0 (DisplayPort) پشتیبانی می‌کنند. شناسه‌های کارت‌های ویدیویی بر اساس ریزمعماری Alder Lake S اضافه شده است.
    • اضافه شدن پشتیبانی از زیرسیستم های صوتی پیاده سازی شده در پردازنده های Apple Silicon، Intel SkyLake و Intel KabyLake. درایور صوتی CS35L41 HDA از حالت خواب پشتیبانی می کند. پشتیبانی از ASoC (سیستم ALSA روی تراشه) برای تراشه‌های صوتی یکپارچه Apple Silicon، AMD Rembrant DSPs، AMD Pink Sardine ACP 6.2، Everest ES8326، Intel Sky Lake و Kaby Lake، Mediatek MT8186، NXP i.MX8ULP DSPs،8280com SM8250 و Texas Instruments SRC8450
    • پشتیبانی از پنل‌های LCD سامسونگ LTL101AL01، B120XAN01.0، R140NWF5 RH، Densitron DMT028VGHMCMI-1A TFT، AUO B133UAN02.1، IVO M133NW4J-R3، Innolux B120NW1J-R116، Innolux B01.6NW116J-R21، B116NWF2 RH. NT116WH M-N1، INX N0800BCA- EA9، INX NXNUMXBCN-EAXNUMX، فناوری Multi-Inno MIXNUMXFT-XNUMX.
    • اضافه شدن پشتیبانی از کنترلرهای AHCI SATA مورد استفاده در SoC Baikal-T1.
    • پشتیبانی از تراشه های بلوتوث MediaTek MT7921، Intel Magnetor (CNVi، اتصال یکپارچه)، Realtek RTL8852C، RTW8852AE و RTL8761BUV (Edimax BT-8500) اضافه شده است.
    • درایور ath11k برای ماژول‌های بی‌سیم کوالکام، پشتیبانی از اسکن طیفی در محدوده 160 مگاهرتز، پیاده‌سازی NAPI چند رشته‌ای، و پشتیبانی بهبود یافته از تراشه‌های Wi-Fi Qualcomm WCN6750 را اضافه کرده است.
    • درایورهای اضافه شده برای صفحه کلید PinePhone، پدهای لمسی InterTouch (ThinkPad P1 G3)، کنترلر تطبیقی ​​X-Box، کنترلر پرواز PhoenixRC، کنترلر اتومبیل VRC-2، کنترلر DualSense Edge، پنل عملیات IBM، کنترل از راه دور XBOX One Elite، تبلت XP-PEN Deco Pro S و Intuos Pro Small (PTH-460).
    • درایور برای شتاب‌دهنده‌های رمزنگاری Aspeed HACE (هش و کریپتوموتور) اضافه شد.
    • پشتیبانی از کنترلرهای یکپارچه Thunderbolt/USB4 Intel Meteor Lake اضافه شده است.
    • پشتیبانی از گوشی‌های Sony Xperia 1 IV، Samsung Galaxy E5، E7 و Grand Max، Pine64 Pinephone Pro اضافه شده است.
    • پشتیبانی اضافه شده از ARM SoC و بردها: AMD DaytonaX، Mediatek MT8186، Rockchips RK3399 و RK3566، TI AM62A، NXP i.MX8DXL، Renesas R-Car H3Ne-1.7G، Qualcomm IPQ8064، IPQ2.0، Kontron، 8062، IPQ8065، 8. BL i.MX8195MM OSM-S، MT4 (Acer Tomato)، Radxa ROCK 4C+، NanoPi R1S Enterprise Edition، JetHome JetHub DXNUMXp. درایورهای به روز شده برای SoC Samsung، Mediatek، Renesas، Tegra، Qualcomm، Broadcom و NXP.

در همان زمان، بنیاد نرم‌افزار آزاد آمریکای لاتین نسخه‌ای از هسته کاملاً رایگان 6.1 - Linux-libre 6.1-gnu را تشکیل داد که از عناصر سفت‌افزار و درایورهای حاوی مؤلفه‌های غیرآزاد یا بخش‌هایی از کد پاک شده است. توسط سازنده محدود شده است. نسخه جدید درایور جدید rtw8852b و فایل‌های DTS را برای SoCهای مختلف Qualcomm و MediaTek با پردازنده‌های مبتنی بر معماری AArch64 پاک می‌کند. کد پاک کننده لکه به روز شده در درایورها و زیرسیستم های amdgpu, i915, brcmfmac, r8188eu, rtw8852c, ACPI اینتل. تمیز کردن درایورهای قدیمی کارت تلویزیون tm6000, cpia2 v4l, sp8870, av7110 اصلاح شد.

منبع: opennet.ru

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