
بر اساس گزارش فورونیکس، یکی از تغییرات متعدد زیرسیستم فایلسیستم مجازی (VFS) که برای هسته لینوکس ۷.۴ ادغام میشود، بستن همگام فایلها در فراخوانیهای close_range()، exec و exit است. این تغییر زمانی که نیاز به بستن تعداد زیادی توصیفگر فایل (File Descriptor) وجود دارد، تأخیر کمتری نسبت به وضعیت فعلی ایجاد میکند.
جزئیات تغییر در VFS
کریستین براونر (Christian Brauner) در درخواست ادغام (Pull Request) زیرسیستم VFS توضیح داده است که این مجموعه تغییرات، بستن فایلها را برای close_range()، exec و exit همگام میکند. این کار بر پایه برچسب vfs-7.4-rc1.close_range انجام شده و آن را در بر میگیرد.
پیشتر و در پی پیشنهادهای مختلف برای بستن فایلها پیش از تولید کوردامپ (coredump)، براونر روی بستن همگام توصیفگرهای فایل پیش از تولید کوردامپ کار کرده بود. در نتیجه نهایی، فایلها برای close_range()، exec و exit به صورت همگام بسته میشوند.
در توضیحات این درخواست ادغام آمده است که close_files()، close_range() و close-on-exec اکنون هر فایل را به صورت درونخطی (inline) تخلیه و آزاد میکنند، مشابه کاری که close(2) انجام میدهد. همچنین رشتههای هسته (Kernel Threads) از این تغییر تأثیر نمیپذیرند.
کاهش تأخیر در بستن توصیفگرهای فایل
این تغییرات روی یک ماشین مجازی KVM با ۶۴ پردازنده مجازی (vCPU) که روی سروری با پردازنده AMD EPYC اجرا میشود و تعداد متغیری توصیفگر فایل (FD) با موقعیتهای تصادفی در جدول FD دارد، کاهش چشمگیری در زمان صرفشده برای بستن آنها ایجاد کرده است.
- کاهش ۱۶ تا ۲۱ درصدی یا ۴۰ تا ۱۵۰ نانوثانیه به ازای هر فایل بستهشده
- بیشترین میزان کاهش در یک میلیون توصیفگر فایل رخ داده است
- با هشت فرایند که هر کدام همزمان ۶۵۵۳۶ توصیفگر را از بین میبرند، کاهش در محدوده ۱۶ تا ۲۱ درصد باقی میماند
- با ۳۲ یا ۶۴ فرایند، اختلاف به ۴ تا ۸ درصد کاهش مییابد
- فایلهایی که آزادسازی خودشان غالب است، سود کمتری میبرند: ۱۳ درصد برای eventfdها، ۱۱ درصد برای pipeها و ۶ درصد برای سوکتهای AF_UNIX
براونر توضیح داده است که با هشت فرایند، پیمایش دوم روی ۱۶ مگابایت از ساختار فایل (struct file) زمانی که پردازندهها برای حافظه نهان رقابت میکنند پرهزینه میشود. با ۳۲ یا ۶۴ فرایند نیز هر دو هسته با عبور میلیونها فایل از slab و RCU محدود میشوند و بنابراین اختلاف به ۴ تا ۸ درصد میرسد.
فراخوانی close(2) بدون تغییر مانده و نتیجه آزمون will-it-scale در محدوده ۲ درصد قرار دارد.
زمانبندی انتشار
این تغییر یکی از بهبودهای متعدد هسته در حال توسعه لینوکس ۷.۴ است. انتظار میرود نسخه پایدار لینوکس ۷.۴ حدود پایان دسامبر منتشر شود.