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

پس از دو ماه توسعه، لینوس توروالدز انتشار هسته لینوکس 6.7 را ارائه کرد. از جمله قابل توجه ترین تغییرات: ادغام سیستم فایل Bcachefs، قطع پشتیبانی از معماری Itanium، توانایی Nouvea برای کار با سیستم عامل GSP-R، پشتیبانی از رمزگذاری TLS در NVMe-TCP، امکان استفاده از استثناها در BPF، پشتیبانی از futex در io_uring، بهینه سازی عملکرد زمانبندی fq (Fair Queuing)، پشتیبانی از پسوند TCP-AO (گزینه تأیید اعتبار TCP) و توانایی محدود کردن اتصالات شبکه در مکانیسم امنیتی Landlock، افزودن کنترل دسترسی به فضای نام کاربری و io_uring از طریق AppArmor.

نسخه جدید شامل 18405 اصلاحات از 2066 توسعه دهنده است، اندازه پچ 72 مگابایت است (تغییرات روی 13467 فایل تأثیر گذاشت، 906147 خط کد اضافه شد، 341048 خط حذف شد). آخرین نسخه دارای 15291 اصلاح از 2058 توسعه دهنده بود، اندازه پچ 39 مگابایت بود. حدود 45 درصد از کل تغییرات معرفی شده در 6.7 مربوط به درایورهای دستگاه، تقریبا 14 درصد از تغییرات مربوط به به روز رسانی کدهای خاص معماری سخت افزار، 13 درصد مربوط به پشته شبکه، 5 درصد مربوط به سیستم های فایل و 3 درصد است. مربوط به زیرسیستم های هسته داخلی هستند.

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

  • زیرسیستم دیسک، I/O و سیستم های فایل
    • هسته از کد سیستم فایل Bcachefs استفاده می کند، که تلاش می کند عملکرد، قابلیت اطمینان و مقیاس پذیری XFS را همراه با عناصر عملکرد پیشرفته موجود در Btrfs و ZFS به دست آورد. به عنوان مثال، Bcachefs از ویژگی‌هایی مانند گنجاندن چندین دستگاه در یک پارتیشن، طرح‌بندی درایو چند لایه (لایه پایین با داده‌های پرکاربرد مبتنی بر SSD‌های سریع، و لایه بالایی با داده‌های کمتر استفاده شده از هارد دیسک)، Replication (RAID) پشتیبانی می‌کند. 1/10)، ذخیره سازی، فشرده سازی شفاف داده ها (حالت های LZ4، gzip و ZSTD)، برش های حالت (عکس های فوری)، تأیید یکپارچگی با استفاده از جمع های کنترلی، امکان ذخیره کدهای تصحیح خطا Reed-Solomon (RAID 5/6)، ذخیره اطلاعات در فرم رمزگذاری شده (ChaCha20 و Poly1305 استفاده می شود). از نظر عملکرد، Bcachefs از Btrfs و سایر فایل سیستم‌های مبتنی بر مکانیزم Copy-on-Write جلوتر است و سرعت عملیاتی نزدیک به Ext4 و XFS را نشان می‌دهد.
    • سیستم فایل Btrfs یک حالت سهمیه ساده شده را معرفی می‌کند که به شما امکان می‌دهد با ردیابی گستره‌ها فقط در زیرپارتیشنی که در آن ایجاد شده‌اند، به عملکرد بالاتری دست یابید، که محاسبات را به‌طور قابل‌توجهی ساده‌تر می‌کند و عملکرد را بهبود می‌بخشد، اما به شما اجازه نمی‌دهد که گستره‌های اشتراک‌گذاری شده در چندین بخش را در نظر بگیرید. پارتیشن های فرعی
    • Btrfs یک ساختار داده جدید "درخت راه راه" اضافه کرده است که برای نگاشت گستره منطقی در شرایطی که نگاشتهای فیزیکی بین دستگاه ها مطابقت ندارند مناسب است. این ساختار در حال حاضر در پیاده سازی RAID0 و RAID1 برای دستگاه های بلوک منطقه بندی شده استفاده می شود. در آینده، آنها قصد دارند از این ساختار در RAID های سطح بالاتر استفاده کنند که تعدادی از مشکلات موجود در پیاده سازی فعلی را حل خواهد کرد.
    • سیستم فایل Ceph از نگاشت شناسه های کاربر سیستم های فایل نصب شده پشتیبانی می کند، که برای تطبیق فایل های یک کاربر خاص در یک پارتیشن خارجی نصب شده با کاربر دیگری در سیستم فعلی استفاده می شود.
    • قابلیت تعیین uid و gid را در mount به efivarfs اضافه کرد تا به فرآیندهای غیر روت اجازه دهد تا متغیرهای UEFI را تغییر دهند.
    • تماس‌های ioctl به exFAT برای خواندن و تغییر ویژگی‌های FS اضافه شده است. اضافه شدن مدیریت دایرکتوری های اندازه صفر.
    • F2FS توانایی استفاده از بلوک های 16K را پیاده سازی می کند.
    • مکانیزم autofs automount برای استفاده از API نصب پارتیشن جدید تغییر یافته است.
    • OverlayFS گزینه های نصب "lowerdir+" و "datadir+" را ارائه می دهد. پشتیبانی اضافه شده برای نصب تو در تو OverlayFS با xattrs.
    • XFS بار CPU را در کد تخصیص بلوک بلادرنگ بهینه کرده است. امکان انجام همزمان عملیات خواندن و FICLONE فراهم شده است.
    • کد EXT2 به استفاده از برگه های صفحه تبدیل شده است.
  • خدمات حافظه و سیستم
    • پشتیبانی از معماری ia64 مورد استفاده در پردازنده های Itanium اینتل که در سال 2021 به طور کامل متوقف شده بودند، متوقف شده است. پردازنده‌های Itanium در سال 2001 توسط اینتل معرفی شدند، اما معماری ia64 نتوانست با AMD64 رقابت کند، عمدتاً به دلیل عملکرد بالاتر AMD64 و انتقال نرم‌تر از پردازنده‌های 32 بیتی x86. در نتیجه، منافع اینتل به نفع پردازنده‌های x86-64 تغییر کرد و بخش Itanium به سرورهای HP Integrity باقی ماند که سفارش‌های آن سه سال پیش متوقف شد. کد پشتیبانی ia64 عمدتاً به دلیل عدم پشتیبانی طولانی مدت از این پلتفرم از هسته حذف شد، در حالی که لینوس توروالدز تمایل خود را برای بازگرداندن پشتیبانی ia64 به هسته ابراز کرد، اما تنها در صورتی که نگهدارنده ای وجود داشته باشد که بتواند کیفیت بالا را نشان دهد. حداقل یک سال از این پلتفرم خارج از هسته اصلی پشتیبانی می کند.
    • پارامتر فرمان خط هسته "ia32_emulation" اضافه شده است، که به شما امکان می دهد پشتیبانی از شبیه سازی حالت 32 بیتی را در هسته های ساخته شده برای معماری x86-64 در مرحله بوت فعال یا غیرفعال کنید. از جنبه کاربردی، گزینه جدید به شما امکان می دهد هسته را با پشتیبانی از سازگاری با برنامه های 32 بیتی بسازید، اما این حالت را به طور پیش فرض غیرفعال کنید تا بردار حمله بر روی هسته را کاهش دهید، زیرا API سازگاری کمتر از هسته اصلی آزمایش شده است. رابط ها
    • ادامه مهاجرت تغییرات از شاخه Rust-for-Linux مربوط به استفاده از زبان Rust به عنوان زبان دوم برای توسعه درایورها و ماژول های هسته (پشتیبانی Rust به طور پیش فرض فعال نیست و منجر به گنجاندن Rust در بین نمی شود. وابستگی های اسمبلی مورد نیاز برای هسته). نسخه جدید انتقال به استفاده از نسخه Rust 1.73 را انجام می دهد و مجموعه ای از اتصالات را برای کار با صف های کاری ارائه می دهد.
    • استفاده از مکانیسم binfmt_misc برای افزودن پشتیبانی از فرمت‌های فایل اجرایی جدید (مثلاً برای اجرای برنامه‌های کامپایل‌شده جاوا یا پایتون) در فضای نام مجزای غیرمجاز امکان‌پذیر است.
    • cpuset کنترلر cgroup، که به شما اجازه می دهد تا استفاده از هسته های CPU را هنگام اجرای یک کار کنترل کنید، تقسیمی را به پارتیشن بندی محلی و راه دور ارائه می دهد که در اینکه cgroup والد قسمت اصلی ریشه صحیح است یا خیر متفاوت است. تنظیمات جدید «cpuset.cpus.exclusive» و «cpuset.cpus.excluisve.effective» نیز برای اتصال انحصاری CPU به cpuset اضافه شده است.
    • زیرسیستم BPF از استثناها پشتیبانی می کند، که به عنوان یک خروج اضطراری از یک برنامه BPF با قابلیت باز کردن ایمن از پشته فریم ها پردازش می شوند. علاوه بر این، برنامه های BPF امکان استفاده از نشانگرهای kptr را در ارتباط با CPU می دهند.
    • Support for operations with futex has been added to the io_uring subsystem, and new operations have been implemented: IORING_OP_WAITID (asynchronous version of waitid), SOCKET_URING_OP_GETSOCKOPT (getsockoptand option), SOCKET_URING_OP_SETSOCKOPT (setsockopt option) and IORING_OP_READ_MULTISHOT (multiple read operations that do not stop while داده وجود دارد یا بافر کامل نیست).
    • اضافه شدن اجرای صف‌های FIFO با یک اتصال سبک وزن که فقط برای dequeueing در یک زمینه فرآیندی به spinlock نیاز دارند و از spinlock برای افزودن اتمی به صف در هر زمینه‌ای صرف نظر می‌کنند.
    • یک بافر حلقه "objpool" با اجرای مقیاس پذیر از یک صف با عملکرد بالا برای تخصیص و برگرداندن اشیا اضافه شده است.
    • قسمت اولیه تغییرات برای پیاده سازی Futex2 API جدید اضافه شده است که عملکرد بهتری در سیستم های NUMA دارد، اندازه های غیر از 32 بیت را پشتیبانی می کند و می تواند به جای فراخوانی سیستمی ()fuex مالتی پلکسی استفاده شود.
    • برای معماری های ARM32 و S390x، پشتیبانی از مجموعه فعلی (cpuv4) دستورالعمل های BPF اضافه شده است.
    • برای معماری RISC-V، می توان از حالت بررسی پشته Shadow-Call موجود در Clang 17 استفاده کرد، که برای محافظت در برابر بازنویسی آدرس برگشتی از یک تابع در صورت سرریز شدن بافر روی پشته طراحی شده است. ماهیت حفاظت این است که پس از انتقال کنترل به یک تابع و بازیابی این آدرس قبل از خروج از تابع، آدرس بازگشتی را در یک پشته "سایه" جداگانه ذخیره کنید.
    • یک حالت اسکن صفحه حافظه هوشمند جدید به مکانیسم ادغام صفحات حافظه یکسان (KSM: Kernel Samepage Merging) اضافه شده است که صفحات اسکن ناموفق را ردیابی می کند و از شدت اسکن مجدد آنها می کاهد. برای فعال کردن حالت جدید، تنظیمات /sys/kernel/mm/ksm/smart_scan اضافه شده است.
    • یک دستور ioctl جدید PAGEMAP_SCAN اضافه شده است، که وقتی با userfaultfd() استفاده می شود، به شما امکان می دهد حقایق نوشتن را در یک محدوده حافظه خاص تعیین کنید. به عنوان مثال، ویژگی جدید می تواند در سیستم برای ذخیره و بازیابی وضعیت فرآیندهای CRIU یا در سیستم های ضد تقلب بازی استفاده شود.
    • در سیستم اسمبلی، اگر کامپایلر Clang موجود باشد، اسمبلی نمونه هایی از استفاده از زیرسیستم perf که به صورت برنامه های BPF نوشته شده است، به طور پیش فرض فعال می شود.
    • لایه قدیمی videobuf که برای مدیریت فریم بافرها در زیرسیستم رسانه استفاده می شد و بیش از 10 سال پیش با پیاده سازی جدیدی از videobuf2 جایگزین شد، حذف شده است.
  • مجازی سازی و امنیت
    • قابلیت رمزگذاری داده ها در بلوک های کوچکتر از اندازه بلوک در سیستم فایل به زیرسیستم fscrypt اضافه شده است. این ممکن است برای فعال کردن مکانیسم‌های رمزگذاری سخت‌افزاری که فقط از بلوک‌های کوچک پشتیبانی می‌کنند، لازم باشد (برای مثال، کنترل‌کننده‌های UFS که فقط اندازه بلوک 4096 را پشتیبانی می‌کنند، می‌توانند با یک سیستم فایل با اندازه بلوک 16K استفاده شوند).
    • زیرسیستم "iommufd" که به شما امکان می دهد جداول صفحه حافظه IOMMU (I/O Memory-Management Unit) را از طریق توصیفگرهای فایل از فضای کاربر مدیریت کنید، ردیابی داده هایی را اضافه کرده است که هنوز از حافظه پنهان (کثیف) برای DMA پاک نشده اند. عملیات، که برای تعیین حافظه با داده های شستشو نشده در طول مهاجرت فرآیند ضروری است.
    • پشتیبانی از تعریف قوانین کنترل دسترسی برای سوکت های TCP به مکانیسم Landlock اضافه شده است که به شما امکان می دهد تعامل گروهی از فرآیندها را با محیط خارجی محدود کنید. به عنوان مثال، می توانید قانونی ایجاد کنید که فقط به پورت شبکه 443 برای ایجاد اتصالات HTTPS اجازه دسترسی می دهد.
    • زیرسیستم AppArmor قابلیت کنترل دسترسی به مکانیزم io_uring و ایجاد فضای نام کاربری را اضافه کرده است که به شما امکان می دهد به طور انتخابی فقط به فرآیندهای خاصی اجازه دسترسی به این قابلیت ها را بدهید.
    • API گواهی ماشین مجازی اضافه شد تا یکپارچگی فرآیند بوت ماشین مجازی را تأیید کند.
    • سیستم های LoongArch از مجازی سازی با استفاده از هایپروایزر KVM پشتیبانی می کنند.
    • هنگام استفاده از هایپروایزر KVM در سیستم‌های RISC-V، پشتیبانی از پسوند Smstateen ظاهر می‌شود، که دسترسی ماشین مجازی به ثبات‌های CPU را که به صراحت توسط hypervisor پشتیبانی نمی‌شوند، مسدود می‌کند. همچنین پشتیبانی برای استفاده از پسوند Zicond در سیستم‌های مهمان اضافه شده است که امکان استفاده از برخی عملیات‌های عدد صحیح شرطی را فراهم می‌کند.
    • در سیستم های مهمان مبتنی بر x86 که تحت KVM اجرا می شوند، حداکثر 4096 CPU مجازی مجاز است.
  • زیر سیستم شبکه
    • درایور NVMe-TCP (NVMe over TCP) که به شما امکان می دهد به درایوهای NVMe از طریق شبکه (NVM Express over Fabrics) با استفاده از پروتکل TCP دسترسی داشته باشید، پشتیبانی برای رمزگذاری کانال انتقال داده با استفاده از TLS (با استفاده از KTLS و فرآیند پس زمینه) اضافه کرده است. در فضای کاربری tlshd برای مذاکره اتصال).
    • عملکرد زمان‌بندی بسته fq (صف منصفانه) بهینه‌سازی شد، که باعث شد تا در آزمایش tcp_rr (درخواست/پاسخ TCP) توان عملیاتی را تا 5 درصد تحت بارهای سنگین و با جریان نامحدود بسته‌های UDP تا 13 درصد افزایش دهیم.
    • TCP قابلیت اختیاری مهر زمانی با دقت میکروثانیه (TCP TS) (RFC 7323) را اضافه می‌کند که به تخمین تأخیر دقیق‌تر و ماژول‌های کنترل تراکم پیشرفته‌تر اجازه می‌دهد. برای فعال کردن آن می توانید از دستور “ip route add 10/8 ... features tcp_usec_ts” استفاده کنید.
    • پشته TCP پشتیبانی از پسوند TCP-AO (گزینه تأیید اعتبار TCP، RFC 5925) را اضافه کرده است، که تأیید هدر TCP را با استفاده از کدهای MAC (کد احراز هویت پیام)، با استفاده از الگوریتم های مدرن تر HMAC-SHA1 و CMAC-AES- امکان پذیر می کند. 128 به جای گزینه TCP-MD5 که قبلاً بر اساس الگوریتم MD5 قدیمی موجود بود.
    • نوع جدیدی از دستگاه های شبکه مجازی "netkit" اضافه شده است که منطق انتقال داده در آن با استفاده از یک برنامه BPF تنظیم شده است.
    • KSMBD، یک پیاده‌سازی در سطح هسته از یک سرور SMB، پشتیبانی برای حل نام فایل‌های حاوی جفت‌های جایگزین کاراکترهای ترکیبی را اضافه کرده است.
    • NFS اجرای رشته ها را با خدمات RPC بهبود بخشیده است. اضافه شدن پشتیبانی برای ارسال تفویض نوشتن (برای NFSv4.1+). NFSD پشتیبانی از rpc_status netlink handler را اضافه کرده است. پشتیبانی بهبودیافته برای مشتریان NFSv4.x هنگام صادرات مجدد به knfsd.
  • Оборудование
    • پشتیبانی اولیه برای سیستم عامل GSP-RM به ماژول هسته Nouveau اضافه شده است که در پردازنده گرافیکی NVIDIA RTX 20+ برای انتقال عملیات اولیه و کنترل GPU به کنار یک میکروکنترلر GSP جداگانه (پردازنده سیستم GPU) استفاده می شود. پشتیبانی از GSP-RM به درایور Nouveau اجازه می‌دهد تا به جای برنامه‌نویسی مستقیم تعاملات سخت‌افزاری، از طریق تماس‌های میان‌افزار کار کند، و افزودن پشتیبانی از پردازنده‌های گرافیکی جدید NVIDIA را با استفاده از تماس‌های از پیش ساخته شده برای مقداردهی اولیه و مدیریت انرژی بسیار آسان‌تر می‌کند.
    • درایور AMDGPU از GC 11.5، NBIO 7.11، SMU 14، SMU 13.0 OD، DCN 3.5، VPE 6.1 و DML2 پشتیبانی می کند. پشتیبانی بهبود یافته برای بارگذاری بدون درز (بدون سوسو زدن هنگام تغییر حالت ویدیو).
    • درایور i915 پشتیبانی از تراشه های Intel Meteor Lake را اضافه می کند و پیاده سازی اولیه اینتل LunarLake (Xe 2) را اضافه می کند.
    • پشتیبانی از کانال های انتقال نامتقارن اضافه شده به مشخصات USB4 v2 (120/40G).
    • پشتیبانی اضافه شده از ARM SoC: Qualcomm Snapdragon 720G (مورد استفاده در گوشی های هوشمند شیائومی)، AMD Pensando Elba، Renesas، R8A779F4 (R-Car S4-8)، USRobotics USR8200 (مورد استفاده در روترها و NAS).
    • پشتیبانی از گوشی‌های هوشمند Fairphone 5 و بردهای ARM Orange Pi 5، QuartzPro64، Turing RK1، Variscite MX6، BigTreeTech CB1، Freescale LX2162، Google Spherion، Google Hayato، Genio 1200 EVK، RK3566 GB30 Powkid اضافه شد.
    • پشتیبانی از بردهای RISC-V Milk-V Pioneer و Milk-V Duo اضافه شده است.
    • پشتیبانی از رابط های صوتی لپ تاپ های HUAWEI با پردازنده های AMD اضافه شده است. پشتیبانی از بلندگوهای اضافی نصب شده روی لپ‌تاپ‌های Dell Oasis 13/14/16 اضافه شده است. پشتیبانی از بلندگوهای داخلی ASUS K6500ZC اضافه شده است. پشتیبانی از نشانگر بی صدا در لپ تاپ های HP 255 G8 و G10 اضافه شده است. پشتیبانی از درایورهای صوتی acp6.3 اضافه شده است. پشتیبانی از رابط های ضبط حرفه ای Focusrite Clarett+ 2Pre و 4Pre اضافه شده است.

در همان زمان، بنیاد نرم‌افزار آزاد آمریکای لاتین نسخه‌ای از هسته کاملاً رایگان 6.7 - Linux-libre 6.7-gnu را تشکیل داد که از عناصر سفت‌افزار و درایورهای حاوی مؤلفه‌های غیرآزاد یا بخش‌های کد پاک شده است که دامنه آن محدود است. توسط سازنده در نسخه 6.7 کد پاکسازی blob در درایورها و زیرسیستم های مختلف به روز شده است، به عنوان مثال در درایورهای amdgpu، nouveau، adreno، mwifiex، mt7988، ath11k، avs و btqca. کد پاکسازی درایورهای localtalk و rtl8192u به دلیل حذف آنها از هسته حذف شده است. اجزای غیر ضروری برای تمیز کردن درایورهای xhci-pci، rtl8xxxu و rtw8822b که قبلاً به اشتباه اضافه شده بودند، حذف شدند. نام حباب ها را در فایل های dts برای معماری Aarch64 پاک کرد. حباب های حذف شده در درایورهای جدید mt7925، tps6598x، aw87390 و aw88399.

منبع: opennet.ru

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