
هسته لینوکس ۷.۴ در پنجره ادغام (merge window) خود زیرساخت تازهای را دریافت کرده است که پشتیبانی از DMA-BUF را در مسیر ورودی/خروجی (I/O path) هسته و از طریق چارچوب IO_uring فعال میکند. این تغییر پس از مدتها بحث و ارائه وصلههای (patches) مشابه، اکنون به شاخه اصلی (mainline) راه یافته است.
DMA-BUF و اهمیت اشتراک بافر بدون کپی
چارچوب DMA-BUF در لینوکس به درایورها و زیرسیستمهای مختلف اجازه میدهد بافرهای حافظه سختافزاری را بدون نیاز به کپی توسط پردازنده (CPU) به اشتراک بگذارند. این سازوکار بهویژه در درایورهای پردازش گرافیکی (GPU) رایج است و در درایورهای رسانه و شبکه نیز برای اشتراک بافر با کپی صفر (zero-copy) به کار گرفته شده است.
جزئیات فنی و محدودیتهای اولیه
پاول بگونکوف (Pavel Begunkov) که این کار را طی یازده دور بازبینی وصله هدایت کرده، توضیح داده است که این قابلیت برای فایلها بهصورت اختیاری (opt-in) است و فایلها باید یک عملیات فایل (file operation) جدید را پیادهسازی کنند. در این مجموعه، تنها دستگاههای بلوکی NVMe پشتیبانی میشوند.
رابط کاربری (user API) بر پایه «بافرهای ثبتشده» (registered buffers) در IO_uring ساخته شده است. یک dmabuf به شکلی ویژه ثبت میشود و پس از آن میتواند مانند سایر بافرهای ثبتشده با درخواستهای IORING_OP_{READ,WRITE}_FIXED استفاده شود. این بافر از طریق یک عملیات فایل جدید ایجاد میشود و نقشه حاصل با یک نوع تکرارگر (iterator type) جدید از پشته ورودی/خروجی عبور میکند. زیرساخت تکمیلی نیز برای اتصال اجزا، شمارش درخواستها، مدیریت طول عمر و پیادهسازی ابطال (invalidation) در نظر گرفته شده است.
پشتیبانی فعلی و اندازه بافر
در این مرحله، قابلیت مذکور فقط برای دستگاههای بلوکی خام NVMe روی گذرگاه PCIe فعال شده است. بافرهای DMA-BUF برای دستگاههای بلوکی میتوانند تا ۴ گیگابایت اندازه داشته باشند. بر اساس گزارش، اعداد بنچمارک این قابلیت قابل توجه توصیف شده است. جزئیات بیشتر درباره این قابلیت از طریق ادغام Git مربوط به لینوکس ۷.۴ قابل دسترسی است.