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

پس از دو ماه توسعه، لینوس توروالدز معرفی شده انتشار هسته لینوکس 5.8. از جمله قابل توجه ترین تغییرات: آشکارساز وضعیت مسابقه KCSAN، مکانیزم جهانی برای ارسال اعلان ها به فضای کاربر، پشتیبانی سخت افزاری برای رمزگذاری درون خطی، مکانیسم های امنیتی پیشرفته برای ARM64، پشتیبانی از پردازنده روسی Baikal-T1، قابلیت نصب جداگانه نمونه های procfs ، پیاده سازی مکانیسم های امنیتی Shadow برای ARM64 Call Stack و BTI.

کرنل 5.8 از نظر تعداد تغییرات تمام کرنل ها در طول کل پروژه بزرگترین شد. علاوه بر این، تغییرات مربوط به هیچ یک از زیرسیستم ها نیست، بلکه بخش های مختلف هسته را پوشش می دهد و عمدتاً با دوباره کاری و تمیز کردن داخلی مرتبط است. بزرگترین تغییرات در درایورها دیده می شود. نسخه جدید شامل 17606 اصلاحات از 2081 توسعه دهنده بود که تقریباً 20٪ از تمام فایل های موجود در مخزن کد هسته را تحت تأثیر قرار داد. اندازه پچ 65 مگابایت است (تغییرات روی 16180 فایل تأثیر گذاشت، 1043240 خط کد اضافه شد، 489854 خط حذف شد). در مقام مقایسه، شعبه 5.7 دارای 15033 اصلاح و اندازه پچ 39 مگابایت بود. حدود 37٪ از کل تغییرات معرفی شده در 5.8 مربوط به درایورهای دستگاه، تقریبا 16٪ از تغییرات مربوط به به روز رسانی کدهای خاص معماری سخت افزار، 11٪ مربوط به پشته شبکه، 3٪ مربوط به سیستم های فایل و 4٪ است. مربوط به زیرسیستم های هسته داخلی هستند.

اصلی نوآوری ها:

  • مجازی سازی و امنیت
    • بارگذاری ماژول های هسته که دارای بخش هایی با کد هستند که در آن بیت هایی که امکان اجرا و نوشتن را به طور همزمان تنظیم می کنند، ارائه می شود. این تغییر به عنوان بخشی از یک پروژه بزرگتر برای خلاص کردن هسته از استفاده از صفحات حافظه که امکان اجرا و نوشتن همزمان را فراهم می کند، اجرا شد.
    • اکنون می‌توان نمونه‌های جداگانه procfs ایجاد کرد که امکان استفاده از چندین نقطه mount procfs را فراهم می‌کند که با گزینه‌های مختلف نصب شده‌اند، اما فضای نام شناسه فرآیند یکسانی (فضای نام pid) را منعکس می‌کنند. قبلاً، تمام نقاط نصب procfs فقط یک نمایش داخلی را منعکس می‌کردند، و هر تغییری در پارامترهای mount روی سایر نقاط اتصال مرتبط با فضای نام شناسه فرآیند مشابه تأثیر می‌گذاشت. از جمله زمینه هایی که ممکن است نصب با گزینه های مختلف مورد تقاضا باشد، اجرای جداسازی سبک برای سیستم های تعبیه شده با قابلیت پنهان کردن انواع خاصی از فرآیندها و گره های اطلاعاتی در procfs است.
    • پشتیبانی از مکانیزم برای پلتفرم ARM64 اجرا شده است
      پشته Shadow-Callارائه شده توسط کامپایلر Clang برای محافظت در برابر بازنویسی آدرس برگشتی یک تابع در صورت سرریز شدن بافر پشته. ماهیت حفاظت این است که پس از انتقال کنترل به یک تابع و بازیابی این آدرس قبل از خروج از تابع، آدرس بازگشتی را در یک پشته "سایه" جداگانه ذخیره کنید.

    • پشتیبانی دستورالعمل برای پلتفرم ARM64 اضافه شده است ARMv8.5-BTI (شاخص هدف شاخه) برای محافظت از اجرای مجموعه دستورالعمل هایی که نباید به آنها منشعب شود. مسدود کردن انتقال به بخش‌های دلخواه کد برای جلوگیری از ایجاد ابزارهایی در اکسپلویت‌هایی که از تکنیک‌های برنامه‌نویسی بازگشت‌گرا استفاده می‌کنند، پیاده‌سازی می‌شود (ROP - برنامه‌نویسی بازگشت‌گرا؛ مهاجم سعی نمی‌کند کد خود را در حافظه قرار دهد، بلکه روی قطعات موجود کار می‌کند. دستورالعمل‌های ماشینی که با یک دستورالعمل کنترل بازگشت پایان می‌یابند، که از آن زنجیره‌ای از فراخوان‌ها برای دستیابی به عملکرد مورد نظر ساخته می‌شود).
    • اضافه شدن پشتیبانی سخت افزاری برای رمزگذاری درون خطی دستگاه های بلوک (رمزگذاری درون خطی). دستگاه‌های رمزگذاری درون خطی معمولاً در درایو تعبیه شده‌اند، اما به طور منطقی بین حافظه سیستم و دیسک قرار می‌گیرند و I/O را بر اساس کلیدهای مشخص شده توسط هسته و الگوریتم رمزگذاری به طور شفاف رمزگذاری و رمزگشایی می‌کنند.
    • گزینه خط فرمان "initrdmem" کرنل را اضافه کرد تا به شما امکان دهد آدرس حافظه فیزیکی initrd را هنگام قرار دادن تصویر اولیه بوت در RAM مشخص کنید.
    • اضافه شدن قابلیت جدید: CAP_PERFMON برای دسترسی به زیرسیستم perf و انجام نظارت بر عملکرد. CAP_BPF، که به برخی عملیات BPF اجازه می دهد (مانند بارگیری برنامه های BPF) که قبلاً به حقوق CAP_SYS_ADMIN نیاز داشتند (حقوق CAP_SYS_ADMIN اکنون به ترکیبی از CAP_BPF، CAP_PERFMON، و CAP_NET_ADMIN تقسیم شده است).
    • اضافه شده یک دستگاه virtio-mem جدید که به شما امکان می‌دهد حافظه را به سیستم‌های مهمان متصل و داغ کنید.
    • در صورتی که درایور دستگاه از نواحی حافظه همپوشانی استفاده کند، عملیات نگاشت در /dev/mem را فراخوانی کرد.
    • حفاظت از آسیب پذیری اضافه شده است CROSSTalk/SRBDS، که به شما امکان می دهد نتایج اجرای برخی دستورالعمل های اجرا شده بر روی یک هسته CPU دیگر را بازیابی کنید.
  • خدمات حافظه و سیستم
    • در سندی که قوانین قالب بندی کد را تعریف می کند، پذیرفته شده توصیه هایی برای استفاده از اصطلاحات فراگیر به توسعه دهندگان توصیه نمی شود از ترکیبات "master / slave" و "blacklist / whitelist" و همچنین کلمه "slave" به طور جداگانه استفاده کنند. توصیه ها فقط به استفاده های جدید از این اصطلاحات مربوط می شود. ذکر کلمات مشخص شده از قبل در هسته وجود دارد دست نخورده باقی می ماند. در کد جدید، استفاده از اصطلاحات علامت‌گذاری شده در صورت نیاز برای پشتیبانی از API و ABI در معرض فضای کاربر، و همچنین هنگام به‌روزرسانی کد برای پشتیبانی از سخت‌افزار یا پروتکل‌های موجود که مشخصات آن مستلزم استفاده از عبارات خاصی است، مجاز است.
    • ابزار اشکال زدایی گنجانده شده است KCSAN (کرنل Concurrency Sanitizer)، طراحی شده برای تشخیص پویا شرایط مسابقه داخل هسته استفاده از KCSAN هنگام ساخت در GCC و Clang پشتیبانی می‌شود و در زمان کامپایل برای ردیابی دسترسی به حافظه نیاز به تغییرات خاصی دارد (نقاط شکستی استفاده می‌شوند که هنگام خواندن یا اصلاح حافظه فعال می‌شوند). تمرکز توسعه KCSAN بر پیشگیری مثبت کاذب، مقیاس پذیری و سهولت استفاده بود.
    • اضافه مکانیزم جهانی ارسال اعلان ها از هسته به فضای کاربر. این مکانیزم مبتنی بر درایور لوله استاندارد است و به شما امکان می دهد اعلان ها را از هسته در کانال های باز در فضای کاربر به طور موثر توزیع کنید. نقاط دریافت اعلان لوله هایی هستند که در حالت خاصی باز می شوند و اجازه می دهند پیام های دریافتی از هسته در یک بافر حلقه جمع شوند. خواندن توسط تابع read() معمولی انجام می شود. مالک کانال تعیین می کند که کدام منابع در هسته باید نظارت شوند و می تواند فیلتری برای نادیده گرفتن انواع خاصی از پیام ها و رویدادها تعریف کند. از میان رویدادها، در حال حاضر فقط عملیات با کلیدها پشتیبانی می شود، مانند افزودن/حذف کلیدها و تغییر ویژگی های آنها. این رویدادها برای استفاده در GNOME برنامه ریزی شده است.
    • توسعه مداوم عملکرد "pidfd" برای کمک به مدیریت موقعیت‌های استفاده مجدد از PID (pidfd با یک فرآیند خاص مرتبط است و تغییر نمی‌کند، در حالی که یک PID می‌تواند پس از پایان فرآیند فعلی مرتبط با آن PID با فرآیند دیگری مرتبط شود). نسخه جدید پشتیبانی از استفاده از pidfd برای پیوست کردن یک فرآیند به فضاهای نام را اضافه می‌کند (به اجازه می‌دهد pidfd هنگام اجرای فراخوانی سیستمی setns مشخص شود). استفاده از pidfd به شما این امکان را می‌دهد تا با یک تماس، پیوست یک فرآیند را به چندین نوع فضای نام کنترل کنید، تعداد تماس‌های سیستمی لازم را به میزان قابل توجهی کاهش دهید و پیوست را در حالت اتمی پیاده‌سازی کنید (اگر پیوست به یکی از فضای نام‌ها ناموفق باشد، بقیه وصل نمی‌شوند) .
    • یک فراخوانی سیستم جدید ()faccessat2 اضافه شد، متفاوت از
      faccessat() یک آرگومان اضافی با پرچم‌هایی که با توصیه‌های POSIX مطابقت دارند (قبلاً این پرچم‌ها در کتابخانه C شبیه‌سازی می‌شدند و faccessat2 جدید به آنها اجازه می‌دهد در هسته پیاده‌سازی شوند).

    • در Cgroup اضافه یک تنظیم memory.swap.high که می تواند برای کاهش سرعت کارهایی که فضای مبادله زیادی را اشغال می کنند استفاده شود.
    • به رابط ورودی/خروجی ناهمزمان io_uring پشتیبانی از تماس سیستم () tee اضافه شده است.
    • مکانیسم اضافه شده "تکرار کننده BPFطراحی شده برای خروجی محتوای ساختارهای هسته به فضای کاربر.
    • ارائه شده است توانایی استفاده از بافر حلقه برای تبادل داده بین برنامه های BPF.
    • به مکانیسم داده ها، طراحی شده برای سازماندهی اجرای موازی وظایف در هسته، پشتیبانی از وظایف چند رشته ای با تعادل بار را اضافه کرد.
    • در مکانیسم pstore، که به شما امکان می دهد اطلاعات اشکال زدایی در مورد علت خرابی را در مناطق حافظه که بین راه اندازی مجدد از بین نمی روند، ذخیره کنید. اضافه پشتیبان برای ذخیره اطلاعات برای مسدود کردن دستگاه ها.
    • از شاخه هسته PREEMPT_RT نقل مکان کرد اجرای قفل های محلی
    • اضافه API تخصیص بافر جدید (AF_XDP)، با هدف ساده‌سازی نوشتن درایورهای شبکه با پشتیبانی از XDP (مسیر داده eXpress).
    • برای معماری RISC-V، پشتیبانی از اشکال زدایی اجزای هسته با استفاده از KGDB اجرا شده است.
    • قبل از انتشار نسخه 4.8، الزامات نسخه GCC که می تواند برای ساخت هسته استفاده شود افزایش یافته است. در یکی از نسخه های بعدی، قرار است تا سطح GCC 4.9 افزایش یابد.
  • زیرسیستم دیسک، I/O و سیستم های فایل
    • در Device Mapper اضافه کنترل‌کننده جدید dm-ebs (تقلید اندازه بلوک)، که می‌تواند برای شبیه‌سازی اندازه بلوک منطقی کوچک‌تر (مثلاً برای شبیه‌سازی بخش‌های 512 بایتی در دیسک‌های با اندازه بخش 4K) استفاده شود.
    • سیستم فایل F2FS اکنون از فشرده سازی با استفاده از الگوریتم LZO-RLE پشتیبانی می کند.
    • در dm-crypt اضافه پشتیبانی از کلیدهای رمزگذاری شده
    • Btrfs مدیریت عملیات خواندن در حالت I/O مستقیم را بهبود بخشیده است. هنگام نصب شتاب گرفت بررسی زیربخش ها و دایرکتوری های حذف شده بدون والد.
    • یک پارامتر "nodelete" به CIFS اضافه شده است که اجازه می دهد تا مجوزهای معمولی روی سرور بررسی شود، اما مشتری را از حذف فایل ها یا دایرکتوری ها منع می کند.
    • Ext4 مدیریت خطا را بهبود بخشیده است ENOSPC هنگام استفاده از multithreading xattr پشتیبانی از فضای نام gnu.* مورد استفاده در گنو هرد اضافه کرده است.
    • برای Ext4 و XFS، پشتیبانی از عملیات DAX (دسترسی مستقیم به سیستم فایل، دور زدن حافظه پنهان صفحه بدون استفاده از سطح دستگاه بلوک) در رابطه با فایل ها و دایرکتوری های فردی فعال است.
    • در تماس سیستمی statx() پرچم اضافه شد STATX_ATTR_DAX، که در صورت مشخص شدن، اطلاعات را با استفاده از موتور DAX بازیابی می کند.
    • EXFAT اضافه پشتیبانی از تأیید ناحیه بوت
    • در چربی بهبود یافته بارگذاری فعال عناصر FS آزمایش یک درایو USB آهسته 2 ترابایتی نشان داد که زمان اتمام آزمایش از 383 به 51 ثانیه کاهش یافته است.
  • زیر سیستم شبکه
    • در کد کنترل عملکرد پل های شبکه اضافه پشتیبانی از پروتکل MRP (پروتکل افزونگی رسانه)، که امکان تحمل خطا را با حلقه کردن چندین سوئیچ اترنت فراهم می کند.
    • سیستم کنترل تردد (Tc) اضافه اقدام جدید "دروازه"، که امکان تعریف بازه های زمانی برای پردازش و دور انداختن بسته های خاص را فراهم می کند.
    • پشتیبانی برای آزمایش کابل شبکه متصل و خود عیب‌یابی دستگاه‌های شبکه به هسته و ابزار ethtool اضافه شده است.
    • پشتیبانی از الگوریتم MPLS (Multiprotocol Label Switching) به پشته IPv6 برای مسیریابی بسته ها با استفاده از سوئیچینگ برچسب چند پروتکلی اضافه شده است (MPLS قبلاً برای IPv4 پشتیبانی می شد).
    • اضافه شدن پشتیبانی برای انتقال بسته های IKE (مبادله کلید اینترنت) و IPSec از طریق TCP (RFC 8229) برای دور زدن مسدود کردن احتمالی UDP.
    • اضافه شده دستگاه بلوک شبکه rnbd، که به شما امکان می دهد با استفاده از حمل و نقل RDMA (InfiniBand، RoCE، iWARP) و پروتکل RTRS، دسترسی از راه دور به یک دستگاه بلوک را سازماندهی کنید.
    • در پشته TCP اضافه پشتیبانی از فشرده سازی محدوده در پاسخ های تایید انتخابی (SACK).
    • برای IPv6 اجرا شد پشتیبانی از TCP-LD (RFC 6069، اختلالات طولانی مدت اتصال).
  • Оборудование
    • درایور DRM i915 برای کارت های ویدئویی اینتل به طور پیش فرض از تراشه های اینتل Tiger Lake (GEN12) پشتیبانی می کند که برای آن اجرا شد توانایی استفاده از سیستم SAGV (System Agent Geyserville) برای تنظیم پویا فرکانس و ولتاژ بسته به مصرف برق یا نیازهای عملکرد.
    • درایور amdgpu پشتیبانی از فرمت پیکسل FP16 و توانایی کار با بافرهای رمزگذاری شده در حافظه ویدیویی (TMZ، Trusted Memory Zone) را اضافه کرده است.
    • پشتیبانی از سنسورهای قدرت برای پردازنده های AMD Zen و Zen2 و همچنین سنسورهای دما برای AMD Ryzen 4000 Renoir اضافه شده است. پشتیبانی از بازیابی اطلاعات مصرف انرژی از طریق رابط برای AMD Zen و Zen2 ارائه شده است RAPL (اجرای حد متوسط ​​توان).
    • پشتیبانی از فرمت اصلاح کننده NVIDIA به درایور Nouveau اضافه شده است. برای gv100، قابلیت استفاده از حالت های اسکن در هم تعبیه شده است. تعریف vGPU اضافه شد.
    • پشتیبانی از پردازنده‌های گرافیکی Adreno A405، A640 و A650 به درایور MSM (کوالکام) اضافه شده است.
    • اضافه چارچوب داخلی برای مدیریت منابع DRM (مدیر رندر مستقیم).
    • پشتیبانی از گوشی‌های هوشمند Xiaomi Redmi Note 7 و Samsung Galaxy S2 و همچنین لپ‌تاپ‌های Elm/Hana Chromebook اضافه شده است.
    • درایورهای اضافه شده برای پنل های LCD: ASUS TM5P5 NT35596، Starry KR070PE2T، Leadtek LTK050H3146W، Visionox rm69299، Boe tv105wum-nw0.
    • پشتیبانی اضافه شده برای بردها و پلتفرم های ARM Renesas "RZ/G1H", Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino,OlinuXino.
      , Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI.

    • اضافه شدن پشتیبانی از پردازنده MIPS Loongson-2K (مخفف Loongson64). برای CPU Loongson 3، پشتیبانی از مجازی سازی با استفاده از هایپروایزر KVM اضافه شده است.
    • اضافه
      پشتیبانی از پردازنده روسی Baikal-T1 و سیستم روی تراشه مبتنی بر آن BE-T1000. پردازنده Baikal-T1 شامل دو هسته سوپراسکالر P5600 MIPS 32 r5 است که در فرکانس 1.2 گیگاهرتز کار می کنند. این تراشه حاوی حافظه نهان L2 (1 مگابایت)، کنترلر حافظه DDR3-1600 ECC، 1 پورت اترنت 10 گیگابایتی، 2 درگاه اترنت 1 گیگابایتی، کنترلر PCIe Gen.3 x4، 2 پورت SATA 3.0، USB 2.0، GPIO، UART، SPI، I2C است. این پردازنده پشتیبانی سخت افزاری را برای مجازی سازی، دستورالعمل های SIMD و یک شتاب دهنده رمزنگاری سخت افزاری یکپارچه که از GOST 28147-89 پشتیبانی می کند، فراهم می کند. این تراشه با استفاده از واحد هسته پردازنده MIPS32 P5600 Warrior با مجوز از Imagination Technologies توسعه یافته است.

در همان زمان، بنیاد نرم افزار آزاد آمریکای لاتین شکل گرفت
گزینه هسته کاملا رایگان 5.8 - Linux-libre 5.8-gnuپاک شده از عناصر سفت‌افزار و درایور حاوی اجزای غیر رایگان یا بخش‌های کد، که دامنه آن توسط سازنده محدود شده است. نسخه جدید بارگذاری حباب را در درایورهای Atom ISP Video، MediaTek 7663 USB/7915 PCIe، Realtek 8723DE WiFi، Renesas PCI xHCI، HabanaLabs Gaudi، مبدل نرخ نمونه ناهمزمان پیشرفته، Maxim Integrated MAX98390L، Maxim Integrated MAX38060L، AudioConnected Mix2L، غیرفعال می کند. ، و I86C EEPROM Slave. کد تمیز کردن لکه به روز شده در درایورها و زیرسیستم های Adreno GPU، HabanaLabs Goya، صفحه لمسی x6656، vtXNUMX و btbcm.

منبع: opennet.ru

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