عملکرد یکی از معیارهای بسیار مهم برای هر توسعهدهنده امبدد سیستمها و همچنین تیم توسعه است. چه در حال توسعه یک دستگاه با منابع محدود باشید یا یک ماژول با کارایی بالا و یا حتی یک سیستم معمولی؛ هر گونه اتلاف در چرخه پردازش باعث هدر رفت هزینه، زمان و انرژی میشود. بسیاری از امبدد سیستمهای امروزی با RTOS ساخته میشوند، اما تجربه نشان میدهد که بسیاری از توسعهدهندگان بدون ارزیابی عملکرد RTOS به سراغ انتخاب آن میروند که این میتواند مشکلاتی در کارایی و بهینهسازی سیستم به همراه داشته باشد. برای بهینهسازی بهتر، انتخاب RTOS باید با دقت بیشتری انجام شود و عملکرد آن به طور کامل بررسی گردد.
از آنجا که دادههای کمی برای مقایسه سیستمعاملهای بلادرنگ مختلف منتشر شده، جای تعجب نیست که تیمها عملکرد RTOS را در نظر نمیگیرند. ویژگیهای متنوع و گسترده هر RTOS باعث میشوند که مقایسه دقیق و منصفانه میان آنها دشوار باشد. با توجه به اینکه دادههای محدودی در این زمینه موجود است، برای انتخاب درست RTOS باید از معیارهای دقیق و آزمونهای همسان استفاده کرد تا عملکرد واقعی هر سیستمعامل مشخص شود.
در این مطلب، نحوه تست عملکرد سه سیستمعامل بلادرنگ محبوب و متنباز (Zephyr RTOS، FreeRTOS و Eclipse ThreadX) و یک سیستمعامل تجاری (PX5 RTOS) را بررسی خواهیم کرد تا توسعهدهندگان بتوانند بر اساس نیاز خود، بهترین گزینه را انتخاب کنند.
برای مشاهده گزارش کاملی از نتایج تستها، میتوانید گزارش عملکرد RTOS 2024 را از اینجا دانلود کنید. اینجا فقط بر روی نحوه تست کردن سیستمعاملهای بلادرنگ مختلف تمرکز خواهیم کرد.
شناسایی تستهای عملکرد RTOS
همانطور که احتمالاً حدس میزنید، همه سیستمعاملهای بلادرنگ (RTOS) یکسان ساخته و طراحی نشدهاند. در واقع هر RTOS با اهداف متفاوتی طراحی میشود. این بدان معناست که RTOS ها قابلیتها و ویژگیهای متفاوتی دارند. هر RTOS نقاط قوت، ضعف، ویژگیها و استاندارد مخصوص به خود را دارد. حال سؤال این است که چگونه میتوان بیطرفانه، این سیستمها را مقایسه کرد.
اولین کاری که باید انجام دهیم این است که بپذیریم همه ویژگیها و عملکردهای یک سیستم عامل بیدرنگ (RTOS) را نمیتوانیم مورد آزمایش قرار دهیم. برای مثال، FreeRTOS یک ویژگی بسیار جالب دارد که به شما این امکان را میدهد هسته سیستم را برای کارهایی که نیاز به مصرف انرژی زیادی ندارند در مود تیکلس (Tickless) ران کنید. اگرچه این ویژگی فوقالعاده است، اما همه سیستمهای عامل بیدرنگ این ویژگی را ندارند، بنابراین مقایسه این ویژگی با دیگر سیستمها دشوار خواهد بود.
به جای تمرکز بر ویژگیهای منحصربهفرد در هر RTOS، باید روی ویژگیهایی تمرکز کنیم که در همه سیستمهای عامل بیدرنگ (RTOS) مشترک هستند که البته این ویژگیها کم هم نیستند. به عنوان مثال، همه RTOSها حداقل یک زمانبند (scheduler)، صف پیامها (message queues)، نشانبر یا سمافور (semaphores)، مدیریت حافظه (memory management) و چند ویژگی دیگر را دارند. این ویژگیها تقریباً مبنای همه RTOSهایی هستند که امروزه وجود دارند؛ بنابراین باید روی این ویژگیها تمرکز کرد. مقایسه این ویژگیها به ما کمک میکند که یک دید کلی نسبت به عملکرد احتمالی ویژگیهای متمایزکننده داشته باشیم.
معیارهای عملکرد سیستمهای عامل بیدرنگ (RTOS)
اگر قصد دارید عملکرد RTOS ها را مقایسه کنید، نیاز به یک بستر آزمایشی خواهید داشت. بستر آزمایشی به شما این امکان را میدهد تا ویژگیهای پایه و استاندارد این سیستمها را به شکل یکسان آزمایش کنید. بر همین اساس از معیارهای Thread Metric که یک مجموعه آزمون از بنیاد Eclipse است، به عنوان ابزار مورد استفاده برای ارزیابی عملکرد RTOSها استفاده خواهیم کرد.
مجموعه Thread Metric شامل هشت تست مختلف است که یکی از آنها تست کالیبراسیون برای اطمینان از شباهت عملکرد پلتفرمها است. به عنوان مثال، اگر یک سیستم عامل بیدرنگ (RTOS) بهدرستی در بستر آزمایشی قرار گیرد، با تنظیمات مشابه و کامپایل شده با کامپایلر GCC، انتظار میرود که آزمون کالیبراسیون نتایجی حدود ۷۰,۰۰۰ واحد برای هر RTOS ارائه دهد. اگر نتیجه کالیبراسیون از مقدار مورد انتظار فاصله داشته باشد، نشاندهنده تفاوت در تنظیمات (مانند کامپایلر یا تنظیمات دیگر) است و نتایج آزمونهای دیگر قابل اعتماد نخواهند بود، به خصوص برای مقایسه مستقیم بین سیستمها.
بر همین اساس پنج ویژگی کلیدی و اساسی که هر RTOS باید داشته باشد را از مجموعه معیارهای Thread Metric انتخاب کردیم. این 5 مورد شامل موارد زیر میشوند:
- زمانبندی مشارکتی (Cooperative Scheduling): در این نوع زمانبندی، تسکها (وظایف) به صورت هماهنگ و با همکاری یکدیگر اجرا میشوند. در این حالت تسکها باید به طور خودکار کنترل را به تسکهای دیگر واگذار کنند.
- زمانبندی غیر انحصاری (Preemptive Scheduling): در این نوع زمانبندی، سیستم عامل میتواند یک تسک را متوقف و تسک دیگری را اجرا کند. این روش اجازه میدهد تا زمان بیشتری به تسکهای مهمتر تخصیص داده شود.
- تخصیص حافظه (Memory Allocation): این ویژگی به مدیریت تخصیص و آزادسازی حافظه در سیستم عامل مربوط میشود. نحوه مدیریت حافظه تأثیر زیادی بر عملکرد سیستم دارد.
- پردازش همگامسازی (Synchronization Processing): این ویژگی به استفاده از مکانیزمهای همگامسازی مانند سمافورها برای هماهنگی بین تسکها اشاره دارد. این مکانیزمها به تسکها کمک میکنند تا به طور صحیح با یکدیگر تعامل داشته باشند.
- انتقال پیام (Message Passing): این ویژگی به روشهای ارتباطی بین تسکها اشاره دارد. تسکها میتوانند از این روش برای ارسال و دریافت دادهها یا اطلاعرسانی به یکدیگر استفاده کنند.
با توجه به اینکه هر آزمون ۳۰ ثانیه به طول میانجامد و نتیجه بر اساس مقدار شمارش شده محاسبه میشود، میتوان به راحتی عملکرد RTOSها را مقایسه کرد. همچنین، نکته مهم این است که یک RTOS ممکن است در یک آزمون خاص عملکرد عالی داشته باشد، اما در آزمونهای دیگر نتواند به همان خوبی عمل کند. این موضوع نشاندهنده اهمیت بررسی همه جانبه و توجه به عملکرد در زمینههای مختلف است.
مقایسه منصفانه سیستمهای عامل بیدرنگ
شاید فکر کنید که با وجود یک مجموعه معیار، تنها کافی است سیستم عامل بیدرنگ (RTOS) خود را در این مجموعه وارد کنید، چند تست انجام دهید، مقایسه کنید و کار تمام است. متأسفانه، اینگونه نیست. صرف وجود یک مجموعه معیار به تنهایی کافی نیست و باید اطمینان حاصل کنید که هر RTOS بهطور صحیح و مشابه پیکربندی شده تا نتایج واقعی و مقایسهپذیری به دست آید.
زمانی که اندازهگیریهای اولیه را برای زمانبندی غیر انحصاری انجام دادم، به نتایجی دست پیدا کردم که به شرح زیر هستند:
با نگاه به این تصویر، میتوان بهوضوح متوجه شد که PX5 RTOS عملکرد بهتری نسبت به سیستمهای عامل بیدرنگ متنباز (open-source RTOSes) دارد است. در واقع، اگر به سیستمهای متنباز نگاه کنید، به نظر میرسد که Zephyr RTOS عملکرد بسیار ضعیفی دارد. به نظر همه چیز واضح و روشن است، درست است؟ Zephyr RTOS عملکرد خوبی ندارد… یا دارد؟
در تصویر بالا، Zephyr با تنظیمات پیشفرض خود مورد آزمایش قرار گرفته است؛ اما این به چه معناست؟
این یعنی:
- بهینهسازیهای سرعت فعال نیستند
- لاگگیری فعال است
- بررسی شرایط تعریف شده یا assertion checking فعال است
- بهینهسازی دیباگینگ فعال است
- بررسی خطاها در زمان اجرا فعال است
- مدیریت انرژی فعال است
- مدیریت حافظه (MPU) فعال است و از آن برای محافظت از پشته دادهها و همچنین موارد دیگر استفاده میشود.
میتوانیم درباره این موضوع که آیا فعال بودن این ویژگیها به طور پیشفرض کار درستی هست یا نه بحث کنیم؛ اما آیا سایر سیستم عاملهای بیدرنگ (RTOSها) دیگر این ویژگیها را به طور پیشفرض فعال دارند یا نه؟
خیر! من تغییرات جزئی در RTOSها اعمال کردم. هدف این بود که به گونهای آنها را تنظیم کنیم که این ویژگیها غیرفعال باشند تا پیکربندی همه RTOS به اندازه کافی نزدیک به هم باشد و بتوانیم بهطور دقیق عملکرد آنها را مقایسه کنیم.
برای دستیابی به یک مقایسه منصفانه، مجبور شدم این ویژگیها را در Zephyr RTOS غیرفعال کنم. وقتی این کار را انجام دادم، همانطور که در زیر مشاهده میکنید، نتایج کمی تغییر کرد.
تنها تغییری که رخ داد این بود که عملکرد Zephyr تقریباً سه برابر بهتر شده بود. البته همچنان حدود ۳۰٪ کندتر از PX5 RTOS و ۲۰٪ کندتر از ThreadX عمل میکند، اما اکنون مقایسه عملکردها منطقیتر و قابل اعتمادتر شده است و میتوان نتایج اولیهای از این مقایسه به دست آورد.
نتیجهگیری
مقایسه عملکرد سیستم عاملهای بیدرنگ (RTOSها) کار آسانی نیست. هر RTOS ویژگیها و پیکربندیهای منحصربهفردی دارد که باید آنها را در نظر بگیرید تا به مقایسهای دقیق دست پیدا کنید. وقتی شرایط برابر باشد، میتوانیم عملکرد هر RTOS را بررسی کنیم، آنها را با یکدیگر مقایسه کنیم و نهایتاً به نتایجی در مورد چگونگی تأثیر RTOS بر پروژههای خود برسیم.
هر پروژه نیازها و الزامات خاص خود را دارد و هر RTOS نیز جایگاه خاص خود را دارد. به عنوان یک مهندس، در اختیار داشتن دادهها به ما کمک میکند ویژگیهای عملکردی را درک کنیم و بعد طبق آن تصمیمات صحیحی برای طراحی بگیریم.
منبع : embedded