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!

Description
Read ICX3 sensors and control fans on Linux with EVGA's 30-series video cards.
Readme MIT-0 147 KiB
2025-02-17 04:25:10 -08:00
Languages
C 99.2%
Makefile 0.8%