پس از دو ماه توسعه، لینوس توروالدز هسته را منتشر کرد. Linux ۵.۱۲. از جمله قابل توجهترین تغییرات: پشتیبانی از دستگاههای بلوکی منطقهبندیشده در Btrfs، قابلیت نگاشت شناسههای کاربری به سیستمهای فایل، پاکسازی معماریهای قدیمی ARM، حالت نوشتن مشتاق در NFS، مکانیزم LOOKUP_CACHED برای تعیین مسیر فایلها از حافظه پنهان، پشتیبانی از دستورالعملهای اتمی در BPF، سیستم اشکالزدایی KFENCE برای تشخیص خطاها در مدیریت حافظه، حالت نمونهبرداری NAPI در پشته شبکه که در یک رشته هسته جداگانه اجرا میشود، هایپروایزر ACRN، قابلیت تغییر مدل preempt در زمانبندی وظایف و پشتیبانی از بهینهسازیهای LTO هنگام ساخت در Clang.
نسخه جدید شامل 14170 (در نسخه قبلی 15480) اصلاحات از 1946 (1991) توسعه دهندگان است، اندازه پچ 38 مگابایت است (تغییرات روی 12102 (12090) فایل، 538599 (868025) خط کد اضافه شد، 333377 (261456) خطوط حذف شد). حدود 43 درصد از کل تغییرات معرفی شده در 5.12 مربوط به درایورهای دستگاه، تقریباً 17 درصد از تغییرات مربوط به به روز رسانی کدهای خاص معماری سخت افزار، 12 درصد مربوط به پشته شبکه، 5 درصد مربوط به سیستم های فایل و 4 درصد است. مربوط به زیرسیستم های هسته داخلی هستند.
نوآوری های اصلی:
- زیرسیستم دیسک، I/O و سیستم های فایل
- قابلیت نقشهبرداری شناسههای کاربر برای سیستمهای فایل نصب شده پیادهسازی شده است (میتوانید فایلهای یک کاربر را روی یک پارتیشن خارجی نصبشده با کاربر دیگری در سیستم فعلی نگاشت کنید). نقشه برداری برای سیستم های فایل FAT، ext4 و XFS پشتیبانی می شود. عملکرد پیشنهادی اشتراکگذاری فایلها را بین کاربران مختلف و در رایانههای مختلف آسانتر میکند، از جمله نقشهبرداری در مکانیسم فهرست خانه قابل حمل systemd-homed استفاده میشود و به کاربران این امکان را میدهد که فهرستهای خانگی خود را به رسانههای خارجی منتقل کنند و از آنها در رایانههای مختلف استفاده کنند. شناسه های کاربری که با آنها مطابقت ندارد. یکی دیگر از برنامه های کاربردی مفید، سازماندهی دسترسی مشترک به فایل ها از یک میزبان خارجی است، بدون اینکه در واقع اطلاعات مربوط به صاحبان فایل ها در سیستم فایل را تغییر دهید.
- وصلههای LOOKUP_CACHED در هسته پذیرفته شدهاند و به عملیات اجازه میدهند تا مسیر فایل را از فضای کاربر بدون مسدود کردن، فقط بر اساس دادههای موجود در حافظه پنهان تعیین کنند. حالت LOOKUP_CACHED در فراخوانی openat2() با عبور از پرچم RESOLVE_CACHED فعال می شود که در آن داده ها فقط از حافظه پنهان ارائه می شوند و اگر تعیین مسیر نیاز به دسترسی به درایو داشته باشد، خطای EAGAIN برگردانده می شود.
- سیستم فایل Btrfs پشتیبانی اولیه را برای دستگاه های بلوک منطقه بندی شده اضافه کرده است (دستگاه های روی دیسک های مغناطیسی سخت یا SSD های NVMe، فضای ذخیره سازی در آن به مناطقی تقسیم می شود که گروه هایی از بلوک ها یا بخش ها را تشکیل می دهند، که فقط به صورت متوالی داده ها مجاز است، به روز رسانی کل گروه بلوک ها). در حالت فقط خواندنی، پشتیبانی از بلوک های دارای ابرداده و داده های کوچکتر از یک صفحه (زیرصفحه) اجرا می شود.
- در فایل سیستم F2FS قابلیت انتخاب الگوریتم و سطح فشرده سازی اضافه شده است. پشتیبانی از فشرده سازی سطح بالا برای الگوریتم LZ4 اضافه شده است. گزینه checkpoint_merge mounting را پیاده سازی کرد.
- یک دستور ioctl جدید FS_IOC_READ_VERITY_METADATA برای خواندن فراداده از فایل های محافظت شده با fs-verity پیاده سازی شده است.
- سرویس گیرنده NFS یک حالت نوشتن "اشتیاقی" (writes=eager) را پیاده سازی می کند، هنگامی که فعال می شود، عملیات نوشتن در یک فایل بلافاصله به سرور منتقل می شود و کش صفحه را دور می زند. این حالت به شما امکان می دهد مصرف حافظه را کاهش دهید، دریافت فوری اطلاعات در مورد پایان فضای آزاد در سیستم فایل را فراهم می کند و در برخی شرایط امکان دستیابی به افزایش عملکرد را فراهم می کند.
- گزینههای نصب جدید به CIFS (SMB) اضافه شدهاند: acregmax برای کنترل حافظه پنهان فایل و acdirmax برای کنترل ذخیره ابرداده دایرکتوری.
- در XFS، حالت بررسی سهمیه چند رشته ای فعال شده است، اجرای fsync تسریع شده است و کد growfs برای اجرای عملکرد کاهش اندازه فایل سیستم آماده شده است.
- خدمات حافظه و سیستم
- زیرسیستم DTMP (Dynamic Thermal Power Management) اضافه شده است که به شما امکان می دهد مصرف برق دستگاه های مختلف را به صورت دینامیکی بر اساس محدودیت های دمای عمومی تنظیم شده تنظیم کنید.
- قابلیت ساخت هسته با استفاده از کامپایلر Clang با درج بهینه سازی در مرحله پیوند (LTO، Link Time Optimization) پیاده سازی شده است. بهینهسازی LTO با در نظر گرفتن وضعیت همه فایلهای درگیر در فرآیند ساخت متفاوت است، در حالی که حالتهای بهینهسازی سنتی هر فایل را جداگانه بهینه میکنند و شرایط فراخوانی توابع تعریف شده در فایلهای دیگر را در نظر نمیگیرند. به عنوان مثال، با LTO، استقرار درون خطی برای توابع فایل های دیگر امکان پذیر است، کدهای استفاده نشده در فایل اجرایی گنجانده نشده است، بررسی نوع و بهینه سازی کلی در سطح پروژه به طور کلی انجام می شود. پشتیبانی LTO در حال حاضر به معماری های x86 و ARM64 محدود شده است.
- امکان انتخاب حالتهای قبضه (PREEMPT) اکنون در زمان بوت (preempt=none/voluntary/full) یا در حین اجرا از طریق debugfs (/debug/sched_debug) در صورت مشخص شدن تنظیم PREEMPT_DYNAMIC در طول کامپایل هسته، در زمانبندی وظایف (task schedule) موجود است. پیش از این، حالت قبضه فقط در سطح پارامترهای ساخت قابل تعیین بود. این تغییر به توزیعها اجازه میدهد تا هستهها را با PREEMPT فعال ارسال کنند، که حداقل تأخیر را برای دسکتاپها با هزینه کاهش جزئی در توان عملیاتی فراهم میکند و در صورت لزوم، به PREEMPT_VOLUNTARY (یک حالت میانی برای دسکتاپها) یا PREEMPT_NONE (که حداکثر توان عملیاتی را برای ... فراهم میکند) بازگردد. سرورها).
- پشتیبانی از عملیات اتمی BPF_ADD، BPF_AND، BPF_OR، BPF_XOR، BPF_XCHG و BPF_CMPXCHG به زیرسیستم BPF اضافه شده است.
- به برنامههای BPF این امکان داده میشود که با استفاده از نشانگرهایی با افستهای متغیر، به دادههای روی پشته دسترسی داشته باشند. به عنوان مثال، اگر قبلاً فقط می توانستید از یک شاخص عنصر ثابت برای دسترسی به یک آرایه در پشته استفاده کنید، اکنون می توانید از یک شاخص در حال تغییر استفاده کنید. کنترل دسترسی فقط در محدوده های موجود توسط تایید کننده BPF انجام می شود. به دلیل نگرانی در مورد سوء استفاده از آسیبپذیریهای اجرای کد، این ویژگی تنها برای برنامههای دارای امتیاز در دسترس است.
- قابلیت اتصال برنامههای BPF به نقاط ردیابی خالی که با رویدادهای ردیابی قابل مشاهده در فضای کاربر مرتبط نیستند اضافه شده است (حفظ ABI برای چنین نقاط ردیابی تضمین نمیشود).
- پشتیبانی از گذرگاه CXL 2.0 (Compute Express Link) پیاده سازی شده است که برای سازماندهی تعامل پرسرعت بین CPU و دستگاه های حافظه استفاده می شود (به شما امکان می دهد از دستگاه های حافظه خارجی به عنوان بخشی از RAM یا حافظه دائمی استفاده کنید، گویی این حافظه است. از طریق یک کنترلر حافظه استاندارد در CPU متصل شدند).
- درایور nvmem برای بازیابی دادهها از قسمتهای حافظه رزرو شده توسط فریمور که مستقیماً قابل دسترسی نیستند، اضافه شد. Linux (برای مثال، حافظه EEPROM که از نظر فیزیکی فقط برای میانافزار قابل دسترسی است، یا دادههایی که فقط در مراحل اولیه بوت قابل دسترسی هستند).
- پشتیبانی از سیستم پروفایل "oprofile" حذف شده است، که به طور گسترده مورد استفاده قرار نگرفت و با مکانیزم مدرن تر perf جایگزین شده است.
- رابط ورودی/خروجی ناهمزمان io_uring یکپارچه سازی با cgroup هایی را فراهم می کند که مصرف حافظه را کنترل می کنند.
- معماری RISC-V از سیستمهای NUMA و همچنین مکانیزمهای kprobes و uprobes پشتیبانی میکند.
- قابلیت استفاده از فراخوانی سیستم ()kcmp بدون توجه به عملکرد عکسهای فوری وضعیت فرآیند (نقطه بازرسی/بازیابی) اضافه شده است.
- ماکروهای EXPORT_UNUSED_SYMBOL() و EXPORT_SYMBOL_GPL_FUTURE() که سال هاست در عمل استفاده نشده اند، حذف شده اند.
- مجازی سازی و امنیت
- مکانیسم حفاظتی KFence (حصار الکتریکی هسته) اضافه شده است که هنگام کار با حافظه، خطاهایی مانند بیش از حد بافر و دسترسی پس از آزاد کردن حافظه را تشخیص می دهد. بر خلاف مکانیسم اشکال زدایی KASAN، زیرسیستم KFence با سرعت عملیاتی بالا و سربار کم مشخص می شود که به شما امکان می دهد خطاهای حافظه را که فقط در سیستم های کاری یا در حین کار طولانی مدت ظاهر می شوند، دریافت کنید.
- پشتیبانی از هایپروایزر ACRN که با در نظر گرفتن آمادگی بلادرنگ و مناسب بودن برای ماموریتهای حیاتی نوشته شده است، اضافه شده است. ACRN حداقل سربار را فراهم میکند، تأخیر کم و پاسخگویی کافی را هنگام تعامل با سختافزار تضمین میکند. از مجازیسازی منابع CPU، I/O، شبکه، گرافیک و صدا پشتیبانی میکند. ACRN میتواند برای اجرای چندین نمونه مجزا استفاده شود. ماشینهای مجازی در واحدهای کنترل الکترونیکی، خوشههای ابزار، سیستمهای اطلاعات خودرو، دستگاههای اینترنت اشیا مصرفکننده و سایر فناوریهای تعبیهشده. ACRN از دو نوع سیستم مهمان پشتیبانی میکند: ماشینهای مجازی سرویس ممتاز، که برای مدیریت منابع سیستم (پردازنده، حافظه، ورودی/خروجی و غیره) استفاده میشوند، و ماشینهای مجازی کاربر، که میتوانند اجرا شوند Linux-توزیعها، Android и Windows.
- زیرسیستم IMA (معماری اندازهگیری یکپارچگی) که یک پایگاه داده هش را برای بررسی یکپارچگی فایلها و فرادادههای مرتبط نگهداری میکند، اکنون قابلیت بررسی یکپارچگی خود دادههای هسته را دارد، برای مثال، برای ردیابی تغییرات در قوانین SE.Linux.
- قابلیت رهگیری فراخوان های Xen و ارسال آنها به شبیه ساز در حال اجرا در فضای کاربر به هایپروایزر KVM اضافه شده است.
- قابلیت استفاده اضافه شد Linux به عنوان محیط ریشه برای هایپروایزر Hyper-V. محیط ریشه دسترسی مستقیم به سختافزار دارد و برای راهاندازی سیستمهای مهمان (مشابه Dom0 در Xen) استفاده میشود. تاکنون، هایپروی (مایکروسافت هایپروایزر) از Linux فقط در محیطهای مهمان، اما خود هایپروایزر از محیط میزبان کنترل میشد Windows.
- اضافه شدن پشتیبانی از رمزگذاری درون خطی برای کارتهای eMMC، به شما امکان میدهد از مکانیسمهای رمزگذاری تعبیهشده در کنترلکننده درایو استفاده کنید که بهطور شفاف ورودی/خروجی را رمزگذاری و رمزگشایی میکند.
- پشتیبانی از هش های RIPE-MD 128/256/320 و Tiger 128/160/192 که در هسته استفاده نمی شوند و همچنین رمز جریان Salsa20 که با الگوریتم ChaCha20 جایگزین شده بود، از قسمت حذف شده است. زیرسیستم کریپتو الگوریتم blake2 برای پیاده سازی blake2s به روز شده است.
- زیر سیستم شبکه
- قابلیت انتقال کنترلر نظرسنجی NAPI برای دستگاه های شبکه به یک رشته هسته جداگانه اضافه شده است که امکان بهبود عملکرد را برای برخی از انواع حجم کاری فراهم می کند. پیش از این، نظرسنجی در زمینه softirq انجام میشد و توسط زمانبندی وظایف پوشش داده نمیشد، که انجام بهینهسازیهای ریز دانه برای دستیابی به حداکثر عملکرد را دشوار میکرد. اجرا در یک رشته هسته جداگانه به کنترل کننده نظرسنجی اجازه می دهد تا از فضای کاربر مشاهده شود، به هسته های جداگانه CPU متصل شود و هنگام زمان بندی سوئیچینگ وظایف در نظر گرفته شود. برای فعال کردن حالت جدید در sysfs، پارامتر /sys/class/net//threaded پیشنهاد شده است.
- ادغام در هسته MPTCP (MultiPath TCP)، توسعه پروتکل TCP برای سازماندهی عملیات اتصال TCP با تحویل بسته ها به طور همزمان در طول چندین مسیر از طریق رابط های شبکه مختلف مرتبط با آدرس های IP مختلف. نسخه جدید توانایی اختصاص اولویت به رشتههای خاص را اضافه میکند، که به عنوان مثال، امکان سازماندهی کار رشتههای پشتیبان را فراهم میکند که فقط در صورت وجود مشکل در رشته اصلی روشن میشوند.
- IGMPv3 از مکانیزم EHT (ردیابی آشکار میزبان) پشتیبانی میکند.
- موتور فیلتر بسته Netfilter توانایی مالکیت جداول خاصی را برای به دست آوردن کنترل انحصاری فراهم می کند (به عنوان مثال، یک فرآیند فایروال پس زمینه می تواند مالکیت جداول خاصی را در اختیار بگیرد و از دخالت دیگران در آنها جلوگیری کند).
- Оборудование
- ما پلتفرم های قدیمی و نگهداری نشده ARM را تمیز کردیم. کد پلتفرم های efm32، picoxcell، prima2، tango، u300، zx و c6x و همچنین درایورهای مرتبط با آنها حذف شده است.
- درایور amdgpu امکان اورکلاک (OverDrive) کارتهای مبتنی بر پردازنده گرافیکی Sienna Cichlid (Navi 22، Radeon RX 6xxx) را فراهم میکند. پشتیبانی از فرمت پیکسلی FP16 برای DCE (موتور کنترل کننده نمایشگر) از نسل هشتم تا یازدهم. برای GPU Navy Flounder (Navi 8) و APU Van Gogh، قابلیت ریست کردن GPU پیاده سازی شده است.
- درایور i915 برای کارتهای گرافیک اینتل، پارامتر i915.mitigations را برای غیرفعال کردن مکانیسمهای ایزوله و حفاظت به نفع بهبود عملکرد اجرا میکند. برای تراشههایی که از Tiger Lake شروع میشوند، از مکانیزم VRR (تغییر نرخ تازهسازی) پشتیبانی میشود، که به شما امکان میدهد به طور تطبیقی نرخ تازهسازی مانیتور را تغییر دهید تا از صاف بودن و عدم وجود شکاف در طول بازی اطمینان حاصل کنید. پشتیبانی از فناوری Intel Clear Color برای بهبود دقت رنگ گنجانده شده است. پشتیبانی از DP-HDMI 2.1 اضافه شده است. قابلیت کنترل نور پس زمینه پنل های eDP پیاده سازی شده است. برای پردازندههای گرافیکی Gen9 با پشتیبانی از LSPCON (تغییرگر سطح و مبدل پروتکل)، پشتیبانی HDR فعال است.
- درایور nouveau پشتیبانی اولیه را برای پردازندههای گرافیکی NVIDIA مبتنی بر معماری GA100 (Ampere) اضافه میکند.
- درایور msm پشتیبانی از پردازندههای گرافیکی Adreno 508، 509 و 512 مورد استفاده در تراشههای SDM (Snapdragon) 630، 636 و 660 را اضافه میکند.
- پشتیبانی از کارت های صوتی Sound BlasterX AE-5 Plus، Lexicon I-ONIX FW810s و Pioneer DJM-750 اضافه شده است. پشتیبانی از زیرسیستم صوتی Intel Alder Lake PCH-P اضافه شده است. پشتیبانی از شبیهسازی نرمافزاری اتصال و قطع اتصال کانکتور صوتی برای رفع اشکال هندلرها در فضای کاربر پیادهسازی شده است.
- پشتیبانی از کنسولهای بازی نینتندو ۶۴ که از سال ۱۹۹۶ تا ۲۰۰۳ منتشر شدهاند (تلاشهای قبلی برای پورت کردن) اضافه شد. Linux (پورت نینتندو ۶۴ هرگز تکمیل نشد و به وضعیت Vaporware تنزل یافت.) گفته میشود انگیزه ایجاد پورت جدید برای پلتفرم قدیمی که تقریباً بیست سال از تولید آن گذشته است، تمایل به تحریک توسعه شبیهسازها و سادهسازی پورت بازیها بوده است.
- درایور برای کنترلر بازی سونی پلی استیشن 5 DualSense اضافه شد.
- پشتیبانی اضافه شده برای بردها، دستگاهها و پلتفرمهای ARM: PineTab، Snapdragon 888 / SM8350، Snapdragon MTP، Two Beacon EmbeddedWorks، Intel eASIC N5X، Netgear R8000P، Plymovent M2M، Beacon i.MXnoP NanoP8،
- پشتیبانی از Purism Librem5 Evergreen، Xperia Z3+/Z4/Z5، ASUS Zenfone 2 Laser، BQ Aquaris X5، OnePlus6، OnePlus6T، سامسونگ GT-I9070 اضافه شد.
- درایور bcm-vk برای بردهای شتاب دهنده Broadcom VK (به عنوان مثال، بردهای Valkyrie و Viper PCIe) اضافه شده است، که می تواند برای بارگذاری عملیات پردازش صدا، تصویر و تصویر و همچنین عملیات مربوط به رمزگذاری در یک دستگاه جداگانه استفاده شود.
- اضافه شدن پشتیبانی از پلتفرم Lenovo IdeaPad با قابلیت کنترل شارژ ثابت و نور پس زمینه صفحه کلید. همچنین پشتیبانی از پروفایل ACPI پلتفرم ThinkPad با قابلیت کنترل حالت های مصرف انرژی ارائه شده است. درایور برای زیر سیستم Lenovo ThinkPad X1 Tablet Gen 2 HID اضافه شد.
- درایور ov5647 با پشتیبانی از ماژول دوربین برای Raspberry Pi اضافه شد.
- پشتیبانی از بردهای RISC-V SoC FU740 و HiFive Unleashed اضافه شده است. یک درایور جدید برای تراشه Kendryte K210 نیز اضافه شده است.
منبع: opennet.ru
