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

پس از دو ماه توسعه، لینوس توروالدز معرفی شده انتشار هسته لینوکس 5.7. از جمله قابل توجه ترین تغییرات: پیاده سازی جدید سیستم فایل exFAT، یک ماژول bareudp برای ایجاد تونل های UDP، حفاظت بر اساس احراز هویت اشاره گر برای ARM64، قابلیت اتصال برنامه های BPF به کنترل کننده های LSM، پیاده سازی جدید Curve25519، یک تقسیم آشکارساز قفل، سازگاری BPF با PREEMPT_RT، حذف محدودیت در اندازه خط 80 کاراکتری در کد، در نظر گرفتن نشانگرهای دمای CPU در زمان‌بندی وظیفه، امکان استفاده از clone() برای ایجاد فرآیندها در cgroup دیگر، محافظت در برابر نوشتن به حافظه با استفاده از userfaultfd.

نسخه جدید شامل 15033 اصلاحات از 1961 توسعه دهنده است.
اندازه پچ - 39 مگابایت (تغییر روی 11590 فایل، اضافه شدن 570560 خط کد،
297401 ردیف حذف شد). حدود 41٪ از همه ارائه شده در 5.7
تغییرات مربوط به درایورهای دستگاه است که تقریباً 16 درصد از تغییرات مربوط می شود
نگرش نسبت به به روز رسانی کدهای خاص معماری های سخت افزاری، 13%
مربوط به پشته شبکه، 4% به سیستم فایل و 4% به داخلی
زیر سیستم های هسته

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

  • زیرسیستم دیسک، I/O و سیستم های فایل
    • اضافه شدن اجرای جدید exFAT درایور، پایه بر اساس کد فعلی "sdfat" (2.x) که توسط سامسونگ برای گوشی های هوشمند اندرویدی خود توسعه داده است. درایوری که قبلاً به هسته اضافه شده بود بر اساس کد قدیمی سامسونگ (نسخه 1.2.9) بود و از نظر عملکرد حدود 10 درصد از درایور جدید عقب بود. به یاد بیاوریم که اضافه کردن پشتیبانی exFAT به هسته پس از مایکروسافت امکان پذیر شد опубликовала مشخصات عمومی و پتنت های exFAT را برای استفاده بدون حق امتیاز در لینوکس در دسترس قرار داد.
    • Btrfs یک دستور ioctl() جدید را پیاده سازی می کند - BTRFS_IOC_SNAP_DESTROY_V2، که به شما امکان می دهد یک زیربخش را با شناسه آن حذف کنید. پشتیبانی کامل از کلون سازی دامنه های درون خطی ارائه شده است. تعداد نقاط لغو برای عملیات توزیع مجدد افزایش یافته است، که باعث کاهش انتظارهای طولانی هنگام اجرای دستور "لغو تعادل" شده است. تعیین بک لینک ها تا حدودی تسریع شده است (مثلا زمان اجرای اسکریپت تست از یک ساعت به چند دقیقه کاهش یافته است). قابلیت پیوست فایل به هر ایند از درخت اضافه شده است. طرح مسدودسازی که هنگام نوشتن در پارتیشن‌های فرعی و حذف NOCOW استفاده می‌شود، دوباره طراحی شده است. بهره وری بهبود یافته اجرای fsync برای محدوده ها.
    • XFS بررسی ابرداده و fsck را برای پارتیشن‌های فعال بهبود داده است. کتابخانه ای برای بازسازی ساختارهای btree پیشنهاد شده است که در آینده برای بازسازی xfs_repair و پیاده سازی امکان بازیابی بدون نصب پارتیشن استفاده خواهد شد.
    • پشتیبانی آزمایشی برای قرار دادن پارتیشن swap در حافظه های SMB3 به CIFS اضافه شده است. پسوندهای POSIX را برای readdir، که در مشخصات SMB3.1.1 تعریف شده است، پیاده سازی کرد. عملکرد نوشتن بهبود یافته برای صفحات 64 کیلوبایتی زمانی که حافظه پنهان = حالت سختگیرانه فعال است و از نسخه های پروتکل 2.1+ استفاده می شود.
    • FS EXT4 از bmap و iopoll به iomap منتقل شده است.
    • F2FS پشتیبانی اختیاری را برای فشرده سازی داده ها با استفاده از الگوریتم zstd فراهم می کند. به طور پیش فرض، الگوریتم LZ4 برای فشرده سازی استفاده می شود. پشتیبانی از دستور "chattr -c commit" اضافه شد. نمایش زمان نصب ارائه شده است. ioctl F2FS_IOC_GET_COMPRESS_BLOCKS برای دریافت اطلاعات در مورد تعداد بلوک های فشرده اضافه شده است. اضافه شدن خروجی داده فشرده سازی از طریق statx.
    • سیستم فایل Ceph این قابلیت را اضافه کرده است که به صورت محلی عملیات ایجاد و حذف فایل (لغو پیوند) را بدون انتظار پاسخ از طرف سرور (کار در حالت ناهمزمان) انجام دهد. به عنوان مثال، این تغییر می تواند عملکرد را به طور قابل توجهی در هنگام اجرای ابزار rsync بهبود بخشد.
    • قابلیت استفاده از virtiofs به عنوان یک فایل سیستم سطح بالا به OVERLAYFS اضافه شده است.
    • بازنویسی شده است کد پیمایش مسیر در VFS، کد تجزیه پیوند نمادین مجدداً کار شده است و پیمایش نقطه اتصال یکپارچه شده است.
    • در زیر سیستم scsi به کاربران غیرمجاز مجاز است اجرای دستورات ZBC
    • در dm_writecache اجرا شد توانایی پاک کردن تدریجی کش بر اساس پارامتر max_age که حداکثر طول عمر یک بلوک را تعیین می کند.
    • در dm_integrity اضافه پشتیبانی از عملیات "رد کردن".
    • در null_blk اضافه پشتیبانی از جایگزینی خطا برای شبیه سازی خرابی ها در طول آزمایش.
    • اضافه توانایی ارسال اعلان‌های udev در مورد تغییرات اندازه دستگاه بلوک.
  • زیر سیستم شبکه
    • فیلتر نت گنجانده شده است تغییرات، سرعت پردازش لیست های بزرگ (مجموعه های nftables) را که نیاز به بررسی ترکیبی از زیرشبکه ها، پورت های شبکه، پروتکل و آدرس های MAC دارند، به طور قابل توجهی افزایش می دهد.
      بهینه سازی ها معرفی کرد به ماژول nft_set_pipapo (خط مشی‌های بسته PIle)، که مشکل تطبیق محتویات یک بسته با محدوده‌های حالت میدان دلخواه مورد استفاده در قوانین فیلتر کردن، مانند محدوده IP و پورت شبکه (nft_set_rbtree و nft_set_hash، تطبیق بازه‌ها و انعکاس مستقیم مقادیر را دستکاری می‌کند) را حل می‌کند. ). نسخه pipapo که با استفاده از دستورالعمل‌های AVX256 2 بیتی روی سیستمی با پردازنده AMD Epyc 7402 بردار شده است، هنگام تجزیه 420 هزار رکورد از جمله ترکیب‌های پورت-پروتکل، 30 درصد افزایش عملکرد را نشان داد. این افزایش هنگام مقایسه ترکیبی از یک زیرشبکه و یک شماره پورت هنگام تجزیه 1000 رکورد برای IPv87 4٪ و برای IPv128 6٪ بود.

    • اضافه ماژول bareudp، که به شما امکان می دهد پروتکل های L3 مختلف مانند MPLS، IP و NSH را در یک تونل UDP کپسوله کنید.
    • ادغام اجزای MPTCP (MultiPath TCP)، توسعه پروتکل TCP برای سازماندهی عملیات اتصال TCP با تحویل بسته ها به طور همزمان در طول چندین مسیر از طریق رابط های شبکه مختلف که به آدرس های IP مختلف گره خورده اند، ادامه یافته است.
    • اضافه پشتیبانی از مکانیسم های شتاب سخت افزاری برای محصور کردن فریم های اترنت در 802.11 (Wi-Fi).
    • هنگام انتقال یک دستگاه از یک فضای نام شبکه به فضای نام دیگر، حقوق دسترسی و مالکیت فایل های مربوطه در sysfs تنظیم می شود.
    • قابلیت استفاده از پرچم SO_BINDTODEVICE برای کاربران غیر روت اضافه شد.
    • بخش سوم وصله ها پذیرفته شده است، تبدیل جعبه ابزار ethtool از ioctl() به استفاده از رابط netlink. رابط جدید افزودن برنامه‌های افزودنی را آسان‌تر می‌کند، مدیریت خطا را بهبود می‌بخشد، اجازه می‌دهد اعلان‌ها هنگام تغییر حالت ارسال شوند، تعامل بین هسته و فضای کاربر را ساده‌تر می‌کند و تعداد لیست‌های نام‌گذاری‌شده را که نیاز به همگام‌سازی دارند، کاهش می‌دهد.
    • قابلیت استفاده از شتاب دهنده های سخت افزاری ویژه برای انجام عملیات ردیابی اتصال اضافه شده است.
    • در نت فیلتر اضافه یک قلاب برای اتصال طبقه‌بندی‌کننده‌های بسته‌های خروجی (خروج)، که مکمل قلاب قبلی موجود برای بسته‌های ورودی (ورودی) بود.
  • مجازی سازی و امنیت
    • اضافه شدن اجرای سخت افزاری احراز هویت اشاره گر (احراز هویت اشاره گر) که از دستورالعمل‌های تخصصی CPU ARM64 برای محافظت در برابر حملات با استفاده از تکنیک‌های برنامه‌نویسی بازگشت‌گرا (ROP) استفاده می‌کند، که در آن مهاجم سعی نمی‌کند کد خود را در حافظه قرار دهد، بلکه بر روی قطعاتی از دستورالعمل‌های ماشینی که قبلاً در کتابخانه‌های بارگذاری شده موجود است، کار می‌کند و به پایان می‌رسد. با یک دستورالعمل بازگشت کنترل. امنیت به استفاده از امضای دیجیتال برای تأیید آدرس های برگشتی در سطح هسته خلاصه می شود. امضا در بیت های بالای استفاده نشده خود اشاره گر ذخیره می شود. برخلاف پیاده سازی های نرم افزاری، ایجاد و تأیید امضای دیجیتال با استفاده از دستورالعمل های ویژه CPU انجام می شود.
    • اضافه توانایی محافظت از یک ناحیه حافظه از نوشتن با استفاده از فراخوانی سیستم ()userfaultfd، طراحی شده برای رسیدگی به خطاهای صفحه (دسترسی به صفحات حافظه تخصیص نشده) در فضای کاربر. ایده استفاده از userfaultfd() هم برای شناسایی نقض‌های دسترسی به صفحاتی که به‌عنوان محافظت شده از نوشتن علامت‌گذاری شده‌اند و هم برای فراخوانی کنترل‌کننده‌ای است که می‌تواند به چنین تلاش‌هایی برای نوشتن پاسخ دهد (به عنوان مثال، برای مدیریت تغییرات در طول ایجاد عکس‌های فوری از فرآیندهای در حال اجرا، وضعیت هنگام تخلیه حافظه به دیسک، اجرای حافظه مشترک، ردیابی تغییرات در حافظه، عکسبرداری کنید. عملکرد معادل با استفاده از mprotect() در ارتباط با کنترل کننده سیگنال SIGSEGV، اما به طور قابل توجهی سریعتر کار می کند.
    • SELinux پارامتر "checkreqprot" را منسوخ کرده است، که به شما امکان می دهد بررسی های محافظت از حافظه را هنگام پردازش قوانین غیرفعال کنید (استفاده از مناطق حافظه قابل اجرا، صرف نظر از قوانین مشخص شده در قوانین). سیملینک های Kernfs مجاز به ارث بردن زمینه دایرکتوری های والد خود هستند.
    • ساختار مشمول ماژول KRSI، که به شما امکان می دهد برنامه های BPF را به هر قلاب LSM در هسته متصل کنید. این تغییر به شما امکان می دهد ماژول های LSM (ماژول امنیتی لینوکس) را در قالب برنامه های BPF برای حل مشکلات حسابرسی و کنترل دسترسی اجباری ایجاد کنید.
    • انجام شد عملکرد /dev/random را با دسته‌بندی مقادیر CRNG به‌جای فراخوانی دستورالعمل‌های RNG به صورت جداگانه، بهینه می‌کند. بهبود عملکرد getrandom و /dev/random در سیستم‌های ARM64 که دستورالعمل‌های RNG را ارائه می‌کنند.
    • اجرای منحنی بیضوی Curve25519 جایگزین شده است برای گزینه ای از کتابخانه HACL، برای کدام داده شده اثبات ریاضی تأیید اعتبار رسمی
    • اضافه مکانیزم برای اطلاع رسانی در مورد صفحات حافظه آزاد. با استفاده از این مکانیسم، سیستم های مهمان می توانند اطلاعات صفحاتی را که دیگر استفاده نمی شوند به سیستم میزبان منتقل کنند و میزبان می تواند داده های صفحه را پس بگیرد.
    • در vfio/pci اضافه پشتیبانی از SR-IOV (مجازی سازی I/O تک ریشه).
  • خدمات حافظه و سیستم
    • از 80 تا 100 کاراکتر افزایش یافت محدودیت در حداکثر طول خط در متون مبدأ. در همان زمان، هنوز هم به توسعه دهندگان توصیه می شود که در هر خط 80 کاراکتر باقی بمانند، اما این دیگر محدودیت سختی نیست. علاوه بر این، تجاوز از محدودیت اندازه خط تنها در صورتی که چک وصله با گزینه '--strict' اجرا شود، منجر به هشدار ساخت می شود. این تغییر باعث می شود که حواس توسعه دهندگان پرت نشود دستکاری - اعمال نفوذ با فضاها و احساس آزادی بیشتر هنگام تراز کردن کد، و همچنین جلوگیری خواهد کرد خط شکنی بیش از حد، مزاحم درک کد و جستجو
    • اضافه پشتیبانی از حالت بوت مختلط EFI، که به شما امکان می دهد یک هسته 64 بیتی را از میان افزار 32 بیتی که روی یک CPU 64 بیتی اجرا می شود، بدون استفاده از بوت لودر تخصصی بارگذاری کنید.
    • مشمول سیستم شناسایی و اشکال زدایی قفل های تقسیم شده ("قفل تقسیم")، که هنگام دسترسی به داده های بدون تراز در حافظه رخ می دهد، زیرا هنگام اجرای یک دستورالعمل اتمی، داده ها از دو خط کش CPU عبور می کنند. چنین مسدودسازی منجر به عملکرد قابل توجهی می شود (1000 چرخه کندتر از یک عملیات اتمی روی داده هایی که به یک خط کش منفرد برخورد می کنند). بسته به پارامتر راه‌اندازی «split_lock_detect»، هسته می‌تواند چنین قفل‌هایی را در جریان تشخیص دهد و اخطارهایی صادر کند یا سیگنال SIGBUS را به برنامه‌ای که باعث قفل می‌شود ارسال کند.
    • زمانبندی کار ردیابی سنسورهای دما را فراهم می کند (فشار حرارتی) و با در نظر گرفتن گرمای بیش از حد هنگام قرار دادن کارها اجرا می شود. با استفاده از آمار ارائه شده، گاورنر حرارتی می تواند حداکثر فرکانس CPU را در هنگام گرم شدن بیش از حد تنظیم کند، و زمانبندی کار اکنون کاهش قدرت محاسباتی را به دلیل چنین کاهش فرکانس هنگام برنامه ریزی وظایف برای اجرا در نظر می گیرد (قبلا، زمانبند به تغییرات پاسخ می داد. در فرکانس با تاخیر مشخص، برای مدتی تصمیم گیری بر اساس فرضیات متورم در مورد منابع محاسباتی موجود).
    • زمانبندی کار شامل شاخص های ثابت ردیابی بار، به شما امکان می دهد بدون توجه به فرکانس فعلی CPU، بار را به درستی تخمین بزنید. این تغییر به شما امکان می دهد تا رفتار وظایف را در شرایط تغییرات دینامیکی در ولتاژ و فرکانس CPU با دقت بیشتری پیش بینی کنید. به عنوان مثال، کاری که 1/3 از منابع CPU را در 1000 مگاهرتز مصرف می کند، زمانی که فرکانس به 2 مگاهرتز کاهش می یابد، 3/500 از منابع را مصرف می کند، که قبلاً یک فرض نادرست ایجاد می کرد که با ظرفیت کامل کار می کرد (یعنی وظایف ظاهر شدند تنها با کاهش فرکانس نسبت به زمانبندی بزرگتر است، که منجر به اتخاذ تصمیمات نادرست در گاورنر schedutil cpufreq شد).
    • درایور اینتل P-state که وظیفه انتخاب حالت های عملکرد را بر عهده دارد، به حالت استفاده تغییر یافته است زمانبندی.
    • توانایی استفاده از زیرسیستم BPF زمانی که هسته در حال اجرا در زمان واقعی است (PREEMPT_RT) پیاده سازی شده است. قبلاً، وقتی PREEMPT_RT فعال بود، BPF باید غیرفعال شود.
    • نوع جدیدی از برنامه BPF اضافه شده است - BPF_MODIFY_RETURN، که می تواند به یک تابع در هسته متصل شود و مقدار بازگشتی توسط این تابع را تغییر دهد.
    • اضافه فرصت استفاده از فراخوانی سیستم ()clone3 برای ایجاد فرآیندی در یک cgroup متفاوت از cgroup والد، به فرآیند والد اجازه می دهد تا محدودیت ها را اعمال کند و حسابداری را بلافاصله پس از ایجاد یک فرآیند یا رشته جدید فعال کند. به عنوان مثال، یک مدیر سرویس می‌تواند مستقیماً سرویس‌های جدید را به cgroup‌های مجزا اختصاص دهد و فرآیندهای جدید، زمانی که در cgroup‌های "یخ زده" قرار می‌گیرند، بلافاصله متوقف می‌شوند.
    • در کی بیلد اضافه پشتیبانی از متغیر محیطی "LLVM=1" برای تغییر به جعبه ابزار Clang/LLVM هنگام ساخت هسته. الزامات نسخه binutils افزایش یافته است (2.23).
    • یک بخش /sys/kernel/debug/kunit/ به اشکال زدایی با نتایج تست های kunit اضافه شده است.
    • اضافه شدن پارامتر بوت هسته pm_debug_messages (مشابه /sys/power/pm_debug_messages)، که خروجی اطلاعات اشکال زدایی را در مورد عملکرد سیستم مدیریت انرژی فعال می کند (مفید هنگام اشکال زدایی مشکلات در حالت خواب زمستانی و آماده به کار).
    • به رابط ورودی/خروجی ناهمزمان io_uring پشتیبانی اضافه شد splice() и انتخاب بافر اتمی.
    • بهبود پروفایل cgroup با استفاده از جعبه ابزار perf. قبلاً، perf فقط می‌توانست وظایف را در یک cgroup مشخص نمایه کند و نمی‌توانست بفهمد نمونه فعلی متعلق به کدام cgroup است. perf اکنون اطلاعات cgroup را برای هر نمونه بازیابی می کند و به شما امکان می دهد بیش از یک cgroup را نمایه کنید و مرتب سازی بر اساس را اعمال کنید.
      cgroup در گزارش ها

    • cgroupfs، شبه FS برای مدیریت cgroup ها، پشتیبانی از ویژگی های توسعه یافته (xattrs) را اضافه کرده است، که به عنوان مثال، می توانید اطلاعات اضافی را برای کنترل کننده ها در فضای کاربر بگذارید.
    • در کنترلر حافظه cgroup اضافهو پشتیبانی از حفاظت بازگشتی از مقدار "memory.low" که حداقل مقدار RAM ارائه شده به اعضای گروه را تنظیم می کند. هنگام نصب یک سلسله مراتب cgroup با گزینه "memory_recursiveprot"، مقدار "memory.low" که برای گره های پایینی تنظیم شده است به طور خودکار در تمام گره های فرزند توزیع می شود.
    • اضافه چارچوب Uacce (چارچوب شتاب دهنده با دسترسی به فضای کاربر یکپارچه) برای به اشتراک گذاری آدرس های مجازی (SVA، آدرس دهی مجازی مشترک) بین CPU و دستگاه های جانبی، که به شتاب دهنده های سخت افزاری امکان دسترسی به ساختارهای داده در CPU اصلی را می دهد.
  • معماری های سخت افزاری
    • برای معماری ARM، قابلیت Hot-fetch حافظه پیاده سازی شده است.
    • برای معماری RISC-V، پشتیبانی از اتصال داغ و حذف CPU ها (CPU hotplug) اضافه شده است. برای RISC-V 32 بیتی، eBPF JIT پیاده سازی شده است.
    • امکان استفاده از سیستم های ARM 32 بیتی برای اجرای محیط های مهمان KVM حذف شده است.
    • پیاده سازی NUMA ساختگی برای معماری s390 حذف شد، که هیچ مورد استفاده ای برای دستیابی به بهبود عملکرد برای آن یافت نشد.
    • برای ARM64، پشتیبانی از افزونه AMU (واحد نظارت بر فعالیت) که در ARMv8.4 تعریف شده و شمارنده‌های عملکردی را ارائه می‌کند که برای محاسبه فاکتورهای اصلاح مقیاس فرکانس در زمان‌بندی کار استفاده می‌شوند، اضافه شده است.
  • Оборудование
    • اضافه پشتیبانی از دستگاه‌های vDPA که از کانال تبادل داده استفاده می‌کنند که با مشخصات virtio مطابقت دارد. دستگاه‌های vDPA می‌توانند تجهیزات متصل فیزیکی یا دستگاه‌های مجازی شبیه‌سازی شده نرم‌افزاری باشند.
    • در زیر سیستم GPIO ظاهر شد یک دستور جدید ioctl() برای نظارت بر تغییرات، که به شما امکان می دهد فرآیند را در مورد تغییرات در وضعیت هر خط GPIO اطلاع دهید. به عنوان مثال استفاده از دستور new پیشنهاد شده ابزار gpio-watch.
    • در درایور DRM i915 برای کارت های ویدئویی اینتل مشمول پشتیبانی پیش فرض از تراشه های Tigerlake ("Gen12") و پشتیبانی اولیه اضافه شده برای کنترل نور پس زمینه OLED. پشتیبانی بهبود یافته از تراشه های Ice Lake، Elkhart Lake، Baytrail و Haswell.
    • در درایور amdgpu اضافه توانایی بارگذاری سیستم عامل در تراشه USBC برای ASIC. پشتیبانی بهبود یافته از تراشه های AMD Ryzen 4000 "Renoir". اکنون پشتیبانی از کنترل پنل های OLED وجود دارد. نمایش وضعیت سیستم عامل در اشکال زدایی ارائه شده است.
    • قابلیت استفاده از OpenGL 4 در سیستم های مهمان به درایور vmwgfx DRM برای سیستم های مجازی سازی VMware اضافه شده است (قبلا OpenGL 3.3 پشتیبانی می شد).
    • نکات جدید درایور DRM برای سیستم نمایش پلت فرم TI Keystone اضافه شده است.
    • درایورهای اضافه شده برای پنل‌های LCD: Feixin K101 IM2BA02، Samsung s6e88a0-ams452ef01، Novatek NT35510، Elida KD35T133، EDT، NewEast Optoelectronics WJFH116008A، Rocktech II101D01CT.
    • به سیستم مدیریت انرژی اضافه پشتیبانی از پلتفرم اینتل جاسپر لیک (JSL) مبتنی بر اتم.
    • اضافه شدن پشتیبانی از لپ تاپ Pinebook Pro مبتنی بر Rockchip RK3399، تبلت Pine64 PineTab و گوشی هوشمند PinePhone بر اساس Allwinner A64.
    • پشتیبانی از کدک ها و تراشه های صوتی جدید اضافه شده است:
      Amlogic AIU، Amlogic T9015، Texas Instruments TLV320ADCX140، Realtek RT5682، ALC245، Broadcom BCM63XX I2S، Maxim MAX98360A، Presonus Studio 1810c، MOTU MicroBook IIc.

    • اضافه شدن پشتیبانی از بردها و پلتفرم های ARM Qualcomm Snapdragon 865 (SM8250)، IPQ6018، NXP i.MX8M Plus، Kontron "sl28"، 11 گزینه برد i.MX6 TechNexion Pico، سه گزینه جدید Toradex Colibri، Samsung S7710 مبتنی بر Galaxy Xco -Ericsson u2، DH Electronics DHCOM SoM and PDK8500، Renesas M2ULCB، Hoperun HiHope، Linutronix Testbox v3، PocketBook Touch Lux 2.

منبع: opennet.ru

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