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)
|
||||
{
|
||||
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 *output = NULL;
|
||||
gchar *errout = NULL;
|
||||
|
@ -3109,61 +3109,23 @@ sensors_nvidia_smi_read(gboolean setup)
|
|||
if (result && output)
|
||||
{
|
||||
str = output;
|
||||
/* Look for GPU N: or GPU X:Y:Z sections, but avoid GPU : lines
|
||||
| Recent nvidia-smi output looks like (eg 270.41.06):
|
||||
|
|
||||
| GPU 0:3:0
|
||||
| Product Name : GeForce GTX 460
|
||||
| ...
|
||||
| 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)
|
||||
/* nvidia-smi --format=csv --query-gpu=temperature.gpu:
|
||||
* temperature.gpu
|
||||
* 52
|
||||
*/
|
||||
if (sscanf(str, "temperature.gpu\n%f", &temp) == 1)
|
||||
{
|
||||
str += 3;
|
||||
if ( sscanf(str, " %63s", id) != 1
|
||||
|| !strcmp(id, ":")
|
||||
)
|
||||
continue;
|
||||
if ((str = g_strstr_len(str, -1, "Temperature")) != NULL)
|
||||
if (setup)
|
||||
{
|
||||
str += 11;
|
||||
if (sscanf(str, " : %f", &temp) != 1)
|
||||
{
|
||||
stmp = str;
|
||||
str = g_strstr_len(str, -1, "GPU Current Temp");
|
||||
if (!str)
|
||||
{
|
||||
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;
|
||||
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;
|
||||
}
|
||||
}
|
||||
if (output)
|
||||
|
|
Loading…
Reference in New Issue