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

پس از دو ماه توسعه، لینوس توروالدز نسخه 5.12 هسته لینوکس را ارائه کرد. در میان قابل توجه ترین تغییرات: پشتیبانی از دستگاه های بلوک منطقه بندی شده در Btrfs، توانایی نقشه برداری شناسه های کاربر برای سیستم فایل، پاکسازی معماری های قدیمی ARM، حالت نوشتن مشتاقانه در NFS، مکانیسم LOOKUP_CACHED برای تعیین مسیرهای فایل از حافظه پنهان. ، پشتیبانی از دستورالعمل های اتمی در BPF، سیستم اشکال زدایی KFENCE برای شناسایی خطاها هنگام کار با حافظه، حالت نظرسنجی NAPI در حال اجرا در یک رشته هسته جداگانه در پشته شبکه، هایپروایزر ACRN، توانایی تغییر مدل پیشگیرانه در حال پرواز در کار زمانبندی و پشتیبانی از بهینه سازی های 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_DYNAMIC در هنگام ساختن هسته مشخص شده باشد، می‌توانید حالت‌های preemption (PREEMPT) را در زمان‌بندی کار در مرحله بوت (preempt=none/voluntary/full) یا در حین کار از طریق debugfs (/debug/sched_debug) انتخاب کنید. قبلاً، حالت اکستروژن فقط در سطح پارامترهای مونتاژ تنظیم می شد. این تغییر به توزیع‌ها اجازه می‌دهد تا هسته‌ها را با حالت 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 برای بازیابی داده‌ها از قسمت‌های حافظه ذخیره‌شده با سیستم عامل که مستقیماً در دسترس لینوکس نیستند اضافه شده است (به عنوان مثال، حافظه 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 از دو نوع سیستم مهمان پشتیبانی می کند - ماشین های مجازی سرویس ممتاز که برای مدیریت منابع سیستم (CPU، حافظه، I/O و غیره) استفاده می شوند و ماشین های مجازی کاربر سفارشی که می توانند توزیع های لینوکس، اندروید و ویندوز را اجرا کنند.
    • در زیرسیستم IMA (معماری اندازه‌گیری یکپارچگی) که یک پایگاه داده هش برای بررسی یکپارچگی فایل‌ها و ابرداده‌های مرتبط نگهداری می‌کند، اکنون می‌توان یکپارچگی داده‌های خود هسته را بررسی کرد، به عنوان مثال، برای ردیابی تغییرات در قوانین SELinux. .
    • قابلیت رهگیری فراخوان های Xen و ارسال آنها به شبیه ساز در حال اجرا در فضای کاربر به هایپروایزر KVM اضافه شده است.
    • قابلیت استفاده از لینوکس به عنوان محیط ریشه برای Hyper-V Hypervisor اضافه شده است. محیط ریشه دسترسی مستقیم به سخت افزار دارد و برای اجرای سیستم های مهمان (مشابه Dom0 در Xen) استفاده می شود. تا به حال Hyper-V (Microsoft Hypervisor) فقط در محیط های مهمان از لینوکس پشتیبانی می کرد، اما خود هایپروایزر از یک محیط مبتنی بر ویندوز کنترل می شد.
    • اضافه شدن پشتیبانی از رمزگذاری درون خطی برای کارت‌های 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 اضافه شده است. پشتیبانی از شبیه‌سازی نرم‌افزاری اتصال و قطع اتصال کانکتور صوتی برای رفع اشکال هندلرها در فضای کاربر پیاده‌سازی شده است.
    • پشتیبانی اضافه شده برای کنسول های بازی Nintendo 64 تولید شده از سال 1996 تا 2003 (تلاش های گذشته برای پورت لینوکس به Nintendo 64 تکمیل نشد و به عنوان 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

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