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.
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
) - libpci-dev (if building with
USE_LIBPCI=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
Add the make flag USE_LIBPCI=1
and you can also read the VRAM and "hotspot" temperatures. These require direct memory access to the PCI device so you must run as root and also enable the kernel parameter iomem=relaxed
. These sensors are extremely undocumented so I can't say anything about their accuracy.
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.
Available options:
--i2c N : Only probe I2C bus N instead of all (may help with stuttering with --watch)
--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
Examples:
Read sensors:
$ ./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:
$ ./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!