مجازیسازی ورودی/خروجی و دسترسی مستقیم به حافظه (DMA)
دسترسی مستقیم به حافظه به دستگاهها امکان میدهد تا دادهها را بدون دخالت پردازنده برای هر کلمه، به حافظه منتقل کرده و از آن دریافت کنند، و مجازیسازی ورودی/خروجی این قابلیت را برای اشتراکگذاری ایمن دستگاههای فیزیکی بین ماشینهای مجازی گسترش میدهد، که هر دو برای سیستمهای مدرن و ابری کارآمد حیاتی هستند.
Definition
دسترسی مستقیم به حافظه مکانیزمی است که توسط آن یک دستگاه دادهها را مستقیماً به حافظه اصلی منتقل میکند یا از آن دریافت میکند، بدون اینکه پردازنده هر داده را کپی کند، و مجازیسازی ورودی/خروجی مجموعهای از تکنیکها است که دستگاههای ورودی/خروجی فیزیکی را به صورت ایمن و کارآمد بین چندین ماشین مجازی ارائه و به اشتراک میگذارد.
Scope
این موضوع به دسترسی مستقیم به حافظه (DMA) و مجازیسازی ورودی/خروجی میپردازد: اینکه چگونه کنترلکنندههای DMA دادههای حجیم را جابجا کرده و اتمام کار را اطلاع میدهند، نقش IOMMU در ترجمه آدرس و حفاظت برای انتقالهای دستگاه، و تکنیکهای اشتراکگذاری دستگاهها بین ماشینهای مجازی مانند شبیهسازی دستگاه، مجازیسازی جزئی (paravirtualization)، و عبور مستقیم با کمک سختافزار (hardware-assisted passthrough). این مبحث به جابجایی کارآمد و ایمن دادههای دستگاه میپردازد. کنترل پایه دستگاه و وقفهها (معماری ورودی/خروجی و باسها) و رسانههای ذخیرهسازی (دستگاههای ذخیرهسازی ثانویه) را شامل نمیشود.
Core questions
- چگونه DMA دادههای حجیم را بدون اشغال پردازنده منتقل میکند؟
- چگونه یک IOMMU ترجمه آدرس و حفاظت را برای انتقالهای دستگاه فراهم میکند؟
- چگونه دستگاههای فیزیکی به صورت ایمن بین ماشینهای مجازی به اشتراک گذاشته میشوند؟
- موازنه بین شبیهسازی دستگاه، مجازیسازی جزئی و عبور مستقیم چیست؟
Key concepts
- دسترسی مستقیم به حافظه (DMA)
- کنترلکننده و توصیفگرهای DMA
- وقفههای اتمام کار
- IOMMU و ترجمه آدرس دستگاه
- شبیهسازی دستگاه
- ورودی/خروجی مجازیسازی جزئی
- عبور مستقیم دستگاه و SR-IOV
- جداسازی و حفاظت
Key theories
- دسترسی مستقیم به حافظه
- یک کنترلکننده DMA بلوکهای داده را بین یک دستگاه و حافظه به صورت مستقل منتقل میکند و پردازنده را فقط در زمان اتمام کار وقفه میدهد، که ورودی/خروجی را با محاسبات همپوشانی میکند و برای جابجایی دادهها با توان عملیاتی بالا ضروری است.
Mechanisms
برای یک انتقال DMA، پردازنده یک کنترلکننده را با مبدأ، مقصد و طول برنامهریزی میکند، سپس به کارهای دیگر ادامه میدهد در حالی که دستگاه دادهها را جابجا کرده و یک وقفه اتمام کار را ایجاد میکند. یک IOMMU آدرسهایی را که دستگاهها استفاده میکنند ترجمه کرده و دسترسی آنها را محدود میکند، حفاظت را فراهم کرده و عبور مستقیم ایمن را ممکن میسازد. ماشینهای مجازی از طریق دستگاههای شبیهسازی شده، درایورهای مجازیسازی جزئی، یا عبور مستقیم سختافزاری (از جمله مجازیسازی ورودی/خروجی تک ریشه (single-root I/O virtualization) که به یک دستگاه اجازه میدهد چندین تابع مجازی را ارائه دهد) به دستگاهها دسترسی پیدا میکنند.
Clinical relevance
DMA برای ورودی/خروجی کارآمد اساسی است و پردازنده را در طول انتقالهای حجیم به و از دستگاههای ذخیرهسازی و شبکه آزاد میکند. مجازیسازی ورودی/خروجی برای رایانش ابری و مراکز داده ضروری است، جایی که بسیاری از ماشینهای مجازی سختافزار فیزیکی را به اشتراک میگذارند؛ IOMMU جداسازی را فراهم میکند که اشتراکگذاری و تخصیص مستقیم دستگاه را هم ایمن و هم سریع میسازد.
History
دسترسی مستقیم به حافظه از اوایل رایانهها برای کاهش بار جابجایی دادهها از پردازنده استفاده شده است. با تبدیل شدن مجازیسازی به یک عنصر اصلی در سرورها و رایانش ابری در دهه ۲۰۰۰، پشتیبانی سختافزاری مانند IOMMU و مجازیسازی ورودی/خروجی تک ریشه اضافه شد تا اشتراکگذاری و تخصیص مستقیم دستگاه کارآمد و ایمن شود.
Debates
- عملکرد عبور مستقیم در مقابل انعطافپذیری
- عبور مستقیم دستگاه عملکرد ورودی/خروجی تقریباً بومی را به ماشینهای مجازی میدهد اما انعطافپذیری برای مهاجرت و اشتراکگذاری بیش از حد (oversubscription) را کاهش میدهد، در حالی که ورودی/خروجی شبیهسازی شده یا مجازیسازی جزئی انعطافپذیرتر اما کندتر است؛ طراحان سیستم این موارد را برای بارهای کاری خود متعادل میکنند.
Key figures
- John L. Hennessy
- David A. Patterson
- Abraham Silberschatz
Related topics
Seminal works
- hennessy2019
- silberschatz2018
Frequently asked questions
- یک IOMMU چه کاری انجام میدهد؟
- یک IOMMU آدرسهایی را که دستگاهها در طول DMA استفاده میکنند به آدرسهای حافظه فیزیکی ترجمه میکند و محدود میکند که کدام حافظه توسط یک دستگاه قابل دسترسی است. این امر حفاظت و جداسازی را فراهم میکند — از خراب شدن حافظه دلخواه توسط یک دستگاه یا درایور جلوگیری میکند — و تخصیص مستقیم و ایمن دستگاهها به ماشینهای مجازی را ممکن میسازد.
- چرا DMA برای عملکرد مهم است؟
- بدون DMA، پردازنده مجبور بود هر کلمه را به یا از یک دستگاه کپی کند، که چرخههای پردازشی را مصرف کرده و در انتقالهای کند باعث توقف میشد. DMA جابجایی دادههای حجیم را به یک کنترلکننده اختصاصی واگذار میکند و به پردازنده اجازه میدهد کارهای مفید دیگری انجام دهد و فقط یک وقفه اتمام کار را مدیریت کند.