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

پس از دو ماه توسعه، لینوس توروالدز نسخه 5.14 هسته لینوکس را ارائه کرد. از جمله قابل توجه ترین تغییرات: فراخوانی های سیستم جدید quotactl_fd() و memfd_secret()، حذف درایورهای ایده و خام، کنترل کننده اولویت ورودی/خروجی جدید برای cgroup، حالت زمان بندی وظایف SCHED_CORE، زیرساخت برای ایجاد بارکننده های برنامه تایید شده BPF.

نسخه جدید شامل 15883 اصلاحات از 2002 توسعه دهنده است، اندازه پچ 69 مگابایت است (تغییرات روی 12580 فایل تأثیر گذاشت، 861501 خط کد اضافه شد، 321654 خط حذف شد). حدود 47% از کل تغییرات معرفی شده در 5.14 مربوط به درایورهای دستگاه، تقریباً 14% تغییرات مربوط به به روز رسانی کدهای خاص معماری سخت افزار، 13% مربوط به پشته شبکه، 3% مربوط به سیستم های فایل و 3% است. مربوط به زیرسیستم های هسته داخلی هستند.

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

  • زیرسیستم دیسک، I/O و سیستم های فایل
    • یک کنترل‌کننده اولویت‌بندی ورودی/خروجی جدید برای cgroups به نام rq-qos پیاده‌سازی شده است که می‌تواند اولویت پردازش درخواست‌ها را برای مسدود کردن دستگاه‌های تولید شده توسط اعضای هر cgroup کنترل کند. پشتیبانی کنترل‌کننده اولویت جدید به زمان‌بندی ورودی/خروجی mq-deadline اضافه شده است.
    • سیستم فایل ext4 یک دستور ioctl جدید به نام EXT4_IOC_CHECKPOINT را پیاده‌سازی می‌کند که تمام تراکنش‌های معلق از ژورنال و بافرهای مرتبط با آنها را وادار می‌کند تا روی دیسک ریخته شوند و همچنین ناحیه مورد استفاده مجله در ذخیره‌سازی را بازنویسی می‌کند. این تغییر به عنوان بخشی از ابتکار عمل برای جلوگیری از نشت اطلاعات از سیستم های فایل تهیه شده است.
    • بهینه‌سازی عملکرد برای Btrfs انجام شده است: با حذف گزارش‌های غیرضروری از ویژگی‌های توسعه‌یافته در طول اجرای fsync، عملکرد عملیات فشرده با ویژگی‌های توسعه‌یافته تا ۱۷ درصد افزایش یافته است. علاوه بر این، هنگام انجام عملیات برش که بر گستره‌ها تأثیر نمی‌گذارد، همگام‌سازی کامل غیرفعال می‌شود که زمان عملیات را تا 17 درصد کاهش می‌دهد. تنظیمی برای محدود کردن پهنای باند I/O هنگام بررسی FS به sysfs اضافه شده است. تماس‌های ioctl برای لغو تغییر اندازه و حذف عملیات دستگاه اضافه شده است.
    • در XFS، اجرای حافظه پنهان بافر دوباره طراحی شده است، که به تخصیص صفحات حافظه در حالت دسته ای تغییر یافته است. بهره وری کش بهبود یافته است.
    • F2FS گزینه ای برای عملکرد در حالت فقط خواندنی اضافه می کند و یک حالت حافظه پنهان بلوک فشرده (compress_cache) را برای بهبود عملکرد خواندن تصادفی پیاده سازی می کند. پشتیبانی برای فشرده سازی فایل های نگاشت شده به حافظه با استفاده از عملیات mmap() پیاده سازی شده است. برای غیرفعال کردن انتخابی فشرده سازی فایل بر اساس یک ماسک، یک گزینه mount جدید nocompress پیشنهاد شده است.
    • کار در درایور exFAT برای بهبود سازگاری با برخی از حافظه های دوربین دیجیتال انجام شده است.
    • فراخوانی سیستم quotactl_fd() اضافه شده است که به شما امکان می دهد سهمیه ها را نه از طریق یک فایل دستگاه خاص، بلکه با تعیین یک توصیفگر فایل مرتبط با سیستم فایلی که سهمیه برای آن اعمال می شود، مدیریت کنید.
    • درایورهای قدیمی برای دستگاه‌های بلوک با رابط IDE از هسته حذف شده‌اند؛ مدت‌هاست که با زیرسیستم لیباتا جایگزین شده‌اند.
    • درایور خام از هسته حذف شده است و دسترسی بدون بافر به دستگاه‌های مسدود شده از طریق رابط /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 را اضافه کرده است تا در تمام صفحات حافظه‌ای که برای عملیات خواندن یا نوشتن نقشه‌برداری شده‌اند، بدون انجام خواندن یا نوشتن، یک "صفحه صفحه" ایجاد کند. (پیش فرض). استفاده از پرچم‌ها می‌تواند برای کاهش تأخیر در اجرای برنامه مفید باشد، زیرا به‌دلیل اجرای فعال کنترل‌کننده «page fault» برای همه صفحات تخصیص‌نشده به‌طور هم‌زمان، بدون انتظار برای دسترسی واقعی به آن‌ها.
    • سیستم تست واحد kunit پشتیبانی از اجرای تست ها در محیط QEMU را اضافه کرده است.
    • ردیاب‌های جدیدی اضافه شده‌اند: «osnoise» برای ردیابی تأخیرهای برنامه ناشی از مدیریت وقفه، و «timerlat» برای نمایش اطلاعات دقیق در مورد تأخیرها هنگام بیدار شدن از سیگنال تایمر.
  • مجازی سازی و امنیت
    • فراخوانی سیستم ()memfd_secret برای ایجاد یک ناحیه حافظه خصوصی در یک فضای آدرس ایزوله، اضافه شده است که فقط برای فرآیند مالک قابل مشاهده است، برای سایر فرآیندها منعکس نمی شود و مستقیماً برای هسته قابل دسترسی نیست.
    • در سیستم فیلتر تماس سیستم seccomp، هنگام جابجایی کنترل‌کننده‌های مسدودکننده به فضای کاربر، می‌توان از یک عملیات اتمی برای ایجاد یک توصیفگر فایل برای یک کار مجزا استفاده کرد و آن را هنگام پردازش یک تماس سیستمی برگرداند. عملیات پیشنهادی مشکل قطع یک کنترل کننده در فضای کاربر را هنگام رسیدن سیگنال حل می کند.
    • مکانیسم جدیدی برای مدیریت محدودیت‌های منابع در فضای نام شناسه کاربر اضافه شده است که شمارنده‌های محدود محدود را به یک کاربر در "فضای نام کاربری" متصل می‌کند. این تغییر مشکل استفاده از شمارنده های منابع رایج را زمانی که یک کاربر فرآیندها را در کانتینرهای مختلف اجرا می کند، حل می کند.
    • هایپروایزر KVM برای سیستم‌های ARM64 قابلیت استفاده از پسوند MTE (MemTag، Memory Tagging Extension) را در سیستم‌های مهمان اضافه کرده است که به شما امکان می‌دهد برچسب‌ها را به هر عملیات تخصیص حافظه متصل کنید و بررسی استفاده صحیح از اشاره‌گرها را برای جلوگیری از بهره‌برداری سازماندهی کنید. آسیب‌پذیری‌های ناشی از دسترسی به بلوک‌های حافظه آزاد شده، بافر سرریز، دسترسی‌های قبل از مقداردهی اولیه و استفاده خارج از زمینه فعلی.
    • امکانات احراز هویت اشاره گر پلت فرم ARM64 اکنون می تواند به طور جداگانه برای هسته و فضای کاربر پیکربندی شود. این فناوری به شما امکان می دهد از دستورالعمل های تخصصی ARM64 برای تأیید آدرس های برگشتی با استفاده از امضاهای دیجیتالی که در بیت های بالای استفاده نشده خود اشاره گر ذخیره می شوند، استفاده کنید.
    • لینوکس حالت کاربر پشتیبانی برای استفاده از درایورهای دستگاه های PCI با گذرگاه PCI مجازی را اضافه کرده است که توسط درایور PCI-over-virtio پیاده سازی شده است.
    • برای سیستم‌های x86، پشتیبانی از دستگاه paravirtualized virtio-iommu اضافه شده است که به درخواست‌های IOMMU مانند ATTACH، DETACH، MAP و UNMAP اجازه می‌دهد بدون شبیه‌سازی جداول صفحه حافظه از طریق انتقال virtio ارسال شوند.
    • برای پردازنده‌های اینتل، از خانواده Skylake گرفته تا Coffee Lake، استفاده از Intel TSX (برنامه‌های افزودنی همگام‌سازی تعاملی) که ابزارهایی را برای بهبود عملکرد برنامه‌های چند رشته‌ای با حذف پویا عملیات همگام‌سازی غیرضروری فراهم می‌کند، به طور پیش‌فرض غیرفعال است. برنامه‌های افزودنی به دلیل احتمال حملات Zombieload که نشت اطلاعات را از طریق کانال‌های شخص ثالث که در حین عملکرد مکانیسم TAA (TSX Asynchronous Abort) رخ می‌دهد، دستکاری می‌کنند، غیرفعال می‌شوند.
  • زیر سیستم شبکه
    • ادغام در هسته MPTCP (MultiPath TCP)، توسعه پروتکل TCP برای سازماندهی عملیات اتصال TCP با تحویل بسته ها به طور همزمان در طول چندین مسیر از طریق رابط های شبکه مختلف مرتبط با آدرس های IP مختلف. نسخه جدید مکانیزمی را برای تنظیم خط‌مشی‌های درهم‌سازی ترافیک خود برای IPv4 و IPv6 اضافه می‌کند (خط‌مشی هش چند مسیری) و این امکان را فراهم می‌کند که از فضای کاربر تعیین کنید که کدام فیلدها در بسته‌ها، از جمله بسته‌های محصورشده، هنگام محاسبه هش که تعیین‌کننده انتخاب مسیر برای بسته
    • پشتیبانی از سوکت های SOCK_SEQPACKET (انتقال سفارشی و قابل اعتماد دیتاگرام ها) به انتقال مجازی virtio اضافه شده است.
    • قابلیت‌های مکانیزم سوکت 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 برای کارت های گرافیک اینتل شامل پشتیبانی از تراشه های Intel Alderlake P است.
    • درایور drm/hyperv برای آداپتور گرافیک مجازی Hyper-V اضافه شد.
    • پشتیبانی از رایانه همه کاره Raspberry Pi 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

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