Hardware Temperature Monitoring¶
FreeBSD, and thus pfSense® software, supports monitoring hardware temperature on some chipsets. Unfortunately, support for this is limited but growing as hardware is replaced by newer Intel and AMD CPUs that include better monitoring. Where supported, it can be useful.
Widgets and Graphs¶
The System Information dashboard widget contains a single Temperature entry on systems with one or more available temperature sensors.
The Thermal Sensors widget displays the temperature from every available thermal sensor on the firewall. It also has configurable behavior for warning thresholds and output contents.
When the firewall detects that support for temperature monitoring is available, it also graphs the temperatures over time. See Monitoring Graphs for details.
Intel and AMD Temperature Monitoring¶
There is an option to select either an Intel or AMD temperature monitor module under System > Advanced on the Miscellaneous tab. These modules work with Intel Core series and later Intel chips, and similarly recent AMD chips, respectively. Support is not universal, but it is common, especially on Intel chips, even Atom-based chips. The temperature can be observed using the Thermal Sensors dashboard widget or by sysctl:
# sysctl -a | grep "dev.cpu.*.temperature"
dev.cpu.0.temperature: 46.0C
dev.cpu.1.temperature: 47.0C
dev.cpu.2.temperature: 47.0C
dev.cpu.3.temperature: 47.0C
These are typically on-die sensors so they only represent the CPU core temperatures, not other zones in the system.
ACPI Thermal Monitoring¶
FreeBSD also handles some settings through ACPI. To see if the hardware supports temperature monitoring, try the following command from a shell prompt or Diagnostics > Command:
sysctl hw.acpi.thermal
If the hardware is supported, output similar to the following will be shown:
hw.acpi.thermal.min_runtime: 0
hw.acpi.thermal.polling_rate: 10
hw.acpi.thermal.user_override: 0
hw.acpi.thermal.tz0.temperature: 22.5C
hw.acpi.thermal.tz0.active: -1
hw.acpi.thermal.tz0.passive_cooling: 1
hw.acpi.thermal.tz0.thermal_flags: 0
hw.acpi.thermal.tz0._PSV: 85.0C
hw.acpi.thermal.tz0._HOT: -1
hw.acpi.thermal.tz0._CRT: 100.0C
hw.acpi.thermal.tz0._ACx: 85.0C -1 -1 -1 -1 -1 -1 -1 -1 -1
In this example, there is only one thermal zone, and its temperature is 22.5C (72.5F).
From the acpi_thermal(4) man page:
hw.acpi.thermal.min_runtime
Number of seconds to continue active cooling once started. A new
active cooling level will not be selected until this interval
expires.
hw.acpi.thermal.polling_rate
Number of seconds between polling the current temperature.
hw.acpi.thermal.user_override
If set to 1, allow user override of various setpoints (below).
The original values for these settings are obtained from the BIOS
and system overheating and possible damage could occur if
changed. Default is 0 (no override).
hw.acpi.thermal.tz%d.active
Current active cooling system state. If this is non-negative,
the appropriate _AC%d object is running. Set this value to the
desired active cooling level to force the corresponding fan
object to the appropriate level.
hw.acpi.thermal.tz%d.passive_cooling
If set to 1, passive cooling is enabled. It does cooling without
fans using cpufreq(4) as the mechanism for controlling CPU speed.
Default is enabled for tz0 where it is available.
hw.acpi.thermal.tz%d.thermal_flags
Current thermal zone status. These are bit-masked values.
hw.acpi.thermal.tz%d.temperature
Current temperature for this zone.
hw.acpi.thermal.tz%d._PSV
Temperature to start passive cooling by throttling down CPU, etc.
This value can be overridden by the user.
hw.acpi.thermal.tz%d._HOT
Temperature to start critical suspend to disk (S4). This value
can be overridden by the user.
hw.acpi.thermal.tz%d._CRT
Temperature to start critical shutdown (S5). This value can be
overridden by the user.
hw.acpi.thermal.tz%d._ACx
Temperatures at which to switch to the corresponding active cooling
level. The lower the _ACx value, the higher the cooling power.
All temperatures are printed in Celsius. Values can be set in Celsius
(by providing a trailing "C") or Kelvin (by leaving off any trailing letter).
When setting a value by sysctl(8), do not specify a trailing decimal (i.e.,
90C instead of 90.0C).
The defaults for these values are taken from the BIOS and some systems will not allow changes. The only way to know is to try. Before attempting to alter any of these values, set this OID:
sysctl -w hw.acpi.thermal.user_override=1
These values may be set by adding the appropriate lines for the OIDs to System > Advanced on the Tunables tab. Try setting them at run time:
sysctl -w hw.acpi.thermal.tz0._CRT=120C