Files
evga-icx/README.md
T
2026-09-30 01:21:46 -07:00

119 lines
4.8 KiB
Markdown

# evga-icx
This program allows you to read temperature sensors off of supported EVGA 30-series iCX3 video cards, as well as control the fans individually.
Also a mashup of a bunch of other temperature sensor stuff too like Blackwell cards, lm_sensors, and DCGM metrics that I have just thrown in here.
## Prerequisites
A supported EVGA 30-series card with iCX3. This includes:
* RTX 3060 Ti
* RTX 3070
* RTX 3070 Ti
* RTX 3080
* RTX 3080 Ti
* RTX 3090
* RTX 3090 Ti
The number of fans supported depends, of course, on your particular model.
You must have the `i2c-dev` kernel module loaded with `modprobe i2c-dev`
Access to the `/dev/i2c` device files, which means either:
* Run as root, or
* Install udev rules to allow user access. If you have the OpenRGB udev rules installed to control the LEDs you already have this set up.
## Dependencies
* libi2c-dev
* libnvidia-ml-dev (if building with `USE_NVML=1`)
* datacenter-gpu-manager-4-dev (if building with `USE_DCGM=1`)
## Building
`make`
## Optional features
### NVML support
Add the make flag `USE_NVML=1` and the it will also display the main GPU temperature ("GPU1") as reported by the NVIDIA driver. It will also display the performance cap/clock reason and memory controller utilization. This requires the NVIDIA management library (NVML) to be installed.
### VRAM and Hotspot temperature
Run as root and you can also read the VRAM and "hotspot" temperatures. These require access the BAR0 through the `/sys/bus/pci/devices/*/resource0` device files. These sensors are **extremely** undocumented so I can't say anything about their accuracy. If you have a Blackwell (50 series) card you can read all 4 die temp sensors, a 'system' temperature, and every individual VRAM chip temp (add your card in blackwell-temps.c). You will probably require the kernel parameter `iomem=relaxed`.
### Datacenter GPU Manager metrics
Add the make flag `USE_DCGM=1` and it can display real-time metrics from supported Nvidia GPUs like SM occupancy, integer/fp pipe usage, tensor usage, and DRAM bandwidth utilization. This requires a Quadro/Workstation or a Tesla/Datacenter card, it does not work on GeForce cards.
### Hardware monitoring
This program can also monitor hardware sensors using the standard linux `hwmon` API. See board-sensors.h for examples of how to configure these, they must be staticlly compiled in.
## Usage
Note that when controlling fans directly through iCX3 they will fall offline from the Nvidia driver and show as 0 RPM until you return them to automatic mode.
```text
Available options:
--i2c N : Only probe I2C bus N instead of all (may help with stuttering or freezing when probing I2C devices)
--gpu N : Control only GPU N instead of all supported cards
--fan SPEED : Set all fans at once to SPEED (see below)
--fanN SPEED : Set fan N (0-3) to SPEED
SPEED may be one of the following:
'auto' to return the fan to its default control mode
N to set the fan to that manual % speed
[+/-]N to set that fan to an RPM offset from the GPU-controlled speed
--reset : Reset all fans to their default mode
--sensors : Print sensor readings even if setting a fan speed
--compact : Print sensor reading in a compact one-line per card format
--watch N : Keep printing output every N seconds
--overwrite : Overwrite previously displayed info with --watch and --compact instead of continuously logging new lines
--color : Print headers in color in --compact mode for better readability
--no-reasons : Do not query NVML for clock reasons (can cause stuttering)
--board : Also print temperatures from the CPU, motherboard, and other sensors
```
### Examples:
Read sensors:
```text
$ ./evga-icx
#0: EVGA GeForce RTX 3090 FTW3 Ultra v2 (/dev/i2c-3) @ c:00.0
Fan 0: 1751 RPM (58/0%, Auto)
Fan 1: 1730 RPM (57/0%, Auto)
Fan 2: 1712 RPM (57/0%, Offset)
Ext. fan: 0 RPM (0/0%, Offset)
GPU1: +65°C
GPU2: +57.8°C
VRAM: +74°C
MEM1: +56.1°C
MEM2: +53.5°C
MEM3: +55.5°C
PWR1: +48.2°C
PWR2: +53.2°C
PWR3: +59.6°C
PWR4: +58.0°C
PWR5: +51.1°C
HotSpot: +75°C
Mem util: 43%
Clock reasons: Power cap (0x4)
```
Compact one-line mode:
```text
$ ./evga-icx --compact
#0 FAN 59 59 58 0% GPU 66 60 MEM 74 58 55 58 PWR 49 55 61 60 53 HOT 77°C MEM 42% CLK Pwr
```
Set external fan to follow Nvidia driver controlled speed with a -500 RPM offset:
`evga-icx --fan3 -500`
Set all fans to manual 100%
`evga-icx --fan 100`
Force all fans on card 0 to off except for fan1:
`evga-icx --gpu 0 --fan1 0 --fan2 auto --fan3 0 --fan4 0`
Return fans back to Nvidia driver control:
`evga-icx --reset`
### Future capabilities
It appears to also be possible to read power and voltage sensors off of the K|NGP|N cards, and possibly even control the onboard OLED screen. If you have one of these and are willing to help test this please contact me!