Do not parse all nvidia-smi output, use --query-gpu option.
This commit is contained in:
parent
4bd3c716fa
commit
4b559e8b20
|
@ -3084,7 +3084,7 @@ static gboolean
|
||||||
sensors_nvidia_smi_read(gboolean setup)
|
sensors_nvidia_smi_read(gboolean setup)
|
||||||
{
|
{
|
||||||
gint n = 0;
|
gint n = 0;
|
||||||
gchar *args[] = { "nvidia-smi", "-q", "-a", NULL };
|
gchar *args[] = { "nvidia-smi", "--format=csv", "--query-gpu=temperature.gpu", NULL };
|
||||||
gchar *str, *stmp, id[64];
|
gchar *str, *stmp, id[64];
|
||||||
gchar *output = NULL;
|
gchar *output = NULL;
|
||||||
gchar *errout = NULL;
|
gchar *errout = NULL;
|
||||||
|
@ -3109,61 +3109,23 @@ sensors_nvidia_smi_read(gboolean setup)
|
||||||
if (result && output)
|
if (result && output)
|
||||||
{
|
{
|
||||||
str = output;
|
str = output;
|
||||||
/* Look for GPU N: or GPU X:Y:Z sections, but avoid GPU : lines
|
/* nvidia-smi --format=csv --query-gpu=temperature.gpu:
|
||||||
| Recent nvidia-smi output looks like (eg 270.41.06):
|
* temperature.gpu
|
||||||
|
|
* 52
|
||||||
| GPU 0:3:0
|
*/
|
||||||
| Product Name : GeForce GTX 460
|
if (sscanf(str, "temperature.gpu\n%f", &temp) == 1)
|
||||||
| ...
|
|
||||||
| Temperature
|
|
||||||
| Gpu : 32 C
|
|
||||||
|
|
|
||||||
| Older nvidia-smi output was like (eg 260.19.29):
|
|
||||||
|
|
|
||||||
| GPU 0:
|
|
||||||
| Product Name : GeForce GTX 285
|
|
||||||
| ...
|
|
||||||
| Temperature : 65 C
|
|
||||||
| Fan Speed : 100%
|
|
||||||
| Utilization
|
|
||||||
| GPU : 84%
|
|
||||||
| ...
|
|
||||||
*/
|
|
||||||
while ((str = g_strstr_len(str, -1, "GPU ")) != NULL)
|
|
||||||
{
|
{
|
||||||
str += 3;
|
if (setup)
|
||||||
if ( sscanf(str, " %63s", id) != 1
|
|
||||||
|| !strcmp(id, ":")
|
|
||||||
)
|
|
||||||
continue;
|
|
||||||
if ((str = g_strstr_len(str, -1, "Temperature")) != NULL)
|
|
||||||
{
|
{
|
||||||
str += 11;
|
smi = g_new0(NvidiaSmi, 1);
|
||||||
if (sscanf(str, " : %f", &temp) != 1)
|
smi->id = g_strdup(id);
|
||||||
{
|
smi->temp = temp;
|
||||||
stmp = str;
|
nvidia_smi_list = g_list_append(nvidia_smi_list, smi);
|
||||||
str = g_strstr_len(str, -1, "GPU Current Temp");
|
sensors_nvidia_smi_add(smi);
|
||||||
if (!str)
|
++n;
|
||||||
{
|
|
||||||
str = stmp;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
str += 27;
|
|
||||||
if (sscanf(str, " : %f", &temp) != 1)
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (setup)
|
|
||||||
{
|
|
||||||
smi = g_new0(NvidiaSmi, 1);
|
|
||||||
smi->id = g_strdup(id);
|
|
||||||
smi->temp = temp;
|
|
||||||
nvidia_smi_list = g_list_append(nvidia_smi_list, smi);
|
|
||||||
sensors_nvidia_smi_add(smi);
|
|
||||||
++n;
|
|
||||||
}
|
|
||||||
else if ((smi = nvidia_smi_lookup(id)) != NULL)
|
|
||||||
smi->temp = temp;
|
|
||||||
}
|
}
|
||||||
|
else if ((smi = nvidia_smi_lookup(id)) != NULL)
|
||||||
|
smi->temp = temp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (output)
|
if (output)
|
||||||
|
|
Loading…
Reference in New Issue