مدیریت قدرت و عملکرد پردازنده در لینوکس


چکیده

در عصر محاسبات مدرن، که بهره‌وری انرژی به اندازه عملکرد خام اهمیت دارد، سیستم‌عامل‌ها نقش حیاتی در مدیریت تعادل بین این دو ایفا می‌کنند. کرنل لینوکس، با معماری ماژولار و قدرتمند خود، مجهز به مکانیزم‌های پیچیده و کارآمدی برای مدیریت مصرف انرژی و عملکرد پردازنده مرکزی (CPU) است.

این مقاله به بررسی دو مفهوم بنیادی در این حوزه، یعنی حالت‌های عملکرد (P-State) و حالت‌های بیکاری (C-State) می‌پردازد. P-Stateها مدیریت قدرت در حین فعالیت پردازنده را بر عهده دارند، در حالی که C-Stateها زمانی فعال می‌شوند که پردازنده بیکار است.

در این مقاله، علاوه بر تشریح مفاهیم، سلسله مراتب، و مکانیزم‌های کاری، به روش‌های عملی مشاهده و پایش این حالت‌ها در یک سیستم لینوکس نیز پرداخته می‌شود.

مدیریت قدرت

چکیده

مدیریت قدرت هدف کاهش هزینه‌های عملیاتی برای سیستم‌های انرژی و خنک‌کننده را دنبال می‌کند، در حالی که همزمان عملکرد سیستم را در سطحی که با نیازهای فعلی مطابقت دارد، حفظ می‌کند. بنابراین، مدیریت قدرت همیشه یک مسئله تعادل بین نیازهای عملکرد واقعی و گزینه‌های صرفه‌جویی در قدرت برای یک سیستم است.

مدیریت قدرت می‌تواند در سطوح مختلف سیستم پیاده‌سازی و استفاده شود. مجموعه‌ای از مشخصات برای توابع مدیریت قدرت دستگاه‌ها و رابط سیستم عامل با آنها در رابط پیکربندی و قدرت پیشرفته (ACPI) تعریف شده است.

از آنجایی که صرفه‌جویی در قدرت در محیط‌های سرور عمدتاً در سطح پردازنده قابل دستیابی است، این فصل برخی از مفاهیم اصلی را معرفی کرده و برخی ابزارها برای تحلیل و تأثیرگذاری بر پارامترهای مرتبط را برجسته می‌کند.

پردازنده‌های مدرن x86 از ویژگی‌های متعددی برای متعادل کردن عملکرد، مصرف انرژی و بازده حرارتی استفاده می‌کنند.

به طور پیش‌فرض، سیستم‌عامل Clear Linux بیشترین اولویت را به حداکثر عملکرد CPU می‌دهد، با این فرض که هرچه برنامه سریع‌تر اجرا شود، CPU سریع‌تر به حالت بیکار با مصرف انرژی پایین بازمی‌گردد. مهم است که تأثیر هر ویژگی را هنگام عیب‌یابی یا تغییر تنظیمات پیش‌فرض بررسی و ارزیابی کنید.

مکانیزم‌های صرفه‌جویی در مصرف انرژی CPU

حالت‌های C و P هر دو مکانیزم‌های صرفه‌جویی در مصرف انرژی CPU هستند که تحت شرایط عملیاتی مختلف فعال می‌شوند. تفاوت آن‌ها در این است که خروج از این حالت‌ها کمی زمان‌برتر است.

حالت‌های C (حالت‌های بیکار)

سخت‌افزار زمانی که CPU بیکار است و دستورالعملی اجرا نمی‌کند، وارد حالت C می‌شود. حالت‌های C با کاهش فرکانس ساعت، ولتاژ و ویژگی‌ها در هر حالت، مصرف انرژی را کاهش می‌دهند. اگرچه معمولاً می‌توان حالت‌های C را در تنظیمات UEFI یا BIOS محدود یا غیرفعال کرد، اما این تنظیمات زمانی که درایور intel_idle فعال است، نادیده گرفته می‌شوند.

cat /sys/devices/system/cpu/cpuidle/current_driver

برای عیب‌یابی، حالت‌های C می‌توانند با استفاده از پارامتر خط فرمان هسته محدود شوند:

processor.max_cstate=N intel_idle.max_cstate=N

یا کاملاً غیرفعال شوند:

idle=poll

توجه:

processor.max_cstate=0 توسط هسته به یک مقدار معتبر تغییر داده می‌شود: processor.max_cstate=1

intel_idle.max_cstate=0 درایور Intel Idle را غیرفعال می‌کند، نه اینکه آن را به حالت C0 تغییر دهد.

حالت‌های P (حالت‌های عملکرد)

CPU می‌تواند وارد حالت P شود، که به آن فناوری Intel SpeedStep® در پردازنده‌های اینتل یا فناوری AMD* Cool’n’Quiet* گفته می‌شود، زمانی که فعال است و دستورالعمل‌ها را اجرا می‌کند. حالت‌های P با تنظیم فرکانس و ولتاژ CPU بر اساس تقاضای پردازنده، مصرف انرژی را کاهش می‌دهند. معمولاً می‌توان حالت‌های P را در فریم‌ورم سیستم (UEFI/BIOS) محدود یا غیرفعال کرد.

Turbo Boost

فناوری Intel® Turbo Boost در برخی پردازنده‌های مدرن اینتل، به هسته‌ها اجازه می‌دهد تا موقتاً با فرکانس بالاتر از مقدار اسمی کار کنند تا بارهای کاری سنگین را مدیریت کنند، البته اگر CPU تحت محدودیت‌های انرژی و حرارتی باشد. این فناوری بخشی از حالت‌های P است و می‌تواند با محدود کردن حالت‌های C یا P تحت تأثیر قرار گیرد.

برای غیرفعال کردن Intel Turbo Boost در UEFI/BIOS یا Clear Linux OS:

echo 1 | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo

مقیاس‌بندی فرکانس CPU در لینوکس

زیرسیستم CPUFreq در لینوکس به سیستم‌عامل اجازه می‌دهد تا از طریق درایورها و فرمانده‌ها، حالت‌های C و P را کنترل کند. فرمانده‌ها الگوریتم‌هایی ارائه می‌دهند که مشخص می‌کنند چه زمانی و چگونه وارد این حالت‌ها شویم.

درایور مقیاس‌بندی

لینوکس از درایور Intel P-state، به نام intel_pstate، برای پردازنده‌های مدرن اینتل از نسل Sandy Bridge یا جدیدتر استفاده می‌کند. پردازنده‌های دیگر معمولاً به درایور acpi-cpufreq وابسته‌اند که مقادیر را از UEFI یا BIOS سیستم می‌خواند.

برای مشاهده درایور مقیاس‌بندی فرکانس CPU فعلی، دستور زیر را اجرا کنید:

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver

فرمانده مقیاس‌بندی

Clear Linux OS فرمانده CPU را روی performance تنظیم می‌کند که باعث می‌شود CPU در حداکثر فرکانس ساعت کار کند (حالت P0). این ممکن است در ابتدا هدر دادن انرژی به نظر برسد، اما مهم است بدانیم که مصرف انرژی به طور قابل توجهی تنها به دلیل فرکانس ثابت افزایش نمی‌یابد.

برای مشاهده فرمانده مقیاس‌بندی فرکانس CPU فعلی:

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

هر هسته وضعیت خود را گزارش می‌دهد، مثلاً برای چهار هسته:

performance
performance
performance
performance

فهرست کامل فرمانده‌ها در مستندات هسته لینوکس درباره CPUFreq Governors موجود است.

توجه:

درایور intel_pstate فقط از فرمانده‌های performance و powersave پشتیبانی می‌کند.

دو روش برای تغییر فرمانده مقیاس‌بندی فرکانس CPU وجود دارد:

غیرفعال کردن اعمال اجباری تنظیمات مصرف انرژی و عملکرد Clear Linux OS:

sudo systemctl mask clr-power.timer

تغییر مقدار فرمانده در /sys/devices، مثال:

echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

مدیریت حرارتی

thermald یک daemon مدیریت حرارتی لینوکس است که از داغ شدن بیش از حد سیستم جلوگیری می‌کند. thermald با وارد کردن چرخه‌های خواب CPU و تنظیم روش‌های خنک‌کننده موجود، یک حالت C را اعمال می‌کند. این برای لپ‌تاپ‌ها بسیار مفید است.

thermald به طور پیش‌فرض در Clear Linux OS غیرفعال است و هنگام تشخیص باتری، به‌طور خودکار فعال می‌شود. برای فعال کردن دستی:

sudo systemctl enable –now thermald

برای اطلاعات بیشتر، صفحه man thermald را ببینید:

man thermald

ThermalMonitor یک برنامه گرافیکی است که دماها را از thermald به صورت گرافیکی نمایش می‌دهد و ثبت می‌کند. برای استفاده، بسته desktop-apps-extras را نصب کنید و حساب کاربری خود را به گروه power اضافه کنید:

sudo swupd bundle-add desktop-apps-extras
sudo usermod -a -G power <USER>

توجه:

پس از اضافه کردن گروه جدید، باید از سیستم خارج شده و دوباره وارد شوید تا گروه جدید اعمال شود.

پیکربندی حرارتی پیشرفته

کنترل حرارتی بهتر و عملکرد بالاتر با ارائه پیکربندی خاص پلتفرم به thermald قابل دستیابی است.

ابزار Linux DPTF Extract یک ابزار همراه برای thermald است که از فناوری Intel® Dynamic Platform and Thermal Framework (Intel® DPTF) استفاده می‌کند و می‌تواند به فرمت thermal_conf.xml برای thermald تبدیل کند. این پروژه‌ها بسته‌بندی شده در Clear Linux OS نیستند و باید دستی نصب شوند:

  1. اطمینان حاصل کنید که ویژگی DPTF در BIOS فعال است (معمولاً در بخش Advanced یا Advanced>Power).
  2. فایل‌های پیکربندی حرارتی تولید شده و در /etc/thermal/ ذخیره می‌شوند.

دستورالعمل نمونه:

sudo swupd bundle-add acpica-unix2
git clone https://github.com/intel/dptfxtract.git
cd dptfxtract
sudo acpidump > acpi.out
acpixtract -a acpi.out
sudo ./dptfxtract *.dat
sudo systemctl restart thermald.service
sudo systemctl status thermald.service

خروجی زیر نشان می‌دهد که پیکربندی اعمال شده است:

thermald[*]: [WARN]Using generated /etc/thermald/thermal-conf.xml.auto

مدیریت قدرت در سطح CPU

در سطح CPU، می‌توانید استفاده از قدرت را به روش‌های مختلفی کنترل کنید. برای مثال با استفاده از حالت‌های قدرت بیکاری (C-states)، تغییر فرکانس CPU (P-states)، و تنظیم قدرت CPU (T-states). بخش‌های زیر معرفی کوتاهی از هر روش و اهمیت آن برای صرفه‌جویی در قدرت ارائه می‌دهند. مشخصات دقیق را می‌توان در http://www.acpi.info/spec.htm یافت.

C-States (حالت‌های عملیاتی پردازنده)

پردازنده‌های مدرن چندین حالت صرفه‌جویی در قدرت به نام C-states دارند. آنها قابلیت یک پردازنده بیکار را برای خاموش کردن مؤلفه‌های استفاده نشده به منظور صرفه‌جویی در قدرت نشان می‌دهند.

وقتی یک پردازنده در حالت C0 است، در حال اجرای دستورات است. یک پردازنده که در هر حالت C دیگری اجرا می‌شود، بیکار است. هر چه عدد C بالاتر باشد، حالت خواب CPU عمیق‌تر است: مؤلفه‌های بیشتری برای صرفه‌جویی در قدرت خاموش می‌شوند. حالت‌های خواب عمیق‌تر می‌توانند مقادیر زیادی انرژی صرفه‌جویی کنند. نقطه ضعف آنها این است که تأخیر ایجاد می‌کنند. این بدان معنی است که بازگشت CPU به C0 زمان بیشتری می‌برد. بسته به بار کاری (threadهایی که بیدار می‌شوند، استفاده از CPU را فعال می‌کنند و سپس دوباره برای مدت کوتاهی به خواب می‌روند) و سخت‌افزار (برای مثال، فعالیت وقفه یک دستگاه شبکه)، غیرفعال کردن حالت‌های خواب عمیق‌تر می‌تواند عملکرد کلی را به طور قابل توجهی افزایش دهد.

برخی حالت‌ها همچنین دارای زیرحالت‌هایی با سطوح مختلف تأخیر صرفه‌جویی در قدرت هستند. اینکه کدام C-states و زیرحالت‌ها پشتیبانی می‌شوند به پردازنده مربوطه بستگی دارد. با این حال، C1 همیشه در دسترس است.

حالت تعریف
C0 حالت عملیاتی. CPU کاملاً روشن است.
C1 اولین حالت بیکاری. ساعت‌های اصلی داخلی CPU را از طریق نرم‌افزار متوقف می‌کند. واحد رابط bus و APIC با حداکثر سرعت به کار خود ادامه می‌دهند.
C2 ساعت‌های اصلی داخلی CPU را از طریق سخت‌افزار متوقف می‌کند. حالتی که در آن پردازنده تمام حالت‌های قابل مشاهده نرم‌افزار را حفظ می‌کند، اما ممکن است بیدار شدن از طریق وقفه‌ها زمان بیشتری ببرد.
C3 تمام ساعت‌های داخلی CPU را متوقف می‌کند. پردازنده نیازی به منسجم نگه داشتن کش خود ندارد، اما حالت‌های دیگر را حفظ می‌کند. برخی پردازنده‌ها انواع مختلفی از حالت C3 دارند که در مدت زمان بیدار کردن پردازنده از طریق وقفه‌ها متفاوت هستند.

برای جلوگیری از مصرف بی‌جهت قدرت، توصیه می‌شود بارهای کاری خود را با حالت‌های خواب عمیق فعال در مقابل حالت‌های خواب عمیق غیرفعال آزمایش کنید.

P-States (حالت‌های عملکرد پردازنده)

در حالی که یک پردازنده کار می‌کند (در حالت C0)، می‌تواند در یکی از چندین حالت عملکرد CPU (P-states) باشد. در حالی که C-states حالت‌های بیکاری هستند (همه به جز C0)، P-states حالت‌های عملیاتی هستند که به فرکانس و ولتاژ CPU مربوط می‌شوند.

هر چه P-state بالاتر باشد، فرکانس و ولتاژی که پردازنده با آن کار می‌کند کمتر است. تعداد P-states خاص پردازنده است و پیاده‌سازی در انواع مختلف متفاوت است. با این حال، P0 همیشه حالت با بالاترین عملکرد است (به جز ویژگی‌های توربو). اعداد بالاتر P-state نشان‌دهنده سرعت‌های کندتر پردازنده و مصرف قدرت کمتر است. برای مثال، یک پردازنده در حالت P3 کندتر کار می‌کند و قدرت کمتری مصرف می‌کند تا پردازنده‌ای که در حالت P1 کار می‌کند. برای کار در هر حالت P، پردازنده باید در حالت C0 باشد، که به این معنی است که در حال کار است و بیکار نیست.

ویژگی‌های توربو

ویژگی‌های توربو اجازه می‌دهند تا به صورت پویا هسته‌های فعال CPU را اورکلاک کنند در حالی که هسته‌های دیگر در حالت‌های خواب عمیق هستند. این کار عملکرد threadهای فعال را افزایش می‌دهد در حالی که هنوز با محدودیت‌های قدرت حرارتی طراحی (TDP) مطابقت دارد.

با این حال، شرایطی که تحت آن یک هسته CPU می‌تواند از فرکانس‌های توربو استفاده کند، خاص معماری است.

Governorهای درون کرنلی

Governorهای درون کرنلی به زیرساخت CPUfreq هسته لینوکس تعلق دارند و می‌توانند برای مقیاس‌دهی پویا فرکانس‌های پردازنده در زمان اجرا استفاده شوند. می‌توانید Governorها را به عنوان نوعی طرح قدرت از پیش پیکربندی شده برای CPU در نظر بگیرید. Governorهای CPUfreq از P-states برای تغییر فرکانس‌ها و کاهش مصرف قدرت استفاده می‌کنند. Governorهای پویا می‌توانند بین فرکانس‌های CPU بر اساس استفاده از CPU切换 کنند تا صرفه‌جویی در قدرت را امکان‌پذیر سازند در حالی که عملکرد قربانی نمی‌شود.

Governorهای زیر با زیرسیستم CPUfreq در دسترس هستند:

  • Governor عملکرد (Performance): فرکانس CPU به صورت ایستا روی بالاترین مقدار ممکن برای حداکثر عملکرد تنظیم می‌شود. در نتیجه، صرفه‌جویی در قدرت تمرکز این Governor نیست.
  • Governor صرفه‌جویی در قدرت (Powersave): فرکانس CPU به صورت ایستا روی پایین‌ترین مقدار ممکن تنظیم می‌شود. این می‌تواند تأثیر شدیدی بر عملکرد داشته باشد، زیرا سیستم هرگز بالاتر از این فرکانس نخواهد رفت بدون توجه به اینکه پردازنده‌ها چقدر مشغول هستند.
  • Governor بر اساس تقاضا (On-demand): پیاده‌سازی هسته از یک سیاست فرکانس CPU پویا: Governor استفاده پردازنده را نظارت می‌کند. به محض اینکه از یک آستانه مشخص فراتر رفت، Governor فرکانس را روی بالاترین مقدار موجود تنظیم می‌کند. اگر استفاده کمتر از آستانه باشد، پایین‌ترین فرکانس بعدی استفاده می‌شود. اگر سیستم همچنان کم‌کار باشد، فرکانس دوباره کاهش می‌یابد تا زمانی که پایین‌ترین فرکانس موجود تنظیم شود.

ابزارهای cpupower

ابزارهای cpupower طراحی شده‌اند تا نمای کلی از تمام پارامترهای مرتبط با قدرت CPU که روی یک ماشین مشخص پشتیبانی می‌شوند، از جمله حالت‌های توربو (یا boost) را ارائه دهند. از مجموعه ابزار برای مشاهده و اصلاح تنظیمات سیستم‌های CPUfreq و cpuidle مرتبط با هسته و سایر تنظیمات غیر مرتبط با مقیاس‌دهی فرکانس یا حالت‌های بیکاری استفاده کنید. چارچوب نظارت یکپارچه می‌تواند به هر دو، پارامترهای مرتبط با هسته و همچنین آمار سخت‌افزار دسترسی داشته باشد، و بنابراین برای معیارهای عملکرد بسیار مناسب است. همچنین به شما کمک می‌کند تا وابستگی‌های بین حالت‌های توربو و بیکاری را شناسایی کنید.

مشاهده تنظیمات فعلی با cpupower

دستور cpupower frequency-info آمار درایور cpufreq استفاده شده در هسته را نشان می‌دهد. علاوه بر این، نشان می‌دهد که آیا حالت‌های توربو (boost) در BIOS پشتیبانی و فعال شده‌اند یا خیر.

cpupower frequency-info
analyzing CPU 0:
driver: intel_pstate
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 0.97 ms.
hardware limits: 1.20 GHz – 3.80 GHz
available cpufreq governors: performance, powersave
current policy: frequency should be within 1.20 GHz and 3.80 GHz.
The governor “powersave” may decide which speed to use
within this range.
current CPU frequency is 3.40 GHz (asserted by call to hardware).
boost state support:
Supported: yes
Active: yes
3500 MHz max turbo 4 active cores
3600 MHz max turbo 3 active cores
3600 MHz max turbo 2 active cores
3800 MHz max turbo 1 active cores

مشاهده آمار بیکاری هسته با cpupower

زیرفرمان idle-info آمار درایور cpuidle استفاده شده در هسته را نشان می‌دهد. این بر روی تمام معماری‌هایی که از چارچوب هسته cpuidle استفاده می‌کنند کار می‌کند.

cpupower idle-info
CPUidle driver: intel_idle
CPUidle governor: menu
Analyzing CPU 0:
Number of idle states: 6
Available idle states: POLL C1-SNB C1E-SNB C3-SNB C6-SNB C7-SNB
POLL:
Flags/Description: CPUIDLE CORE POLL IDLE
Latency: 0
Usage: 163128
Duration: 17585669
C1-SNB:
Flags/Description: MWAIT 0x00
Latency: 2
Usage: 16170005
Duration: 697658910
C1E-SNB:
Flags/Description: MWAIT 0x01
Latency: 10
Usage: 4421617
Duration: 757797385
C3-SNB:
Flags/Description: MWAIT 0x10
Latency: 80
Usage: 2135929
Duration: 735042875
C6-SNB:
Flags/Description: MWAIT 0x20
Latency: 104
Usage: 53268
Duration: 229366052
C7-SNB:
Flags/Description: MWAIT 0x30
Latency: 109
Usage: 62593595
Duration: 324631233978

پس از پیدا کردن اینکه کدام حالت‌های بیکاری پردازنده با cpupower idle-info پشتیبانی می‌شوند، حالت‌های فردی را می‌توان با استفاده از دستور cpupower idle-set غیرفعال کرد. معمولاً می‌خواهید حالت خواب عمیق‌ترین را غیرفعال کنید، برای مثال:

cpupower idle-set -d 5

یا، برای غیرفعال کردن تمام CPUها با تأخیرهای مساوی یا بالاتر از 80:

cpupower idle-set -D 80

نظارت بر مصرف قدرت با powerTOP

می‌توانید مصرف قدرت سیستم را با powerTOP نظارت کنید. این به شما کمک می‌کند دلایل مصرف قدرت بی‌جهت بالا (برای مثال، فرآیندهایی که عمدتاً مسئول بیدار کردن یک پردازنده از حالت بیکاری آن هستند) را شناسایی کنید و تنظیمات سیستم خود را برای جلوگیری از این موارد بهینه کنید. این از هر دو پردازنده اینتل و AMD پشتیبانی می‌کند.

powerTOP ترکیبی از منابع مختلف اطلاعات (تجزیه و تحلیل برنامه‌ها، درایورهای دستگاه، گزینه‌های هسته، مقادیر و منابع وقفه‌هایی که پردازنده‌ها را از حالت‌های خواب بیدار می‌کنند) است و آنها را در یک صفحه نشان می‌دهد.

گزینه‌های تنظیم ویژه

بخش‌های زیر برخی از مرتبط‌ترین تنظیماتی که ممکن است بخواهید لمس کنید را برجسته می‌کنند.

گزینه‌های تنظیم برای P-States

زیرسیستم CPUfreq چندین گزینه تنظیم برای P-states ارائه می‌دهد: می‌توانید بین Governorهای مختلف切换 کنید، بر حداقل یا حداکثر فرکانس CPU که استفاده می‌شود تأثیر بگذارید یا پارامترهای Governor فردی را تغییر دهید.

برای تغییر به Governor دیگر در زمان اجرا، از cpupower frequency-set با گزینه -g استفاده کنید. برای مثال، اجرای دستور زیر (به عنوان root) Governor عملکرد را فعال می‌کند:

cpupower frequency-set -g performance

بخش ۵: جمع‌بندی و نتیجه‌گیری

مدیریت قدرت پردازنده در کرنل لینوکس یک ارکستراسیون پیچیده و هماهنگ بین دو مکانیزم اصلی است:

  • P-Stateها (زیرسیستم CPUFreq): این مکانیزم، “راننده فعال” است که در حین کارکرد پردازنده، با تنظیم دینامیک فرکانس و ولتاژ، بهینه‌سازی لازم را انجام می‌دهد.
  • C-Stateها (زیرسیستم CPUIDLE): این مکانیزم، “نگهبان خواب” است که در لحظات بیکاری، با غیرفعال کردن بخش‌های مختلف پردازنده، تا حد امکان در مصرف انرژی صرفه‌جویی می‌کند.

درک تعامل بین این دو و نحوه پیکربندی آن‌ها (از طریق انتخاب Governor مناسب یا تنظیم پارامترهای bios) برای مدیران سیستم، توسعه‌دهندگان نرم‌افزار و علاقه‌مندان به بهینه‌سازی عملکرد و عمر باتری دستگاه‌های قابل حمل، امری ضروری است. کرنل لینوکس با ارائه ابزارهای نظارتی غنی و انعطاف‌پذیری بالا، بستری ایده‌آل برای پیاده‌سازی و مطالعه این مکانیزم‌های پیشرفته فراهم می‌کند.

✍️ نویسنده: حسین سیلانی

🔗 درباره من: seilany.ir

📢 نویسندگی و مشارکت در وبلاگ: t.me/seilany