Hardware Monitoring Support¶
FreeBSD, and thus pfSense® software, supports hardware monitoring on a few 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 handy.
An Intel or AMD temperature monitor module may be selected under System > Advanced on the Miscellaneous tab. These 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.
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 acpi_thermal(4):
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 cool-
ing 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 let-
ter). When setting a value by sysctl(8), do not specify a trailing deci-
mal (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 on the fly like so:
sysctl -w hw.acpi.thermal.tz0._CRT=120C