پس از دو ماه توسعه، لینوس توروالدز معرفی شده انتشار هسته لینوکس 5.14. از جمله قابل توجه ترین تغییرات: فراخوانی های سیستم جدید quotactl_fd() و memfd_secret()، حذف درایورهای ایده و خام، کنترل کننده اولویت ورودی/خروجی جدید برای cgroup، حالت زمان بندی وظایف SCHED_CORE، زیرساخت برای ایجاد بارکننده های برنامه تایید شده BPF.
نسخه جدید شامل 15883 اصلاحات از 2002 توسعه دهنده است، اندازه پچ 69 مگابایت است (تغییرات روی 12580 فایل تأثیر گذاشت، 861501 خط کد اضافه شد، 321654 خط حذف شد). حدود 47% از کل تغییرات معرفی شده در 5.14 مربوط به درایورهای دستگاه، تقریباً 14% تغییرات مربوط به به روز رسانی کدهای خاص معماری سخت افزار، 13% مربوط به پشته شبکه، 3% مربوط به سیستم های فایل و 3% است. مربوط به زیرسیستم های هسته داخلی هستند.
- زیرسیستم دیسک، ورودی/خروجی و سیستم فایل:
- برای cgroup اجرا شد کنترل کننده اولویت ورودی/خروجی جدید - rq-qos، که می تواند اولویت پردازش درخواست ها را برای مسدود کردن دستگاه های تولید شده توسط اعضای هر cgroup کنترل کند. پشتیبانی کنترلکننده اولویت جدید به زمانبندی ورودی/خروجی mq-deadline اضافه شده است.
- در سیستم فایل ext4 اجرا شد دستور جدید ioctl EXT4_IOC_CHECKPOINT، که تمام تراکنشهای معلق را از لاگ و بافرهای مرتبط به دیسک مجبور میکند، و همچنین ناحیه مورد استفاده توسط لاگ در ذخیرهسازی را بازنویسی میکند. این تغییر به عنوان بخشی از ابتکار عمل برای جلوگیری از نشت اطلاعات از سیستم های فایل تهیه شده است.
- در Btrfs معرفی کرد بهینه سازی عملکرد: با حذف گزارش غیر ضروری از ویژگی های توسعه یافته در طول اجرای fsync، عملکرد عملیات فشرده با ویژگی های توسعه یافته تا 17٪ افزایش یافت. علاوه بر این، هنگام انجام عملیات برش که بر گسترهها تأثیر نمیگذارد، همگامسازی کامل غیرفعال میشود که زمان عملیات را تا 12 درصد کاهش میدهد. تنظیمی برای محدود کردن پهنای باند I/O هنگام بررسی FS به sysfs اضافه شده است. اضافه شدن تماسهای ioctl برای لغو تغییر اندازه و حذف عملیات دستگاه.
- در XFS دوباره کار کرد اجرای یک کش بافر، که به تخصیص صفحات حافظه در حالت دسته ای منتقل می شود. بهبود کارایی کش؛
- F2FS یک گزینه برای کار در حالت فقط خواندنی اضافه کرد و یک حالت ذخیره بلوک فشرده (compress_cache) را برای بهبود عملکرد خواندن تصادفی پیادهسازی کرد. پشتیبانی برای فشرده سازی فایل های نگاشت شده به حافظه با استفاده از عملیات mmap() پیاده سازی شده است. برای غیرفعال کردن انتخابی فشرده سازی فایل توسط ماسک، یک گزینه mount جدید nocompress پیشنهاد شده است.
- کار در درایور exFAT برای بهبود سازگاری با ذخیره سازی برخی از دوربین های دیجیتال انجام شده است.
- تماس سیستمی اضافه شد quotactl_fd()، که به شما امکان می دهد سهمیه ها را نه از طریق یک فایل دستگاه خاص، بلکه با تعیین یک توصیفگر فایل مرتبط با سیستم فایلی که سهمیه برای آن اعمال می شود، مدیریت کنید.
- درایورهای قدیمی برای دستگاههای بلوک با رابط IDE از هسته حذف شدهاند؛ مدتهاست که با زیرسیستم لیباتا جایگزین شدهاند. پشتیبانی از دستگاه های قدیمی به طور کامل حفظ شده است، تغییرات فقط مربوط به توانایی استفاده از درایورهای قدیمی است که در هنگام استفاده از آن ها درایوها /dev/hd* نامیده می شدند و نه /dev/sd*.
- درایور خام از هسته حذف شده است و دسترسی بدون بافر به دستگاه های مسدود شده از طریق رابط /dev/raw را فراهم می کند. این قابلیت برای مدت طولانی در برنامه هایی با استفاده از پرچم O_DIRECT پیاده سازی شده است.
- خدمات حافظه و سیستم:
- یک حالت زمانبندی جدید در زمانبندی کار پیاده سازی شده است SCHED_CORE، که به شما امکان می دهد کنترل کنید کدام فرآیندها می توانند با هم روی یک هسته CPU اجرا شوند. به هر فرآیند می توان یک شناسه کوکی اختصاص داد که محدوده اعتماد بین فرآیندها را مشخص می کند (به عنوان مثال، متعلق به همان کاربر یا ظرف). هنگام سازماندهی اجرای کد، زمانبند میتواند اطمینان حاصل کند که یک هسته CPU فقط در بین فرآیندهای مرتبط با مالک یکسان به اشتراک گذاشته شده است، که میتواند برای مسدود کردن برخی از حملات Spectre با جلوگیری از اجرای وظایف قابل اعتماد و غیرقابل اعتماد در یک رشته SMT (Hyper Threading) استفاده شود. ;
- برای مکانیسم cgroup، پشتیبانی از عملیات kill اجرا شده است، که به شما امکان می دهد با نوشتن "1" در فایل مجازی cgroup.kill، تمام فرآیندهای مرتبط با گروه را به یکباره بکشید (ارسال SIGKILL).
- قابلیت های گسترش یافته مربوط به پاسخ به تشخیص قفل های تقسیم شده ("قفل های تقسیم") که هنگام دسترسی به داده های بدون تراز در حافظه رخ می دهد، زیرا هنگام اجرای یک دستورالعمل اتمی، داده ها از دو خط کش CPU عبور می کنند. چنین مسدودسازی منجر به کاهش قابل توجهی در عملکرد می شود، بنابراین قبلاً ممکن بود به اجبار برنامه ای که باعث مسدود شدن شده است خاتمه داده شود. نسخه جدید پارامتر خط فرمان هسته "split_lock_detect=ratelimit:N" را اضافه می کند، که به شما امکان می دهد یک محدودیت در سطح سیستم را بر روی نرخ عملیات قفل کردن در ثانیه تعریف کنید، پس از تجاوز از آن، هر فرآیندی که منبع قفل تقسیم می شود، خواهد بود. مجبور شوید بهجای پایان دادن به 20 میلیثانیه توقف کنید.
- کنترلکننده پهنای باند cgroup CFS (کنترلکننده پهنای باند CFS)، که تعیین میکند چقدر زمان پردازشگر میتواند به هر cgroup اختصاص یابد، توانایی تعریف محدودیتهای محدود شده با مدت زمان معین را دارد، که اجازه تنظیم بهتر بارهای حساس به تأخیر را میدهد. برای مثال، تنظیم cpu.cfs_quota_us روی 50000 و cpu.cfs_period_us روی 100000 به گروهی از فرآیندها اجازه میدهد تا 100 میلیثانیه از زمان CPU را در هر 50 میلیثانیه تلف کنند.
- اضافه زیرساخت اولیه برای ایجاد بارگذارهای برنامه BPF، که بیشتر اجازه دانلود فقط برنامه های BPF امضا شده با یک کلید دیجیتال قابل اعتماد را می دهد.
- یک عملیات futex جدید FUTEX_LOCK_PI2 را اضافه کرد که از یک تایمر یکنواخت برای محاسبه بازه زمانی استفاده می کند که زمان صرف شده توسط سیستم در حالت خواب را در نظر می گیرد.
- برای معماری RISC-V، پشتیبانی از صفحات حافظه بزرگ (Transparent Huge-Pages) و توانایی استفاده از KFENCE برای شناسایی خطاها هنگام کار با حافظه؛
- در فراخوانی سیستم madvise() که وسیله ای برای بهینه سازی مدیریت حافظه پردازشی فراهم می کند، اضافه پرچمهای MADV_POPULATE_READ و MADV_POPULATE_WRITE برای ایجاد «عیب صفحه» در تمام صفحات حافظه که برای عملیات خواندن یا نوشتن نقشهبرداری شدهاند، بدون انجام خواندن یا نوشتن واقعی (پیشفرض). استفاده از پرچمها میتواند برای کاهش تأخیر در اجرای برنامه مفید باشد، به لطف اجرای فعال کنترلکننده «نقص صفحه» برای همه صفحات تخصیصنخورده یکباره، بدون انتظار برای دسترسی واقعی به آنها.
- در یک سیستم تست واحد kunit اضافه پشتیبانی از اجرای تست ها در محیط QEMU؛
- ردیاب های جدید اضافه شد:osnoise" برای ردیابی تاخیرهای برنامه ناشی از مدیریت وقفه و " timerlat " برای نمایش اطلاعات دقیق در مورد تاخیرها هنگام بیدار شدن از سیگنال تایمر.
- مجازی سازی و امنیت:
- اضافه تماس سیستمی memfd_secret()، که به شما امکان می دهد یک منطقه حافظه خصوصی در یک فضای آدرس ایزوله ایجاد کنید که فقط برای پردازش مالک قابل مشاهده است، در سایر فرآیندها منعکس نمی شود و مستقیماً برای هسته قابل دسترسی نیست.
- در سیستم فیلترینگ فراخوانی سیستم seccomp، هنگام جابجایی دستههای قفل به فضای کاربر، میتوان از یک عملیات اتمی برای ایجاد یک توصیفگر فایل برای یک کار مجزا استفاده کرد و آن را هنگام پردازش یک تماس سیستمی برگرداند. عملیات پیشنهادی حل می شود مسئله با قطع شدن کنترل کننده در فضای کاربر هنگام رسیدن سیگنال؛
- اضافه مکانیزم جدید برای مدیریت محدودیت منابع در فضای نام شناسه کاربر، که شمارنده های rlimit فردی را به یک کاربر در "فضای نام کاربری" متصل می کند. این تغییر مشکل استفاده از شمارنده های منابع رایج را زمانی که یک کاربر فرآیندها را در کانتینرهای مختلف اجرا می کند، حل می کند.
- هایپروایزر KVM برای سیستمهای ARM64 قابلیت استفاده از پسوند MTE (MemTag، Memory Tagging Extension) را در سیستمهای مهمان اضافه کرده است که به شما امکان میدهد برچسبها را به هر عملیات تخصیص حافظه متصل کنید و بررسی استفاده صحیح از اشارهگرها را برای جلوگیری از بهرهبرداری سازماندهی کنید. آسیبپذیریهای ناشی از دسترسی به بلوکهای حافظه آزاد شده، بافرهای سرریز، دسترسیهای قبل از مقداردهی اولیه و استفاده در خارج از زمینه فعلی؛
- Pointer Authentication ارائه شده توسط پلتفرم ARM64 اکنون می تواند به طور جداگانه برای هسته و فضای کاربر پیکربندی شود. این فناوری به شما امکان می دهد از دستورالعمل های تخصصی ARM64 برای تأیید آدرس های برگشتی با استفاده از امضاهای دیجیتالی که در بیت های بالای استفاده نشده خود اشاره گر ذخیره می شوند، استفاده کنید.
- در لینوکس حالت کاربر اضافه پشتیبانی از استفاده از درایورهای دستگاه های PCI با گذرگاه PCI مجازی، که توسط درایور PCI-over-virtio پیاده سازی شده است.
- برای سیستمهای x86، پشتیبانی از دستگاه paravirtualized virtio-iommu اضافه شده است که به شما امکان میدهد درخواستهای IOMMU، مانند ATTACH، DETACH، MAP و UNMAP را از طریق انتقال virtio بدون شبیهسازی جداول صفحه حافظه ارسال کنید.
- برای پردازندههای اینتل، از خانواده Skylake گرفته تا Coffee Lake، استفاده از Intel TSX (برنامههای افزودنی همگامسازی تعاملی) که ابزارهایی را برای بهبود عملکرد برنامههای چند رشتهای با حذف پویا عملیات همگامسازی غیرضروری فراهم میکند، به طور پیشفرض غیرفعال است. برنامه های افزودنی به دلیل احتمال حمله غیرفعال هستند بارگذاری زامبی، دستکاری نشت اطلاعات از طریق کانال های شخص ثالث که در حین عملکرد مکانیسم وقفه ناهمزمان عملیات (TAA، TSX Asynchronous Abort) رخ می دهد.
- زیر سیستم شبکه:
- ادغام مداوم در هسته MPTCP (MultiPath TCP)، توسعه پروتکل TCP برای سازماندهی عملیات اتصال TCP با تحویل بسته ها به طور همزمان در طول چندین مسیر از طریق رابط های شبکه مختلف مرتبط با آدرس های IP مختلف. در شماره جدید اضافه مکانیزمی برای تنظیم خطمشیهای درهمسازی ترافیک خود برای IPv4 و IPv6 (خطمشی هش چند مسیری)، که از فضای کاربر امکان میدهد تعیین کنید که کدام فیلدها در بستهها، از جمله بستههای کپسولهشده، هنگام محاسبه هش که انتخاب مسیر را تعیین میکند، استفاده میشود. برای بسته؛
- پشتیبانی از سوکت به Virtio حمل و نقل مجازی اضافه شده است sock_seqpacket (انتقال منظم و مطمئن دیتاگرام ها)؛
- قابلیتهای مکانیزم سوکت SO_REUSEPORT گسترش یافته است، که به چندین سوکت گوش دادن امکان میدهد به طور همزمان به یک پورت متصل شوند تا اتصالات را با توزیع درخواستهای ورودی به طور همزمان در تمام سوکتهای متصل از طریق SO_REUSEPORT دریافت کنند، که ایجاد برنامههای سرور چند رشتهای را ساده میکند. . در نسخه جدید اضافه وسیله ای برای انتقال کنترل به سوکت دیگر در صورت خرابی هنگام پردازش درخواست توسط سوکت اولیه انتخاب شده (مشکل از بین رفتن اتصالات فردی هنگام راه اندازی مجدد خدمات را حل می کند).
- تجهیزات:
- در درایور amdgpu اجرا شد پشتیبانی از سری جدید پردازندههای گرافیکی AMD Radeon RX 6000، با کد «Beige Goby» (Navi 24) و «Yellow Carp» و همچنین پشتیبانی بهبودیافته از GPU Aldebaran (gfx90a) و Van Gogh APU. قابلیت کار همزمان با چندین پنل eDP اضافه شده است. برای APU Renoir، پشتیبانی از کار با بافرهای رمزگذاری شده در حافظه ویدیویی (TMZ، Trusted Memory Zone) اجرا شده است. اضافه شدن پشتیبانی از کارتهای گرافیکی Hot-unplug. برای پردازندههای گرافیکی Radeon RX 6000 (Navi 2x) و پردازندههای گرافیکی قدیمیتر AMD، پشتیبانی از مکانیسم ذخیره انرژی ASPM (Active State Power Management) به طور پیشفرض فعال است، که قبلاً فقط برای پردازندههای گرافیکی Navi 1x، Vega و Polaris فعال بود.
- برای تراشه های AMD، پشتیبانی از حافظه مجازی مشترک (SVM، حافظه مجازی اشتراکی) بر اساس زیرسیستم HMM (مدیریت حافظه ناهمگن) اضافه شده است که امکان استفاده از دستگاه هایی با واحدهای مدیریت حافظه خود را (MMU، واحد مدیریت حافظه) فراهم می کند. که می تواند به حافظه اصلی دسترسی داشته باشد. از جمله استفاده از HMM، می توانید یک فضای آدرس مشترک بین GPU و CPU سازماندهی کنید که در آن GPU می تواند به حافظه اصلی فرآیند دسترسی داشته باشد.
- پشتیبانی فناوری اولیه اضافه شده است AMD Smart Shiftکه به صورت پویا پارامترهای مصرف انرژی CPU و GPU را در لپتاپهای دارای چیپست و کارت گرافیک AMD تغییر میدهد تا عملکرد هنگام بازی، ویرایش ویدیو و رندر سه بعدی را افزایش دهد.
- در درایور i915 برای کارت های ویدئویی اینتل مشمول پشتیبانی از تراشه های Alderlake P اینتل؛
- درایور drm/hyperv برای آداپتور گرافیک مجازی Hyper-V اضافه شده است.
- اضافه درایور گرافیک simpledrm که از فریم بافر EFI-GOP یا VESA ارائه شده توسط سیستم عامل UEFI یا BIOS برای خروجی استفاده می کند. هدف اصلی درایور ارائه قابلیتهای خروجی گرافیکی در مراحل اولیه بوت، قبل از استفاده از یک درایور کامل DRM است. درایور همچنین می تواند به عنوان یک راه حل موقت برای تجهیزاتی که هنوز درایورهای DRM بومی ندارند استفاده شود.
- اضافه پشتیبانی از کامپیوتر همه در یک تمشک پی 400;
- اضافه شدن درایور dell-wmi-privacy برای پشتیبانی از سوئیچهای سختافزاری دوربین و میکروفون موجود در لپتاپهای Dell.
- برای لپ تاپ های لنوو اضافه رابط WMI برای تغییر پارامترهای BIOS از طریق sysfs /sys/class/firmware-attributes/.
- منبسط پشتیبانی از دستگاه های دارای رابط USB4.
- اضافه پشتیبانی از کارت های صدا و کدک های AmLogic SM1 TOACODEC، Intel AlderLake-M، NXP i.MX8، NXP TFA1، TDF9897، Rockchip RK817، Qualcomm Quinary MI2 و Texas Instruments TAS2505. پشتیبانی صوتی بهبود یافته در لپ تاپ های HP و ASUS. اضافه وصلههایی برای کاهش تأخیر قبل از شروع پخش صدا در دستگاههای دارای رابط USB.
منبع – opennet.ru.
منبع: linux.org.ru