| thermal-conf.xml(5) | File Formats Manual | thermal-conf.xml(5) |
نام (NAME)
thermal-conf.xml - پرونده پیکربندی دیمن مدیریت حرارت
خلاصه دستور (SYNOPSIS)
$(TDCONFDIR)/etc/thermald/thermal-conf.xml
توضیحات (DESCRIPTION)
پرونده thermal-conf.xml یک پرونده پیکربندی برای دیمن مدیریت حرارت (thermal daemon) است. این پرونده برای پیکربندی حسگرهای حرارتی، ناحیهها (zones) و دستگاههای خنککننده به کار میرود. محل قرارگیری این پرونده به گزینههای پیکربندی انتخابشده در زمان کامپایل بستگی دارد.
اصطلاحات بهکاررفته در این پرونده با «مشخصات رابط پیشرفته پیکربندی و توان» (ACPI) مطابقت دارد. مدل حرارتی ACPI بر پایه نواحی مفهومی در پلتفرم به نام «ناحیههای حرارتی» (thermal zones) بنا شده است که از نظر فیزیکی دربرگیرنده دستگاهها، حسگرهای حرارتی و کنترلهای خنککننده هستند. برای نمونه، یک ناحیه حرارتی میتواند پردازنده (CPU) یا بدنه لپتاپ باشد. یک ناحیه میتواند شامل چندین حسگر برای پایش دما باشد. یک دستگاه خنککننده، رابطی برای کاهش دمای دستگاه مبدأ فراهم میکند؛ دستگاهی که باعث افزایش دما میشود. نمونهای از یک دستگاه خنککننده، فن (FAN) یا یک درایور لینوکس است که میتواند توان پردازشی دستگاه مبدأ را محدود (throttle) کند.
پیکربندی هر ناحیه حرارتی شامل یک یا چند «نقطه تحریک» (trip point) است. نقطه تحریک، دمایی است که در آن باید یک دستگاه خنککننده فعال شود.
یک دستگاه خنککننده میتواند فعال (active) یا غیرفعال (passive) باشد. نمونهای از یک دستگاه فعال، فن است که بدون کاهش کارایی سیستم عمل خنکسازی را انجام میدهد، اما در مقابل توان مصرفی و صدای بیشتری ایجاد میکند. یک دستگاه غیرفعال از محدودسازی کارایی برای مهار دما استفاده میکند. علاوه بر دستگاههای خنککننده موجود در sysfs حرارتی، دستگاههای خنککننده زیر نیز درون thermald تعبیه شدهاند و میتوان از آنها به عنوان نوع معتبر دستگاه خنککننده استفاده کرد:
- rapl_controller
- intel_pstate
- cpufreq
- LCD
ساختار sysfs حرارتی در لینوکس (/sys/class/thermal) روشی برای نمایش پیکربندی ACPI به ازای هر پلتفرم فراهم میآورد. فرماندار حرارتی هسته (kernel thermal governor) از این دادهها برای مهار دمای پلتفرم استفاده میکند. با این حال محدودیتهایی وجود دارد که thermald تلاش میکند آنها را برطرف سازد؛ برای نمونه:
- چنانچه دادههای ACPI بهینهسازی نشده باشند یا دارای اشکال باشند. در این حالت میتوان از thermal-conf.xml برای اصلاح رفتار بدون نیاز به تغییر در BIOS استفاده کرد.
- ممکن است ناحیههای حرارتی توسط sysfs حرارتی ارائه شده باشند اما هیچ اقدام خنککنندهای به آنها متصل نشده باشد. در این حالت میتوان از thermal-conf.xml برای پیوند دادن دستگاههای خنککننده به آن ناحیهها استفاده نمود.
- شاید بهترین روش خنکسازی در sysfs حرارتی وجود نداشته باشد. در این حالت میتوان از thermal-conf.xml برای پیوند یک ناحیه به یک دستگاه خنککننده خارجی استفاده کرد.
- تعیین روابط حرارتی. یک ناحیه ممکن است از چندین دستگاه مبدأ به درجات مختلف تأثیر بپذیرد. در این حالت میتوان از thermal-conf.xml برای تعیین میزان اثرگذاری نسبی جهت اعمال جبرانسازی استفاده نمود.
قالب فایل (FILE FORMAT)
قالب پرونده پیکربندی با مشخصات XML مطابقت دارد. مجموعهای از برچسبها برای تعریف پلتفرم، حسگرها، ناحیهها، دستگاههای خنککننده و نقاط تحریک تعریف شدهاند.
حسگرهای مجازی از دو قالب XML پشتیبانی میکنند:
- •
- SensorLink یک تبدیل خطی ساده را با استفاده از یک حسگر متصل تعریف میکند:
- •
- LinkSensor یک سهم را برای یک حسگر مجازی پیشرفته تعریف میکند. میتوان چندین مدخل LinkSensor ارائه داد و سهمهای آنها با یکدیگر جمع میشوند. برای هر مدخل:
contribution = Coeff * avg
virtual_temp = sum of all contributions
برای حسگرهای مجازی پیشرفته، هنگامی که PowerSensor برابر با 0 باشد، دمای حسگر متصل پیش از اعمال محاسبات میانگینگیری و ضرایب، از میلیدرجه سلسیوس به درجه سلسیوس تبدیل میشود. المانهای اختیاری PollingTableEntry میتوانند برای تغییر دوره تناوب پایش (polling period) حسگر مجازی بر پایه دمای مجازی فعلی استفاده شوند.
<ThermalConfiguration>
<Platform>
<Name>Example Platform Name</Name>
<!-- شناسه UUID اختیاری است؛ در صورت وجود مطابقت داده خواهد شد.
هم نام محصول و هم UUID میتوانند شامل نویسه عمومی "*" باشند که با هر
پلتفرمی مطابقت دارد. -->
<UUID>Example UUID</UUID>
<!-- قالب پرونده پیکربندی با مشخصات XML مطابقت دارد. مجموعهای از
برچسبها برای تعریف پلتفرم، حسگرها، ناحیهها، دستگاههای
خنککننده و نقاط تحریک تعریف شدهاند. -->
<ProductName>Example Product Name</ProductName>
<Preference>QUIET|PERFORMANCE</Preference>
<!-- حالت Quiet تنها از دستگاههای خنککننده غیرفعال استفاده خواهد کرد.
حالت "PERFORMANCE" تنها دستگاههای فعال را برمیگزیند. -->
<ThermalSensors>
<ThermalSensor>
<!-- حسگر جدید با نوع و مسیر -->
<Type>example_sensor_1</Type>
<Path>/some_path</Path>
<AsyncCapable>0</AsyncCapable>
</ThermalSensor>
<ThermalSensor>
<!-- از پیش در sysfs حرارتی موجود است؛ این مورد را فعال کنید یا
پیکربندی را تغییر دهید. برای نمونه، در اینجا نشان میدهیم که
حسگر میتواند رویدادهای ناهمگام را برای پرهیز از پایش دورهای انجام دهد. -->
<Type>example_thermal_sysfs_sensor</Type>
<!-- در صورت توانایی ناهمگام، نیازی به پایش دورهای نیست. -->
<AsyncCapable>1</AsyncCapable>
</ThermalSensor>
<ThermalSensor>
<!-- فرم ساده حسگر مجازی. نتیجه برابر است با:
example_sensor_1 * 0.5 + 10.
فرمول:
virtual_temp = linked_sensor * Multiplier + Offset. -->
<Type>example_virtual_sensor</Type>
<Virtual>1</Virtual>
<SensorLink>
<SensorType>example_sensor_1</SensorType>
<Multiplier> 0.5 </Multiplier>
<Offset> 10 </Offset>
</SensorLink>
</ThermalSensor>
<ThermalSensor>
<!-- فرم پیشرفته حسگر مجازی با استفاده از چندین حسگر پیوندیافته
و مدخلهای اختیاری جدول پایش.
برای هر مدخل LinkSensor:
avg = Offset * current_sample + (1 - Offset) * previous_average
contribution = Coeff * avg
virtual_temp = sum of all contributions.
هنگامی که PowerSensor برابر 0 باشد، مقدار حسگر حرارتی متصل
پیش از اعمال فرمول از میلیدرجه به درجه سلسیوس تبدیل میشود. -->
<Type>example_virtual_sensor_advanced</Type>
<Virtual>1</Virtual>
<LinkSensor>
<SensorType>example_sensor_1</SensorType>
<Coeff> 0.7 </Coeff>
<Offset> 0.2 </Offset>
<PowerSensor> 0 </PowerSensor>
</LinkSensor>
<LinkSensor>
<SensorType>rapl_pkg_power</SensorType>
<Coeff> 0.3 </Coeff>
<Offset> 0.5 </Offset>
<PowerSensor> 1 </PowerSensor>
</LinkSensor>
<PollingTableEntry>
<VirtualTemp> 45000 </VirtualTemp>
<SamplePeriod> 10 </SamplePeriod>
</PollingTableEntry>
<PollingTableEntry>
<VirtualTemp> 70000 </VirtualTemp>
<SamplePeriod> 2 </SamplePeriod>
</PollingTableEntry>
</ThermalSensor>
</ThermalSensors>
<ThermalZones>
<ThermalZone>
<Type>Example Zone type</Type>
<TripPoints>
<TripPoint>
<SensorType>example_sensor_1</SensorType>
<!-- دمایی که در آن باید اقدام صورت گیرد. -->
<Temperature> 75000 </Temperature>
<!-- انواع max/passive/active. اگر نوع MAX تعیین شود،
دیمن از کنترل PID برای محدودسازی تهاجمی به منظور
جلوگیری از رسیدن به این دما استفاده خواهد کرد. -->
<type>max</type>
<!-- حالتهای SEQUENTIAL یا PARALLEL. هنگامی که دمای نقطه تحریک
نقض شود، تعدادی دستگاه خنککننده میتوانند فعال شوند.
اگر نوع کنترل SEQUENTIAL باشد، پیش از رفتن به سراغ دستگاه بعدی،
از نهایت ظرفیت اولین دستگاه خنککننده استفاده میکند. -->
<ControlType>SEQUENTIAL</ControlType>
<CoolingDevice>
<index>1</index>
<type>example_cooling_device</type>
<!-- از میزان اثرگذاری (influence) برای اولویتبندی دستگاههای
خنککننده استفاده میشود. اولین دستگاه خنککنندهای که استفاده
میشود دارای بیشترین اثرگذاری است. -->
<influence> 100 </influence>
<!-- تأخیر در استفاده از این دستگاه خنککننده؛ خنک شدن واقعی
یک ناحیه نیز مقداری زمان میبرد. -->
<SamplingPeriod> 12 </SamplingPeriod>
<!-- تنظیم وضعیتی معین از این دستگاه خنککننده هنگامی که این
نقطه تحریک نقض شود. -->
<TargetState> 6 </TargetState>
<!-- بازه اختیاری محدودسازی به ازای نقطه تحریک. از یک یا هر دو استفاده کنید.
در صورت حذف، از MinState/MaxState دستگاه خنککننده استفاده میشود. -->
<TargetMinState> 2 </TargetMinState>
<TargetMaxState> 8 </TargetMaxState>
</CoolingDevice>
</TripPoint>
</TripPoints>
</ThermalZone>
</ThermalZones>
<CoolingDevices>
<CoolingDevice>
<!-- دستگاه خنککننده میتواند با یک نوع و به صورت اختیاری با یک
مسیر sysfs مشخص شود. اگر نوع دستگاه از پیش در sysfs حرارتی
موجود باشد، نیازی به مسیر نیست. جبرانسازی میتواند از
min/max و اندازه گام برای افزایش سرمایش سیستم استفاده کند.
از دوره پایداری (Debounce period) میتوان برای اعمال دوره انتظار
جهت انجام اقدام استفاده کرد. -->
<Type>example_cooling_device</Type>
<MinState>0</MinState>
<IncDecStep>10</IncDecStep>
<ReadBack> 0 </ReadBack>
<MaxState>50</MaxState>
<DebouncePeriod>5000</DebouncePeriod>
<!-- چنانچه پارامترهای PID وجود نداشته باشند، جبرانسازی به صورت
گامبهگام و نمایی (اگر یک گام نتواند روند را تغییر دهد) افزایش مییابد.
از سوی دیگر، میتوان پارامترهای PID را تعیین کرد تا گام بعدی
از محاسبات PID با استفاده از ضرایب ارائهشده بهره گیرد. -->
<PidControl>
<kp>0.001</kp>
<kd>0.0001</kd>
<ki>0.0001</ki>
</PidControl>
<!-- نوشتن پیشوندی متصل به مقدار وضعیت؛ مانند زیر که پیشوند "level "
است. این مقدار، فاصلهها را دقیقاً همانطور که وارد شده هنگام نوشتن
در sysfs حفظ میکند. -->
<WritePrefix>level </WritePrefix>
</CoolingDevice>
</CoolingDevices>
</Platform>
</ThermalConfiguration>
نمونههای پیکربندی (EXAMPLE CONFIGURATIONS)
نمونه ۱: این یک پیکربندی بسیار ساده برای تغییر حد غیرفعال (passive limit) پردازنده (CPU) است. به جای مقدار پیشفرض، دمای جدید ۸۶ درجه سلسیوس در این پیکربندی استفاده میشود. به محض رسیدن دما به ۸۶ درجه، فرآیند خنکسازی آغاز خواهد شد.
<?xml version="1.0"?>
<ThermalConfiguration>
<Platform>
<Name>Override CPU default passive</Name>
<ProductName>*</ProductName>
<Preference>QUIET</Preference>
<ThermalZones>
<ThermalZone>
<Type>cpu</Type>
<TripPoints>
<TripPoint>
<Temperature>86000</Temperature>
<type>passive</type>
</TripPoint>
</TripPoints>
</ThermalZone>
</ThermalZones>
</Platform>
</ThermalConfiguration>
نمونه ۲: در این پیکربندی، هنگامی که حسگری مانند "SEN2" به دمای ۶۰ درجه سلسیوس برسد، نور پسزمینه را کنترل میکنیم. در اینجا "LCD" یک دستگاه خنککننده استاندارد است که از رابط sysfs نور پسزمینه لینوکس استفاده میکند. از آنجا که "LCD_Zone" یک ناحیه حرارتی معتبر در sysfs حرارتی لینوکس روی پلتفرم آزمایشی است، نیازی به ارائه مسیر sysfs برای "LCD_Zone" نداریم. ساختار sysfs حرارتی لینوکس از پیش توسط برنامه thermald پارس و بارگذاری شده است.
<?xml version="1.0"?>
<ThermalConfiguration>
<Platform>
<Name>Change Backlight</Name>
<ProductName>*</ProductName>
<Preference>QUIET</Preference>
<ThermalZones>
<ThermalZone>
<Type>LCD_Zone</Type>
<TripPoints>
<TripPoint>
<SensorType>SEN2</SensorType>
<Temperature>60000</Temperature>
<type>passive</type>
<CoolingDevice>
<Type>LCD</Type>
</CoolingDevice>
</TripPoint>
</TripPoints>
</ThermalZone>
</ThermalZones>
</Platform>
</ThermalConfiguration>
نمونه ۳: در این نمونه، یک دستگاه Lenovo ThinkPad X220 و سرعت فن آن کنترل میشود. در اینجا دستگاه خنککننده "_Fan" را میتوان از طریق مسیر sysfs به نشانی /sys/devices/platform/thinkpad_hwmon/pwm1 کنترل کرد. هنگامی که دمای x86_pkg_temp به ۴۵ درجه سلسیوس برسد، چنانچه مهار دما در ۴۵ درجه ممکن نباشد، فن با سرعتهای فزاینده روشن و به کار گرفته میشود.
<?xml version="1.0"?>
<ThermalConfiguration>
<Platform>
<Name>Lenovo ThinkPad X220</Name>
<ProductName>*</ProductName>
<Preference>QUIET</Preference>
<ThermalZones>
<ThermalZone>
<Type>x86_pkg_temp</Type>
<TripPoints>
<TripPoint>
<SensorType>x86_pkg_temp</SensorType>
<Temperature>45000</Temperature>
<type>passive</type>
<ControlType>SEQUENTIAL</ControlType>
<CoolingDevice>
<index>1</index>
<type>_Fan</type>
<influence> 100 </influence>
<SamplingPeriod> 12 </SamplingPeriod>
</CoolingDevice>
</TripPoint>
</TripPoints>
</ThermalZone>
</ThermalZones>
<CoolingDevices>
<CoolingDevice>
<Type>_Fan</Type>
<Path>/sys/devices/platform/thinkpad_hwmon/pwm1</Path>
<MinState>0</MinState>
<IncDecStep>30</IncDecStep>
<ReadBack> 0 </ReadBack>
<MaxState>255</MaxState>
<DebouncePeriod>5</DebouncePeriod>
</CoolingDevice>
</CoolingDevices>
</Platform>
</ThermalConfiguration>
نمونه ۴: نمونه زیر نحوه استفاده از PID را نشان میدهد. در اینجا هنگامی که دما از ۸۰ درجه سلسیوس فراتر رفت، جبرانسازی با استفاده از الگوریتم PID با در نظر گرفتن ۸۰ درجه به عنوان نقطه تنظیم (set point) کنترلر محاسبه میشود. مقدار جبرانسازی به میزان انحراف از نقطه تنظیم بستگی دارد. در اینجا دستگاه خنککننده داخلی و پیشفرض پردازنده با وضعیت کمینه 0 و وضعیت بیشینه 10 مورد استفاده قرار میگیرد.
<?xml version="1.0"?>
<ThermalConfiguration>
<Platform>
<Name>Use PID param </Name>
<ProductName>*</ProductName>
<Preference>QUIET</Preference>
<ThermalZones>
<ThermalZone>
<Type>x86_pkg_temp</Type>
<TripPoints>
<TripPoint>
<SensorType>x86_pkg_temp</SensorType>
<Temperature>80000</Temperature>
<type>passive</type>
<ControlType>SEQUENTIAL</ControlType>
<CoolingDevice>
<type>Processor</type>
</CoolingDevice>
</TripPoint>
</TripPoints>
</ThermalZone>
</ThermalZones>
<CoolingDevices>
<CoolingDevice>
<Type>Processor</Type>
<PidControl>
<kp>0.0002</kp>
<kd>0</kd>
<ki>0</ki>
</PidControl>
</CoolingDevice>
</CoolingDevices>
</Platform>
</ThermalConfiguration>
نمونه ۵: نمونه زیر نحوه مهار فن را در شرایطی نشان میدهد که sysfs انتظار یک پیشوند متنی (رشتهای) را دارد. برای نمونه به جای نوشتن صرف یک عدد در sysfs کنترل فن، این رابط به قرار گرفتن عبارت "level " پیش از مقدار شاخص سرعت نیاز دارد.
<?xml version="1.0"?>
<ThermalConfiguration>
<Platform>
<Name>Use Fan control first then CPU throttle </Name>
<ProductName>*</ProductName>
<Preference>QUIET</Preference>
<ThermalZones>
<ThermalZone>
<Type>x86_pkg_temp</Type>
<TripPoints>
<TripPoint>
<SensorType>x86_pkg_temp</SensorType>
<Temperature>80000</Temperature>
<type>passive</type>
<ControlType>SEQUENTIAL</ControlType>
<CoolingDevice>
<type>_fan_</type>
</CoolingDevice>
</TripPoint>
</TripPoints>
</ThermalZone>
</ThermalZones>
<CoolingDevices>
<CoolingDevice>
<Type>_fan_</Type>
<Path>/proc/acpi/ibm/fan</Path>
<WritePrefix>level </WritePrefix>
<MinState>0</MinState>
<MaxState>5</MaxState>
<DebouncePeriod>10</DebouncePeriod>
</CoolingDevice>
</CoolingDevices>
</Platform>
</ThermalConfiguration>
نمونه ۶: مشابه با نمونه ۵، اما ثبت سرعتهای مختلف در دماهای متفاوت.
<?xml version="1.0"?>
<ThermalConfiguration>
<Platform>
<Name>Use Fan control first then CPU throttle </Name>
<ProductName>*</ProductName>
<Preference>QUIET</Preference>
<ThermalZones>
<ThermalZone>
<Type>x86_pkg_temp</Type>
<TripPoints>
<TripPoint>
<SensorType>x86_pkg_temp</SensorType>
<Temperature>80000</Temperature>
<type>passive</type>
<CoolingDevice>
<type>_fan_</type>
<TargetState>1</TargetState>
</CoolingDevice>
</TripPoint>
<TripPoint>
<SensorType>x86_pkg_temp</SensorType>
<Temperature>85000</Temperature>
<type>passive</type>
<CoolingDevice>
<type>_fan_</type>
<TargetState>2</TargetState>
</CoolingDevice>
</TripPoint>
</TripPoints>
</ThermalZone>
</ThermalZones>
<CoolingDevices>
<CoolingDevice>
<Type>_fan_</Type>
<Path>/proc/acpi/ibm/fan</Path>
<WritePrefix>level </WritePrefix>
<MinState>0</MinState>
<MaxState>5</MaxState>
<DebouncePeriod>10</DebouncePeriod>
</CoolingDevice>
</CoolingDevices>
</Platform>
</ThermalConfiguration>
نمونه ۷: استفاده از محدودیتهای توان RAPL برای مهار حرارت.
<?xml version="1.0"?> <!-- BEGIN --> <ThermalConfiguration> <Platform> <Name> TEST </Name> <ProductName>Example_RAPL_Power </ProductName> <Preference>QUIET</Preference> <PPCC> <!-- تعیین بیشینه/کمینه محدودیت توان RAPL برای پلتفرم. محدودیتها بر حسب میلیوات هستند. اندازه گام برای کاهش/افزایش در هر بازه نمونهبرداری. پنجره زمانی بر حسب میلیثانیه. --> <PowerLimitIndex>0</PowerLimitIndex> <PowerLimitMaximum>15000</PowerLimitMaximum> <PowerLimitMinimum>2000</PowerLimitMinimum> <TimeWindowMinimum>20</TimeWindowMinimum> <TimeWindowMaximum>30</TimeWindowMaximum> <StepSize>1000</StepSize> </PPCC> <ThermalZones> <ThermalZone> <Type>TestZone</Type> <TripPoints> <TripPoint> <SensorType>SEN3</SensorType> <Temperature>50000</Temperature> <Type>Passive</Type> <CoolingDevice> <Type>B0D4</Type> <SamplingPeriod>3</SamplingPeriod> <TargetState>2147483647</TargetState> <!-- این تنظیم مشخص میکند که وقتی SEN3 به دمای ۵۰ درجه سلسیوس رسید، بیشینه محدودیت توان RAPL روی حداکثر محدودیت توان مجاز پلتفرم تنظیم شود. --> </CoolingDevice> </TripPoint> <TripPoint> <SensorType>SEN3</SensorType> <Temperature>52000</Temperature> <Type>Passive</Type> <CoolingDevice> <Type>B0D4</Type> <SamplingPeriod>3</SamplingPeriod> <TargetState>8500000</TargetState> <!-- این تنظیم مشخص میکند که وقتی SEN3 به دمای ۵۲ درجه سلسیوس رسید، بیشینه محدودیت توان RAPL روی ۸٫۵ وات تنظیم شود. --> </CoolingDevice> </TripPoint> <TripPoint> <SensorType>SEN3</SensorType> <Temperature>60000</Temperature> <Type>Passive</Type> <CoolingDevice> <Type>B0D4</Type> <SamplingPeriod>3</SamplingPeriod> <TargetState>4500000</TargetState> <!-- این تنظیم مشخص میکند که وقتی SEN3 به دمای ۶۰ درجه سلسیوس رسید، بیشینه محدودیت توان RAPL روی ۴٫۵ وات تنظیم شود. --> </CoolingDevice> </TripPoint> <TripPoint> <SensorType>SEN3</SensorType> <Temperature>65000</Temperature> <Type>Passive</Type> <CoolingDevice> <Type>B0D4</Type> <SamplingPeriod>3</SamplingPeriod> <!-- این تنظیم مشخص میکند که وقتی SEN3 به دمای ۶۵ درجه سلسیوس رسید، بیشینه محدودیت توان RAPL روی حداقل محدودیت توان پلتفرم تنظیم شود. --> </CoolingDevice> </TripPoint> </TripPoints> </ThermalZone> </ThermalZones> </Platform> </ThermalConfiguration>
| December 18, 2018 |