پس از دو ماه توسعه، لینوس توروالدز هسته لینوکس 6.3 را منتشر کرد. از جمله قابل توجه ترین تغییرات: پاکسازی پلتفرم های قدیمی و درایورهای گرافیکی ARM، ادامه یکپارچه سازی پشتیبانی از زبان Rust، ابزار hwnoise، پشتیبانی از ساختارهای درختی قرمز-مشکی در BPF، حالت BIG TCP برای IPv4، بنچمارک داخلی Dhrystone، قابلیت غیرفعال کردن اجرای در memfd، پشتیبانی از ایجاد درایورهای HID با استفاده از BPF، تغییراتی در Btrfs برای کاهش تکه تکه شدن گروه بلوک ایجاد شده است.
نسخه جدید 15637 اصلاحات را از 2055 توسعه دهنده پذیرفته است. اندازه پچ - 76 مگابایت (تغییرات روی 14296 فایل تأثیر گذاشت، 1023183 خط کد اضافه شد، 883103 خط حذف شد). برای مقایسه، در نسخه قبلی، 16843 اصلاحات از 2178 توسعه دهنده پیشنهاد شده است. حجم پچ - 62 مگابایت. حدود 39٪ از کل تغییرات معرفی شده در هسته 6.3 مربوط به درایورهای دستگاه، تقریبا 15٪ از تغییرات مربوط به به روز رسانی کدهای خاص معماری سخت افزار، 10٪ مربوط به پشته شبکه، 5٪ به سیستم های فایل و 3 است. % به زیرسیستم های هسته داخلی.
نوآوری های کلیدی در هسته 6.3:
- خدمات حافظه و سیستم
- پاکسازی قابل توجهی از کدهای مربوط به بردهای قدیمی و استفاده نشده ARM انجام شده است که باعث کاهش 150 هزار خطی از حجم سورس های هسته شده است. بیش از 40 پلتفرم قدیمی ARM را حذف کرد.
- قابلیت ایجاد درایور برای دستگاه های ورودی با رابط HID (دستگاه رابط انسانی) پیاده سازی شده در قالب برنامه های BPF را پیاده سازی کرد.
- ادامه انتقال از شاخه Rust-for-Linux از قابلیت های اضافی مربوط به استفاده از Rust به عنوان زبان دوم برای توسعه درایورها و ماژول های هسته. پشتیبانی Rust بهطور پیشفرض فعال نیست و باعث نمیشود که Rust بهعنوان یک وابستگی ساخت هسته اجباری گنجانده شود. عملکرد ارائه شده در نسخه های قبلی با پشتیبانی از انواع Arc (پیاده سازی نشانگرها با تعداد مرجع)، ScopeGuard (در صورت خارج از محدوده انجام می شود پاک می شود) و ForeignOwnable (حرکت نشانگر بین کد C و Rust را ارائه می دهد) گسترش یافته است. . ماژول «قرض» از بسته «alloc» حذف شد («گاو» و ویژگی «ToOwned» را تایپ کنید). اشاره شده است که وضعیت پشتیبانی از Rust در هسته در حال حاضر نزدیک به شروع پذیرش اولین ماژول های نوشته شده در Rust در هسته است.
- لینوکس حالت کاربر (که هسته را به عنوان یک فرآیند کاربر اجرا می کند) در سیستم های x86-64 از کدهای نوشته شده در Rust پشتیبانی می کند. اضافه شدن پشتیبانی برای ساخت لینوکس حالت کاربر با استفاده از صدای جرنگ با فعال کردن بهینه سازی زمان پیوند (LTO).
- ابزار hwnoise برای ردیابی تاخیرهای ناشی از رفتار سخت افزاری اضافه شده است. انحراف در زمان اجرای عملیات (جیتر) زمانی تعیین می شود که پردازش وقفه غیرفعال باشد، بیش از یک میکروثانیه در 10 دقیقه محاسبات.
- یک ماژول هسته با پیادهسازی بنچمارک Dhrystone اضافه شده است که میتواند برای ارزیابی عملکرد CPU در پیکربندیهای بدون اجزای فضای کاربر (به عنوان مثال، در مرحله انتقال برای SoCهای جدید که فقط بارگذاری هسته را اجرا میکنند) استفاده شود.
- گزینه خط فرمان کرنل "cgroup.memory=nobpf" برای غیرفعال کردن حسابداری مصرف حافظه برای برنامه های BPF اضافه شده است که می تواند برای سیستم هایی با کانتینرهای ایزوله مفید باشد.
- برای برنامه های BPF، پیاده سازی ساختار داده درختی قرمز-سیاه پیشنهاد شده است که به جای اضافه کردن یک نوع نقشه برداری جدید، از kfunc + kptr (bpf_rbtree_add، bpf_rbtree_remove، bpf_rbtree_first) استفاده می کند.
- در مکانیزم توالی های قابل راه اندازی مجدد (rseq, sequences قابل راه اندازی مجدد)، امکان عبور شناسه های اجرای موازی (شناسه همزمانی حافظه-نقشه) شناسایی شده با شماره CPU به فرآیندها اضافه شده است. Rseq وسیلهای برای اجرای سریع اتمی عملیاتی فراهم میکند که در صورت قطع شدن توسط رشتهای دیگر، پاک شده و دوباره امتحان میشوند.
- پردازنده های ARM دستورالعمل های SME 2 (Scalable Matrix Extension) را پشتیبانی می کنند.
- برای معماریهای s390x و RISC-V RV64، پشتیبانی از مکانیزم «BPF Trampoline» اجرا شده است که اجازه میدهد هنگام انتقال تماسها بین برنامههای هسته و BPF به حداقل برسد.
- در سیستم هایی با پردازنده های مبتنی بر معماری RISC-V، استفاده از دستورالعمل های "ZBB" برای سرعت بخشیدن به عملیات رشته ها اجرا شده است.
- برای سیستمهای مبتنی بر معماری مجموعه دستورات LoongArch (استفاده شده در پردازندههای Loongson 3 5000 و پیادهسازی RISC ISA جدید مشابه MIPS و RISC-V)، پشتیبانی از تصادفیسازی فضای آدرس هسته (KASLR)، تغییر مکان هسته در حافظه (تغییر مکان) )، نقاط سخت افزاری توقف و مکانیسم kprobe.
- مکانیسم DAMOS (طرحهای عملیات مبتنی بر نظارت بر دسترسی به داده)، که به شما امکان میدهد حافظه را بر اساس فرکانس دسترسی به حافظه آزاد کنید، از فیلترهایی برای حذف مناطق خاصی از حافظه از پردازش در DAMOS پشتیبانی میکند.
- حداقل استاندارد کتابخانه C Nolibc از معماری s390 و مجموعه دستورالعمل Arm Thumb1 (علاوه بر پشتیبانی از ARM، AArch64، i386، x86_64، RISC-V و MIPS) پشتیبانی می کند.
- Objtool برای سرعت بخشیدن به ساخت هسته و کاهش مصرف حافظه در زمان ساخت بهینه شده است (هنگام ساختن هسته در حالت "allyesconfig"، هیچ مشکلی با خاتمه اجباری فرآیندها در سیستم هایی با 32 گیگابایت رم وجود ندارد).
- پشتیبانی از اسمبلی کرنل توسط کامپایلر Intel ICC متوقف شده است، که مدت زیادی است که از کار افتاده است و هیچکس تمایلی برای تعمیر آن نشان نداده است.
- زیرسیستم دیسک، I/O و سیستم های فایل
- tmpfs از نگاشت شناسه کاربر سیستم فایل نصب شده پشتیبانی می کند، که برای نگاشت فایل های یک کاربر خاص روی یک پارتیشن خارجی نصب شده به کاربر دیگری در سیستم فعلی استفاده می شود.
- در Btrfs، برای کاهش تکه تکه شدن گروههای بلوک، هنگام تخصیص بلوک، گسترهها بر اساس اندازه تقسیم میشوند. اکنون هر گروهی از بلوکها به ابعاد کوچک (تا 128 کیلوبایت)، متوسط (تا 8 مگابایت) و بزرگ محدود شده است. پیاده سازی raid56 بازسازی شده است. کد بازطراحی شده برای بررسی چک ها بهینهسازیهای عملکردی برای سرعت بخشیدن به عملیات ارسال تا 10 برابر با cache کردن utime برای دایرکتوریها و اجرای دستورات فقط در صورت نیاز انجام شده است. 10 برابر سریعتر عملیات فیمپ با پرش از بررسی بک لینک برای داده های مشترک (عکس های فوری). عملیات با ابرداده با بهینه سازی جستجوی کلیدها در ساختارهای درختی XNUMX درصد تسریع می شود.
- بهبود عملکرد ext4 FS با اجازه دادن به چندین فرآیند برای انجام همزمان عملیات I/O مستقیم به بلوک های از پیش تخصیص داده شده با استفاده از قفل های inode مشترک به جای قفل های انحصاری.
- در f2fs کارهایی برای بهبود خوانایی کد انجام شده است. رفع مشکلات مهم مربوط به نوشتن اتمی و حافظه کش جدید.
- EROFS (سیستم فایل فقط خواندنی پیشرفته) که برای پارتیشنهای فقط خواندنی طراحی شده است، این توانایی را دارد که عملیات فشردهسازی فایلهای فشرده را به CPU متصل کند تا تأخیر دسترسی به دادهها را کاهش دهد.
- زمانبند BFQ I/O پشتیبانی از درایوهای دیسک چرخشی پیشرفته را اضافه کرده است، مانند آنهایی که از چندین درایو کنترل شده جداگانه (Multi Actuator) استفاده می کنند.
- پشتیبانی از رمزگذاری داده ها با استفاده از الگوریتم AES-SHA2 به اجرای سرویس گیرنده و سرور NFS اضافه شده است.
- زیرسیستم FUSE (Filesystems In User Space) پشتیبانی از مکانیزم پسوند پرس و جو را اضافه کرده است که به شما امکان می دهد اطلاعات اضافی را در پرس و جو قرار دهید. بر اساس این ویژگی، افزودن شناسه های گروه به درخواست FS پیاده سازی می شود که برای در نظر گرفتن حقوق دسترسی هنگام ایجاد اشیاء در FS (create، mkdir، symlink، mknod) ضروری است.
- مجازی سازی و امنیت
- هایپروایزر KVM برای سیستمهای x86 پشتیبانی از فراخوانهای پیشرفته Hyper-V را اضافه میکند و آنها را به یک کنترلکننده در حال اجرا در محیط میزبان فضای کاربر ارائه میدهد. این تغییر امکان اجرای پشتیبانی از راه اندازی تودرتوی Hyper-V را فراهم کرد.
- KVM محدود کردن دسترسی سیستم مهمان به رویدادهای PMU (واحد نظارت بر عملکرد) مربوط به اندازهگیری عملکرد را آسانتر میکند.
- مکانیزم memfd که به شما امکان میدهد یک ناحیه حافظه را از طریق یک توصیفگر فایل که بین پردازشها ارسال میشود شناسایی کنید، توانایی ایجاد مناطقی را که اجرای کد در آنها ممنوع است (memfd غیر قابل اجرا) اضافه شده است و تنظیم حقوق اجرا در آن غیرممکن است. آینده.
- یک عملیات prctl جدید PR_SET_MDWE اضافه شده است تا تلاشها برای گنجاندن حقوق دسترسی به حافظه را که امکان نوشتن و اجرای همزمان را فراهم میکند، مسدود کند.
- به صورت پیش فرض محافظت در برابر حملات کلاس Spectre اضافه شده و فعال شده است، که بر اساس حالت خودکار IBRS (Enhanced Indirect Branch Restricted Speculation) ارائه شده در پردازنده های AMD Zen 4، پیاده سازی شده است، که به شما امکان می دهد به طور تطبیقی اجرای گمانه زنی دستورالعمل ها را در هنگام وقفه فعال و غیرفعال کنید. پردازش، تماس های سیستمی و سوئیچ های زمینه. حفاظت پیشنهادی منجر به سربار کمتری در مقایسه با حفاظت Retpoline میشود.
- آسیبپذیری را برطرف میکند که میتواند هنگام استفاده از فناوری چند رشتهای همزمان (SMT یا Hyper-Threading) از محافظت از حمله Spectre v2 دور بزند و به دلیل غیرفعال کردن STIBP (پیشبینیکنندههای شاخه غیرمستقیم یک رشته) هنگام انتخاب حالت حفاظتی IBRS ایجاد میشود.
- برای سیستم های مبتنی بر ARM64، یک هدف ساخت جدید "virtconfig" اضافه شده است که در صورت انتخاب، تنها حداقل مجموعه ای از اجزای هسته مورد نیاز برای بوت شدن در سیستم های مجازی سازی را فعال می کند.
- پشتیبانی از فیلتر کردن تماس های سیستمی با استفاده از مکانیزم seccomp برای معماری m68k اضافه شده است.
- پشتیبانی از دستگاه های داخلی پردازنده های AMD Ryzen CRB TPM2 (Command Response Buffer) مبتنی بر فناوری Microsoft Pluton.
- زیر سیستم شبکه
- یک رابط شبکه برای پیکربندی زیرلایه PLCA (Physical Layer Collision Avoidance) اضافه شده است که در مشخصات IEEE 802.3cg-2019 تعریف شده و در شبکه های اترنت 802.3cg (10Base-T1S) بهینه شده برای اتصال دستگاه های IoT و سیستم های صنعتی استفاده می شود. استفاده از PLCA باعث بهبود عملکرد در شبکه های اترنت رسانه مشترک می شود.
- پشتیبانی از «برنامههای افزودنی بیسیم» برای مدیریت رابطهای بیسیم WiFi 7 (802.11be) متوقف شده است، زیرا این API تمام تنظیمات لازم را پوشش نمیدهد. هنگام تلاش برای استفاده از "افزونه های بی سیم" API، که همچنان به عنوان یک لایه شبیه سازی شده پشتیبانی می شود، اکنون یک هشدار برای اکثر دستگاه های فعلی نمایش داده می شود.
- مستندات دقیق در netlink API آماده شده است (برای توسعه دهندگان هسته و برای توسعه دهندگان برنامه های کاربردی فضای کاربر). ابزار ynl-gen-c برای تولید کد C بر اساس مشخصات YAML پروتکل Netlink پیاده سازی شده است.
- پشتیبانی از گزینه IP_LOCAL_PORT_RANGE به سوکت های شبکه اضافه شده است تا پیکربندی اتصالات خروجی را از طریق مترجم آدرس بدون استفاده از SNAT ساده کند. هنگام استفاده از یک آدرس IP در چندین میزبان، IP_LOCAL_PORT_RANGE به هر میزبان اجازه می دهد تا از محدوده پورت های شبکه خروجی خود استفاده کند، و در دروازه برای ارسال بسته ها بر اساس شماره پورت ها استفاده کند.
- برای MPTCP (MultiPath TCP)، توانایی مدیریت جریان های مختلط که از پروتکل های IPv4 و IPv6 استفاده می کنند، پیاده سازی شده است. MPTCP توسعه پروتکل TCP برای سازماندهی عملیات اتصال TCP با تحویل بسته ها به طور همزمان در طول چندین مسیر از طریق واسط های مختلف شبکه متصل به آدرس های IP مختلف است.
- برای IPv4، امکان استفاده از پسوند BIG TCP اجرا شده است که امکان افزایش حداکثر اندازه بسته TCP تا 4 گیگابایت را برای بهینه سازی عملکرد شبکه های داخلی پرسرعت مراکز داده فراهم می کند. این افزایش در اندازه بسته با یک فیلد هدر 16 بیتی با پیاده سازی بسته های "جمبو" که اندازه سرآیند IP روی 0 تنظیم شده و اندازه واقعی در یک فیلد 32 بیتی جداگانه در یک هدر پیوست جداگانه منتقل می شود، حاصل می شود.
- یک پارامتر sysctl جدید default_rps_mask اضافه شده است که از طریق آن میتوانید پیکربندی پیشفرض RPS (Receive Packet Steering) را تنظیم کنید که وظیفه توزیع پردازش ترافیک ورودی در هستههای CPU در سطح کنترل کننده وقفه را بر عهده دارد.
- پشتیبانی از رشته های صف برای محدود کردن ترافیک CBQ (صف بندی مبتنی بر کلاس)، ATM (مدارهای مجازی ATM)، dsmark (نشانگر خدمات متمایز)، tcindex (شاخص کنترل ترافیک) و RSVP (پروتکل رزرو منبع) متوقف شد. این رشتهها مدتهاست که کنار گذاشته شدهاند و هیچکس حاضر به ادامه حمایت از آنها نبود.
- Оборудование
- تمام درایورهای گرافیکی مبتنی بر DRI1 حذف شد: i810 (کارتهای گرافیکی مجتمع قدیمی Intel 8xx)، mga (GPU Matrox)، r128 (GPU ATI Rage 128 شامل کارتهای Rage Fury، XPERT 99 و XPERT 128)، savage (GPU S3 Savage)، sis ( Crusty SiS GPU)، tdfx (3dfx Voodoo) و via (VIA IGP)، که در سال 2016 منسوخ شدند و از سال 2012 در Mesa پشتیبانی نمیشوند.
- درایورهای فریم بافر (fbdev) منسوخ omap1، s3c2410، tmiofb و w100fb حذف شدند.
- یک درایور DRM برای VPU (واحد پردازش چند منظوره) که در CPUهای Intel Meteor Lake (نسل چهاردهم) یکپارچه شده است، اضافه شده است که برای تسریع بینایی کامپیوتر و عملیات یادگیری ماشین طراحی شده است. درایور با استفاده از زیرسیستم "accel" با هدف ارائه پشتیبانی از شتاب دهنده های محاسباتی اجرا می شود که می تواند هم به صورت ASIC جداگانه و هم به عنوان بلوک IP در داخل SoC و GPU عرضه شود.
- درایور i915 (اینتل) پشتیبانی از کارتهای گرافیک مجزای Intel Arc (DG2/Alchemist) را گسترش میدهد، پشتیبانی اولیه از پردازندههای گرافیکی Meteor Lake را ارائه میکند و شامل پشتیبانی از پردازندههای گرافیکی Intel Xe HP 4tile میشود.
- درایور amdgpu پشتیبانی از فناوری AdaptiveSync و توانایی استفاده از Secure Display با نمایشگرهای متعدد را اضافه می کند. پشتیبانی به روز شده برای DCN 3.2 (Display Core Next)، SR-IOV RAS، VCN RAS، SMU 13.x و DP 2.1.
- پشتیبانی از پلتفرم های SM8350، SM8450 SM8550، SDM845 و SC8280XP به درایور msm (GPU Qualcomm Adreno) اضافه شده است.
- درایور Nouveau پشتیبانی از تماس های قدیمی ioctl را قطع کرده است.
- پشتیبانی آزمایشی از NPU VerSilicon (پردازنده شبکه عصبی VeriSilicon) به درایور etnaviv اضافه شده است.
- درایور pata_parport برای درایوهای IDE متصل شده از طریق یک پورت موازی پیاده سازی شده است. درایور اضافه شده امکان حذف درایور قدیمی PARIDE را از هسته و ارتقاء زیرسیستم ATA فراهم کرد. محدودیت درایور جدید عدم امکان اتصال همزمان چاپگر و دیسک از طریق پورت موازی است.
- اضافه شدن درایور ath12k برای کارت های بی سیم مبتنی بر تراشه های کوالکام با پشتیبانی از Wi-Fi 7. اضافه شدن پشتیبانی از کارت های بی سیم مبتنی بر تراشه های RealTek RTL8188EU.
- اضافه شدن پشتیبانی از 46 برد بر اساس معماری ARM64، از جمله Samsung Galaxy tab A (2015)، Samsung Galaxy S5، BananaPi R3، Debix Model A، EmbedFire LubanCat 1/2، Facebook Greatlakes، Orange Pi R1 Plus، Tesla FSD، و همچنین دستگاه ها مبتنی بر SoC Qualcomm MSM8953 (Snapdragon 610)، SM8550 (Snapdragon 8 Gen 2)، SDM450 و SDM632، Rockchips RK3128 TV box، RV1126 Vision، RK3588، RK3568، RK3566AM و RK3588، RK3328 3/AM642 / AM654).
در همان زمان، بنیاد نرمافزار آزاد آمریکای لاتین گونهای از هسته کاملاً رایگان 6.3 - Linux-libre 6.3-gnu را تشکیل داد که از عناصر سفتافزار و درایور حاوی مؤلفههای غیرآزاد یا بخشهای کد پاک شده است، که دامنه آن با محدودیتهای محدود است. سازنده. در نسخه 6.3، حبابها در درایورهای جدید ath12k، aw88395، و peb2466 و همچنین در فایلهای devicetree جدید برای دستگاههای qcom مبتنی بر AArch64 پاکسازی شدند. کد پاکسازی حبابها در درایورها و زیرسیستمهای amdgpu، xhci-rcar، qcom-q6v5-pas، sp8870، av7110 و همچنین در درایورهای کارتهای DVB با رمزگشایی نرمافزار و فایلهای BPF از پیش کامپایل شده بهروزرسانی شده است. درایورهای پاکسازی mga، r128، tm6000، cpia2 و r8188eu را با حذف از هسته متوقف کرد. تمیز کردن حباب درایور i915 بهبود یافته است.
منبع: opennet.ru