# 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!