
به گزارش Phoronix، بهینهسازی تازهای در درایور FAT لینوکس ادغام شده که عملکرد FAT32 را در برخی شرایط تا ۱۶۲ برابر بهبود میدهد. این تغییر بخشی از اصلاحات فوری غیر-MM (non-MM hotfixes) برای لینوکس 7.4-rc2 است و توسط ماتیوس آلوز دی آلمیدا (Matheus Alves de Almeida)، توسعهدهنده متنباز، ارائه شده است.
جزئیات فنی وصله (Patch)
در پیادهسازی پیشین، تابع fat_cont_expand() تخصیص خوشههای جدید را به generic_cont_expand_simple() واگذار میکرد. این مسیر تعداد زیادی تخصیص کوچک خوشه انجام میداد و همین موضوع به افت عملکرد منجر میشد. در وصله جدید، فضای خوشه پیش از گسترش فایل پیشتخصیص داده میشود و منطق پیشتخصیص به تابع کمکی (helper) تازهای به نام fat_preallocate() منتقل شده است که هم fat_cont_expand() و هم fat_fallocate(FALLOC_FL_KEEP_SIZE) از آن استفاده میکنند. همچنین بهجای generic_cont_expand_simple() از نسخه اختصاصی FAT یعنی fat_cont_expand_simple() استفاده میشود تا از بازبینی دوباره اندازه جدید پس از تخصیص خوشهها جلوگیری شود.
اثر عملکردی و دامنه بهبود
بیشترین تأثیر این بهینهسازی مربوط به فایلسیستمهای FAT32 با اندازه خوشه کوچک در مانت همگام (synchronous mount) است. بنچمارکهای QEMU گزارششده بهبودهای بهویژه بزرگی را در مانتهای همگام نشان میدهند. این تغییر در ادامه بهینهسازیهای قبلی FAT32 انجام شده است؛ پیشتر بهینهسازیای با بهبود تا ۲۶۵ برابری برای چرخه لینوکس 7.4 ادغام شده و بهبود بزرگ دیگری نیز برای لینوکس 7.5 پیشبینی میشود.
سایر اصلاحات همراه
بخش عمده اصلاحات همراه مربوط به OCFS2 است و مشکلاتی مانند خرابی ویژگیهای توسعهیافته (extended attributes)، ویژگیهای گمشده و باگهای کرنل (kernel BUGs) را برطرف میکند؛ همچنین کرشهای هنگام پیکربندی خوشه، مهاجرت قفل (lock migration)، بازیابی و آنمانت (unmount) اصلاح شدهاند. جابهجایی extent نیز برای اعتبارسنجی محدوده آن در برابر اندازه پایدار فایل اصلاح شده است. سه تغییر FAT از تبدیل نادرست فایلسیستم به فقطخواندنی در اثر شرایط رقابتی نوشتن ناموفق/FIBMAP جلوگیری میکند، شمارش لینکهای دایرکتوری پس از تغییر نام را تصحیح میکند و گسترش فایل را سرعت میبخشد. اصلاح رشته taint نیز از خواندن خارج از محدوده (out-of-bounds read) جلوگیری میکند که میتواند محتوای slab را در لاگ کرنل آشکار کند. اصلاحات بیلد نیز برای ماژولهای OpenRISC روی پردازندههای بدون ضرب سختافزاری و برای Clang 24 انجام شده است. این کار از طریق درخواست ادغام اصلاحات فوری غیر-MM، پیش از لینوکس 7.4-rc2 در روز یکشنبه، وارد شده است.