Added NVidia GPU graphics, memory, PCIe and video usage.
authorJean-Philippe Orsini <jeanfi@gmail.com>
Tue, 2 Sep 2014 11:00:04 +0000 (13:00 +0200)
committerJean-Philippe Orsini <jeanfi@gmail.com>
Tue, 2 Sep 2014 11:00:04 +0000 (13:00 +0200)
NEWS
src/lib/nvidia.c
src/lib/psensor.c
src/lib/psensor.h

diff --git a/NEWS b/NEWS
index 1b6e8be..e2af3a5 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -11,7 +11,7 @@ v1.1.2
 * List of sensors UI defined in glade file instead of code.
 * Fixed graph enabled setting not saved when toggle in the list of
   sensors.
-* Added NVidia GPU usage.
+* Added NVidia GPU graphics, memory, PCIe and video usage.
 
 v1.1.1
 ------
index 99df996..4c135d5 100644 (file)
@@ -116,8 +116,16 @@ static int get_usage(struct psensor *sensor)
                                          NV_CTRL_STRING_GPU_UTILIZATION,
                                          &temp);
 
-       if (res == True)
-               return get_usage_att(temp, "graphics");
+       if (res == True) {
+               if (sensor->type & SENSOR_TYPE_GRAPHICS)
+                       return get_usage_att(temp, "graphics");
+               else if (sensor->type & SENSOR_TYPE_VIDEO)
+                       return get_usage_att(temp, "video");
+               else if (sensor->type & SENSOR_TYPE_MEMORY)
+                       return get_usage_att(temp, "memory");
+               else if (sensor->type & SENSOR_TYPE_PCIE)
+                       return get_usage_att(temp, "PCIe");
+       }
 
        log_debug(_("NVIDIA proprietary driver not used or cannot "
                    "retrieve NVIDIA GPU usage."));
@@ -149,19 +157,29 @@ static struct psensor *create_temp_sensor(int id, int values_len)
        return s;
 }
 
-static struct psensor *create_usage_sensor(int id, int values_len)
+static struct psensor *create_usage_sensor(int id,
+                                          int subtype,
+                                          int values_len)
 {
        char name[200];
        char *sid;
        struct psensor *s;
        int t;
 
-       sprintf(name, "GPU%d graphics", id);
+       if (subtype & SENSOR_TYPE_GRAPHICS)
+               sprintf(name, "GPU%d graphics", id);
+       else if (subtype & SENSOR_TYPE_MEMORY)
+               sprintf(name, "GPU%d memory", id);
+       else if (subtype & SENSOR_TYPE_VIDEO)
+               sprintf(name, "GPU%d video", id);
+       else /* if (subtype & SENSOR_TYPE_PCIE) */
+               sprintf(name, "GPU%d PCIe", id);
+
 
        sid = malloc(strlen("NVIDIA") + 1 + strlen(name) + 1);
        sprintf(sid, "NVIDIA %s", name);
 
-       t = SENSOR_TYPE_NVCTRL | SENSOR_TYPE_GPU | SENSOR_TYPE_USAGE;
+       t = SENSOR_TYPE_NVCTRL | SENSOR_TYPE_GPU | SENSOR_TYPE_USAGE | subtype;
 
        s = psensor_create(sid,
                           strdup(name),
@@ -230,18 +248,31 @@ struct psensor **nvidia_psensor_list_add(struct psensor **sensors,
        ss = sensors;
        for (i = 0; i < n; i++) {
                s = create_temp_sensor(i, values_len);
-
                tmp = psensor_list_add(ss, s);
-
                if (ss != tmp)
                        free(ss);
 
                ss = tmp;
+               s = create_usage_sensor(i, SENSOR_TYPE_GRAPHICS, values_len);
+               tmp = psensor_list_add(ss, s);
+               if (ss != tmp)
+                       free(ss);
 
-               s = create_usage_sensor(i, values_len);
+               ss = tmp;
+               s = create_usage_sensor(i, SENSOR_TYPE_VIDEO, values_len);
+               tmp = psensor_list_add(ss, s);
+               if (ss != tmp)
+                       free(ss);
 
+               ss = tmp;
+               s = create_usage_sensor(i, SENSOR_TYPE_MEMORY, values_len);
                tmp = psensor_list_add(ss, s);
+               if (ss != tmp)
+                       free(ss);
 
+               ss = tmp;
+               s = create_usage_sensor(i, SENSOR_TYPE_PCIE, values_len);
+               tmp = psensor_list_add(ss, s);
                if (ss != tmp)
                        free(ss);
 
index 29dd185..ec145b2 100644 (file)
@@ -430,9 +430,15 @@ const char *psensor_type_to_str(unsigned int type)
 {
        if (type & SENSOR_TYPE_NVCTRL) {
                if (type & SENSOR_TYPE_TEMP)
-                       return "NVIDIA GPU Temperature";
-               else if (type & SENSOR_TYPE_USAGE)
-                       return "NVIDIA GPU Usage";
+                       return "Temperature";
+               else if (type & SENSOR_TYPE_GRAPHICS)
+                       return "Graphics usage";
+               else if (type & SENSOR_TYPE_VIDEO)
+                       return "Video usage";
+               else if (type & SENSOR_TYPE_MEMORY)
+                       return "Memory usage";
+               else if (type & SENSOR_TYPE_PCIE)
+                       return "PCIe usage";
                else
                        return "NVIDIA GPU";
        }
index b7d73b4..a62aeb5 100644 (file)
@@ -54,6 +54,11 @@ enum psensor_type {
        SENSOR_TYPE_GPU = 0x10000,
        SENSOR_TYPE_FAN = 0x20000,
 
+       SENSOR_TYPE_GRAPHICS = 0x40000,
+       SENSOR_TYPE_VIDEO = 0x80000,
+       SENSOR_TYPE_PCIE = 0x100000,
+       SENSOR_TYPE_MEMORY = 0x200000,
+
        /* Combinations */
        SENSOR_TYPE_HDD_TEMP = (SENSOR_TYPE_HDD | SENSOR_TYPE_TEMP),
        SENSOR_TYPE_CPU_USAGE = (SENSOR_TYPE_CPU | SENSOR_TYPE_USAGE)