| gamemoded(8) | gamemoded man page | gamemoded(8) |
نام (NAME)
gamemoded - دیمنی برای بهینهسازی عملکرد سیستم بر حسب تقاضا
خلاصه دستور (SYNOPSIS)
gamemoded [گزینهها...]
توضیحات (DESCRIPTION)
GameMode یک ترکیب دیمن/کتابخانه برای لینوکس است که به بازیها اجازه میدهد اعمال موقت مجموعهای از بهینهسازیها را روی سیستمعامل میزبان درخواست کنند.
طراحی این ابزار دارای یک انتزاع مشخص و مجزا میان دیمن و کتابخانه میزبان (gamemoded و libgamemode) و بارگذارهای کلاینت (libgamemodeauto و gamemode_client.h) است که امکان استفاده امن و بدون نگرانی از نصب بودن یا در حال اجرا بودن دیمن را فراهم میکند. این طراحی همچنین بدین معناست که هرچند کتابخانه میزبان در حال حاضر برای تبادل پیامها با دیمن به systemd متکی است، اما پیادهسازی سازوکارهای درونی دیگری که همچنان با همین کلاینتها کار کنند کاملاً امکانپذیر است.
ابزار GameMode در اصل به عنوان یک راهحل موقت برای رفع مشکلات مربوط به گاورنرهای ذخیره انرژی (powersave) یا بنابر تقاضا (ondemand) در پردازندههای Intel و AMD طراحی شده بود، اما هدف آن گسترش به فراتر از صرفاً وضعیت گاورنر پردازنده است، چرا که طیف گستردهای از وظایف خودکارسازی وجود دارد که ممکن است فرد بخواهد اعمال کند.
گزینهها (OPTIONS)
- -r[PID], --request=[PID]
- تغییر وضعیت فعال/غیرفعال بودن حالت بازی (GameMode) برای یک فرآیند. هنگامی که هیچ PID مشخص نشود، حالت بازی را درخواست کرده و مکث میکند.
- -s[PID], --status=[PID]
- استعلام وضعیت حالت بازی برای یک فرآیند. هنگامی که هیچ PID مشخص نشود، وضعیت را بهصورت سراسری استعلام میکند.
- -d, --daemonize
- اجرای دیمن به عنوان یک فرآیند مجزا (تبدیل به دیمن در پسزمینه).
- -l, --log-to-syslog
- ثبت گزارشها در syslog.
- -h, --help
- چاپ متن راهنما.
- -t, --test
- اجرای آزمونهای تشخیصی روی نسخه نصبشده فعلی.
- -v, --version
- نمایش نسخه برنامه.
نحوه استفاده (USAGE)
میتوان فایل libgamemodeauto.so.0 را در هر برنامهای پیشبارگذاری (pre-load) کرد تا آغاز یا پایان حالت بازی را از gamemoded درخواست کند. برای جزئیات بیشتر به gamemoderun(1) مراجعه کنید.
توسعهدهندگان میتوانند از فایل سرایند gamemode_client.h برای گنجاندن این درخواستها در برنامههای خود استفاده نمایند:
#include "gamemode_client.h"
if( gamemode_request_start() < 0 ) {
fprintf( stderr, "gamemode request failed: %s\n", gamemode_error_string() );
}
/* اجرای فرآیند */
/* الزامی نیست؛ gamemoded پس از خروج بازی میتواند پاکسازی را انجام دهد */
gamemode_request_end();
همچنین توسعهدهندگان میتوانند با تعریف GAMEMODE_AUTO رفتار libgamemodeauto.so.0 را شبیهسازی کنند:
#define GAMEMODE_AUTO #include "gamemode_client.h"
یا میتوانند libgamemodeauto.so.0 را توزیع کرده و با -lgamemodeauto لینک نمایند و یا همانند بالا با LD_PRELOAD آن را تزریق کنند.
پیکربندی (CONFIG)
دیمن gamemoded فایلهای پیکربندی gamemode.ini را به ترتیب از این دایرکتوریها بارگذاری کرده و ادغام میکند:
رفتار فایل پیکربندی را میتوان با ارائه یک نمونه حاوی توضیحات شرح داد:
[general] ; ریسه پاکسازی (reaper thread) هر ۵ ثانیه کلاینتهای خارجشده، تغییرات فایل پیکربندی و توازن توان CPU/iGPU را بررسی میکند reaper_freq=5 ; گاورنر مورد نظر هنگام ورود به GameMode به جای "performance" استفاده میشود desiredgov=performance ; گاورنر پیشفرض هنگام خروج از GameMode به جای بازگردانی مقدار اصلی استفاده میشود ;defaultgov=powersave ; گاورنر مورد نظر iGPU هنگامی که پردازنده گرافیکی یکپارچه زیر بار سنگین است استفاده میشود igpu_desiredgov=powersave ; آستانه مورد استفاده برای تصمیمگیری در مورد بار سنگین پردازنده گرافیکی یکپارچه. ; این نسبت وات iGPU به وات CPU است که برای تعیین زمان رسیدن بار پردازنده گرافیکی ; یکپارچه به حدی که تغییر به igpu_desiredgov را توجیه کند استفاده میشود. برای غیرفعال کردن ; تمام بررسیهای iGPU و استفاده همیشگی از desiredgov برای بازیها، این مقدار را 1- قرار دهید. igpu_power_threshold=0.3 ; ابزار GameMode میتواند سیاست زمانبندی را در هستههایی که از آن پشتیبانی میکنند به SCHED_ISO تغییر دهد ; (در حال حاضر در هستههای بالادست پشتیبانی نمیشود). میتواند روی "auto" ،"on" یا "off" تنظیم شود. ; مقدار "auto" با ۴ هسته پردازنده یا بیشتر فعال میشود. "on" همیشه فعال میکند. پیشفرض: "off". softrealtime=off ; ابزار GameMode میتواند اولویت (nice) فرآیندهای بازی را تغییر دهد. میتوانید هر مقداری بین 0 و 20 در اینجا قرار دهید، ; مقدار منفی شده و به عنوان مقدار nice اعمال میشود (0 به معنای عدم تغییر است). پیشفرض: 0. ; برای استفاده از این قابلیت، کاربر باید به گروه gamemode اضافه شود (و سپس سیستم ریبوت شود): ; sudo usermod -aG gamemode $(whoami) renice=0 ; به صورت پیشفرض، GameMode اولویت ورودی/خروجی (iopriority) کلاینتها را روی BE/0 تنظیم میکند؛ میتوانید ; هر مقداری بین 0 تا 7 را در اینجا قرار دهید (0 بالاترین اولویت است)، یا یکی از مقادیر ویژه "off" (برای غیرفعالسازی) ; یا "reset" (برای بازگردانی رفتار پیشفرض لینوکس بر اساس اولویت CPU). ; در حال حاضر فقط کلاس best-effort پشتیبانی میشود، بنابراین نمیتوانید آن را در اینجا تنظیم کنید. ioprio=0 ; تعیین میکند که آیا GameMode در هنگام فعال بودن محافظ صفحه (screensaver) را مهار کند یا خیر ; مقدار پیشفرض: 1 inhibit_screensaver=1 ; تعیین میکند که آیا GameMode در هنگام فعال بودن کاهش اثر split lock را غیرفعال کند یا خیر ; مقدار پیشفرض: 1 disable_splitlock=1 [filter] ; اگر مدخل "whitelist" دارای مقدار باشد، ; GameMode هر چیزی را که در لیست سفید نباشد رد خواهد کرد ;whitelist=RiseOfTheTombRaider ; ابزار GameMode همیشه هر چیزی را که در لیست سیاه باشد رد میکند ;blacklist=HalfLife3 ; glxgears [gpu] ; محدوده خطرناک (Here Be Dragons)! ; هشدار: از این تنظیمات با مسئولیت خودتان استفاده کنید ; هرگونه آسیب به سختافزار ناشی از این قابلیت کاملاً بر عهده خود شماست ; همچنین اکیداً توصیه میشود این تنظیمات را ابتدا به صورت دستی امتحان کنید تا نقاط بهینه را بیابید ; تنظیم این گزینه روی عبارت کلیدی "accept-responsibility" به GameMode اجازه اعمال بهینهسازیهای GPU مانند اورکلاک را میدهد ;apply_gpu_optimisations=0 ; شماره دستگاه DRM روی سیستم (معمولاً 0)، یعنی عدد موجود در /sys/class/drm/card0/ ;gpu_device=0 ; تنظیمات ویژه انویدیا (Nvidia) ; نیازمند فعال بودن افزونه coolbits در nvidia-xconfig است ; این مقدار معادل GPUPowerMizerMode مورد نظر است: ; "Adaptive"=0 "Prefer Maximum Performance"=1 و "Auto"=2 ; رجوع کنید به NV_CTRL_GPU_POWER_MIZER_MODE و موارد مرتبط در https://github.com/NVIDIA/nvidia-settings/blob/master/src/libXNVCtrl/NVCtrl.h ;nv_powermizer_mode=1 ; این مقادیر کلاک هسته و حافظه بالاترین حالت عملکرد را در Nvidia PowerMizer تغییر میدهند ; بر حسب انحراف مگاهرتز (MHz offset) از خط مبنا اندازهگیری میشوند؛ 0 مقادیر را به پیشفرض بازمیگرداند، 1- یا عدم مقداردهی مقادیر را تغییر نمیدهد ;nv_core_clock_mhz_offset=0 ;nv_mem_clock_mhz_offset=0 ; تنظیمات ویژه ایامدی (AMD) ; نیازمند ماژول نسبتاً بهروز هسته AMDGPU است ; رجوع کنید به: https://dri.freedesktop.org/docs/drm/gpu/amdgpu.html#gpu-power-thermal-controls-and-monitoring ; همچنین اکیداً توصیه میشود از lm-sensors (یا سایر ابزارهای موجود) برای بررسی دمای کارت گرافیک استفاده کنید ; این گزینه معادل power_dpm_force_performance_level است، مقدار "manual" فعلاً پشتیبانی نمیشود ;amd_performance_level=high [cpu] ; پارکینگ (Parking) یا پینینگ (Pinning) هستهها را میتوان با یکی از مقادیر "yes" ،"true" یا "1" فعال و با "no" ،"false" یا "0" غیرفعال کرد. ; همچنین هر کدام را میتوان روی فهرست خاصی از هستهها برای پارک یا پین تنظیم کرد؛ فهرستی جدا شده با کاما که در آن "-" نشاندهنده ; یک بازه است. به عنوان مثال "park_cores=1,8-15" هستههای 1 و 8 تا 15 را پارک میکند. ; حالت پیشفرض (در صورت حذف کامنت) غیرفعال کردن پارکینگ و فعال کردن پینینگ است. در صورت فعال بودن هر کدام، کد در حال حاضر ; تنها پردازندههای Ryzen 7900x3d ،7950x3d و پردازندههای Intel دارای هستههای E و P را به درستی به صورت خودکار تشخیص میدهد. ; برای Core Parking، کاربر باید به گروه gamemode اضافه شود (برای Core Pinning الزامی نیست): ; sudo usermod -aG gamemode $(whoami) ;park_cores=no ;pin_cores=yes [supervisor] ; این بخش توابع جدید gamemode یعنی gamemode_request_start_for و gamemode_request_end_for را کنترل میکند ; لیست سفید و سیاه تعیین میکنند کدام برنامههای ناظر (supervisor) مجاز به ارسال درخواستهای فوق هستند ;supervisor_whitelist= ;supervisor_blacklist= ; در صورتی که بخواهید به یک برنامه ناظر اجازه کنترل کامل GameMode را بدهید، میتوان این گزینه را تنظیم کرد ; این حالت باعث میشود کلاینتهای GameMode تنها با استفاده از توابع بالا توسط یک کلاینت ناظر ثبت شوند ;require_supervisor=0 [custom] ; اسکریپتهای سفارشی (اجراشونده توسط شل) هنگام آغاز و پایان GameMode ;start=notify-send "GameMode started" ; /home/me/bin/stop_foldingathome.sh ;end=notify-send "GameMode ended" ; /home/me/bin/start_foldingathome.sh ; مهلت زمانی اسکریپتها (ثانیه). اگر اسکریپتها در این مدت به پایان نرسند، متوقف (kill) خواهند شد. ;script_timeout=10
همچنین ببینید (SEE ALSO)
درباره (ABOUT)
کد منبع GameMode در نشانی زیر در دسترس است: https://github.com/FeralInteractive/gamemode.git
نویسنده (AUTHOR)
Feral Interactive (linux-contact@feralinteractive.com)
| 4 May 2020 | 1.8.2 |