
نسخه 2611 شبیهساز (Emulator) FEX برای اجرای بازیها و برنامههای x86/x86_64 لینوکس و WINE روی سیستمهای AArch64 Linux منتشر شد. این نسخه علاوه بر بهبودهای ادامهدار در کامپایلر JIT (Just-In-Time)، بر آمادگی برای همراستایی کرنل (Kernel) لینوکس با رفتار ویندوز روی ARM و مک او اس در استفاده از رجیستر سیستمی (System Register) TPIDRRO_EL0 تمرکز دارد.
چرا TPIDRRO_EL0 برای FEX اهمیت دارد؟
بر اساس مستندات Arm، رجیستر TPIDRRO_EL0 برای ذخیره اطلاعات شناسایی رشته پردازنده (CPU Thread) در زمان اجرای نرمافزار و مدیریت سیستمعامل به کار میرود. ویندوز روی ARM و مک او اس از این رجیستر برای نگهداری شماره هسته پردازنده (CPU Core Index) استفاده میکنند تا نرمافزار فضای کاربر (User-Space) سریع بداند برنامه یا بازی روی کدام هسته اجرا میشود. اما در لینوکس، TPIDRRO_EL0 همیشه مقدار صفر برمیگرداند و FEX ناچار است برای دریافت قابلاعتماد شماره هسته از فراخوان سیستمی (System Call) getcpu استفاده کند.
پیشینه و چالش وصله کرنل
کرنل لینوکس حدود ۱۵ سال است که این رجیستر را بهصورت ثابت صفر نگه میدارد؛ دلیلی که به اشتباه برخی سازندگان پردازندههای ARM در پیادهسازی آن و همچنین رزرو رجیستر برای کاربردهای آینده نسبت داده شده است. در ماه اوت، Igalia وصلهای (Patch) ارسال کرد تا شماره هسته در حال اجرای یک وظیفه بومی (Native Task) در TPIDRRO_EL0 گزارش شود. با این حال، ویلی دیکن (Will Deacon)، توسعهدهنده لینوکس ARM، هشدار داد که استفاده از این رجیستر برای چنین هدفی، امکان استفاده از آن برای کاربردهای دیگر در آینده را از بین میبرد؛ حتی اگر رفتار حاصل با ویندوز و مک او اس همخوان شود.
آمادگی FEX و تأثیر بر بازیها
توسعهدهندگان FEX خود را آماده میکنند تا در صورت پذیرفته شدن وصله در کرنل اصلی (Mainline)، از TPIDRRO_EL0 استفاده کنند. این تغییر میتواند برخی مشکلات بازیهای مدرن با FEX را برطرف کند و به عملکرد کمک کند. برنامههای WINE روی ARM64 برای رعایت سازگاری ABI (Application Binary Interface) به این رجیستر نیاز دارند. به گفته توسعهدهندگان، این رجیستر بهویژه هنگام اجرای FEX زیر WINE ضروری است؛ چون در آن شرایط نمیتوان از فراخوانهای سیستمی لینوکس بهدرستی استفاده کرد و بنابراین شبیهسازی ایمن و آسان دستورهای RDPID/RDTSCP/CPUID ممکن نبود و این دستورها غیرفعال شده بودند. اکنون برخی بازیها این دستورها را الزامی میکنند و همین موضوع، FEX را در تنگنا قرار داده بود.
به گفته توسعهدهندگان، پذیرش این تغییر ترکیبی از بهبود صحت (Correctness) و عملکرد (Performance) خواهد بود. سایر تغییرات FEX 2611 نیز بیشتر بر ادامه کار روی JIT متمرکز است و جزئیات کامل در وبلاگ FEX-Emu.com منتشر شده است.