If you own a Minisforums MS-A2, you may have noticed that the system can run quite warm under load. I certainly have been putting my MS-A2 to work by running VMware Cloud Foundation (VCF) 9.0 and I have been trying various experiments in seeing how I can reduce both the thermals and thus the fan noise, which can get quite loud.
Even after applying the latest 1.0.2 MS-A2 Firmware, which now allows users to control the fan speeds, it did not help as the system was still running too hot. With extensive searching online, I was about to throw in the towel and thats when I came across Chris West's wiki page regarding a temperature fix and his extensive research on his MS-A2 (9955HX).
While Chris's MS-A2 is using the newer AMD Zen 5 processor, I figured it probably would apply to my MS-A2 (7945HX), which has the older AMD Zen 4 processor. I have used the workaround provided by Chris, please see his blog post for full details but by modifying the the TjMAX value from 0 to 78 (Advanced->AMD CBS->SMU Common Options->TjMAX), I have found that my MS-A2 have not been as warm as they were in the beginning.
I have been running with Chris recommendation for a couple of weeks now and with increased load and I have not observed any negative side affects, especially overall performance and responsiveness. I have also changed the fan speeds from quiet to auto (my full BIOS tweaks), which has increased the fans noise a bit but not as loud as they were when I first started using the MS-A2.
While the MS-A2 does not have a compatible IPMI device driver for ESXi to provide hardware health information including temperature, there is some information from SMART that we can pull for NVMe devices.
Credit to Ross Wynn who shared small local ESXCLI snippet that could run directly on ESXi shell to retrieve the composite temperature readings, I have created a modified version that uses PowerCLI instead, which means I can run this remotely but also query a set of ESXi hosts, which you can find below:
# Toggle output unit: "C" or "F"
$TempUnit = "F" # Change to "C" if you want Celsius
$vmhosts = Get-VMHost
Write-Host
foreach ($vmhost in $vmhosts) {
Write-Host "===== $($vmhost.Name) ====="
$esxcli = Get-EsxCli -VMHost $vmhost -V2
$adapters = $esxcli.nvme.adapter.list.Invoke()
foreach ($adapter in $adapters) {
$adapterName = $adapter.Adapter
$smartlog = $esxcli.nvme.device.log.smart.get.Invoke(@{ adapter = $adapterName })
# Try direct property first
$tempK = $smartlog.CompositeTemperature
# If not found, fallback to regex match
if (-not $tempK) {
$tempK = ($smartlog.PSObject.Properties | Where-Object { $_.Name -match "Composite" }).Value
}
if ($tempK) {
if ($TempUnit -eq "F") {
$temp = [math]::Round((($tempK - 273.15) * 9/5) + 32, 1)
$unit = "°F"
} else {
$temp = [math]::Round(($tempK - 273.15), 1)
$unit = "°C"
}
Write-Output ("Adapter: {0,-10} Composite: {1} {2}" -f $adapterName, $temp, $unit)
} else {
Write-Output ("Adapter: {0,-10} Composite: N/A" -f $adapterName)
}
}
Write-Host
}
Here is a screenshot from my current setup:

I will continue to monitor my setup and if you have other BIOS tweaks that you have found useful and helps with the overall thermals and noise, feel free to share!
Thanks for the comment!