لینوکس یک سیستمعامل همهمنظوره است. «درواقع برای رسیدن به این هدف هسته لینوکس بهطور پیوسته در حال گسترش است تا بتواند از عملکردهای بیشتری پشتیبانی کند.» سؤالی که پیش میآید این است که «آیا یک kernel بهتنهایی میتواند محدوده وسیعی از شرایط و موارد استفاده را بهصورت بهینه هندل کند؟»
نکته جالبتر اینجاست که در حال حاضر برای برخی کاربردها، هسته لینوکس مشکلساز میشود! برای نمونه در کاربردهایی که به I/O با کارایی بالا نیاز است از چارچوبهایی مثل DPDK و SPDK استفاده میشود. این چارچوبها kernel را دور زده (bypass) و مستقیم به سختافزار دسترسی پیدا میکنند!
از زاویهای دیگر اگر به مسئله نگاه کنیم غالباً سرورهایی که راه میاندازیم، تک کاربردی هستند. به این معنی که سرور من فقط قرارِ وب سرور، سرور ایمیل، سرور FTP و … باشه. برای همین بر روی یک سرور اختصاصی چندین سرور مجازی بارگذاری میکنیم. (اصلاً یکی از دلایل به وجود آمدن Container ها همینه) بهخصوص «در سیستمهای ابری برای رعایت نکات امنیتی برنامههای کاربر در درون یک ماشین مجازی اختصاصی اجرا میشود» غالباً (و بهطور روزافزون) این «برنامهها بهصورت تک پردازهای و در عوض بهصورت موازی در VMهای مجزا اجرا میشوند.»
در پاسخ به این مسائل پژوهشها پیرامون ایده Library OS یا همان unikernelها از سر گرفتهشده است. unikernel مدلی است که در آن برنامه کاربردیِ هدف با kernel ویژهای لینک میشود و بهطور مستقیم بر روی سختافزار فیزیکی یا مجازی مستقر میشود. از مزایای unikernelها میتوان به موارد زیر اشاره کرد:
نوع: کنفرانس (HotOS19)
نویسندگان: Ali Raza, Parul Sohal, James Cadden, Jonathan Appavoo, Ulrich Drepper, Richard Jones, Orran Krieger, Renato Mancuso, Larry Woodman
لینک دانلود مقاله: اینجا
در حال حاضر ساخت یک unikernel به دو روش امکانپذیر است. در روش اول (clean slate) هسته از ابتدا ساخته میشود (مثل MirageOS) و در روش دوم (strip down) هسته موجود تکهتکه شده و عملکردهای اضافی آن حذف میشود (مثل RumpRun که نسخه بسیار کوچکشده NetBSD است). از طریق روش اول میتوان به ماکزیمم بهینهسازی رسید ولی در سازگاری برنامههای کاربردی موجود با یک هسته سفارشی به مشکل میخوریم. در عوض مزیت روش دوم این است که انتقال برنامههای کاربردی موجود به unikernel راحتتر قابل انجام است. سؤال اینجاست که آیا میشود از لینوکس یک unikernel ساخت؟
اهداف در این کار عبارت است از:
فرایند ساخت UKL (Unikernel Linux) شامل چهار گام است:
خوب بهسلامتی لینوکس هم میتونیم بهصورت Unikernel داشته باشیم! ظاهراً چالشهایی در رابطه با امنیت در مورد unikernel وجود دارد (نیاز به مطالعه بیشتر دارم) ولی حداقل الان میتوانیم برنامههای کاربردی تحت Linux را بهراحتی در قالب Unikernel ارائه کنیم.
هرچند هدف نویسنده مقاله تنها بهبود کارایی نبوده ولی در یک مورد آزمایشی که در مقاله بررسیشده (یک Echo Server ساده) ۵۰ درصد میانگین تأخیر پاسخگویی و ۴۱ درصد تأخیر انتهایی (Tail Latency – راجع بهش در پست دیگه ای صحبت میکنم) بهبودیافته است.
این مقاله دو روش برای رفع مشکل ring transition مطرح کرده است. یکی ترکیب برنامه با هسته بهعنوان ماژول هسته (Kernel Module) و دیگری اینکه به برنامه کاربردی اجازه دهد در ring صفر کنار دست هسته اجرا شود. هر دو این روشها بخصوص دومی نیاز به بررسی امنیتی و پایداری بیشتر دارد.
مقاله از هیچکدام از این دو روش استفاده نکرده است و روش سومی ارائه داده که به نظرم خیلی بیشتر نیازمند توجه و بررسی امنیتی است. در این روش هسته بهصورت ایستا به برنامه کاربردی لینک شده و تنها آن را اجرا میکند.