Невозможно выполнить обновление из-за недостатка места при загрузке

ethtoolполучает статистику с помощью SIOCETHTOOLioctl, который принимает указатель на struct ethtool_stats. Чтобы получить статистику, поле cmdструктуры должно иметь значение ETHTOOL_GSTATS. Прежде чем вызывать этот ioctl, вы должны использовать другой ethtool ioctl (также SIOCETHTOOLлибо с указателем на struct ethtool_sset_infoс его полем cmd, инициализированным значением ETHTOOL_GSSET_INFO, либо с указателем на struct ethtool_drvinfoс его cmd. ] поле инициализировано значением ETHTOOL_GDRVINFO), чтобы узнать количество различных значений статистики, которые драйвер собирается вернуть, чтобы вы могли выделить достаточно памяти для struct ethtool_stats.

...И если вы не программируете на C, очень плотное, богатое -жаргоном описание, приведенное выше, вероятно, не имело для вас никакого смысла. Если вам нужно получить доступ к статистике ethtoolв сценарии, я бы рекомендовал использовать язык сценариев, который имеет доступные привязки для интерфейса ethtool,например Perl (модульLinux::Ethtool)или Python (по-видимомуhttps://pypi.org/project/netifaces/). Это должно упростить доступ к статистике.

Конечно, вы всегда можете проанализировать вывод команды ethtool, но если вы хотите опрашивать статистику каждую секунду, может быть полезно исключить необходимость vfork()запускать один или два новых процесса каждый раз, когда вы нужна статистика.

Результирующие значения поступают от драйвера сетевой карты. Тот факт, что разработчик драйвера не добавил код для доступа к соответствующей статистике ни через /sys/class/net//statistics, ни через /proc/net/dev, откуда ifconfigполучает их, предполагает, что драйвер может определять эти значения несколько иначе, чем /proc/net/devи/ или /sys/class/net/*/statistics... или это может просто указывать на то, что реализация драйвера, к сожалению, не идеальна.

(Разработчик, возможно, решил сначала реализовать ethtoolAPI, поскольку он является самым новым, и оставил старые интерфейсы статистики незавершенными, «когда у меня будет время». Также обратите внимание, что команда ifconfigустарела в большинстве дистрибутивов, поскольку она больше не поддерживается должным образом.)

Чтобы узнать подробности, вам, возможно, придется прочитать документацию и/или комментарии к исходному коду самого драйвера. Поскольку вы не указали ни модель сетевой карты, ни имя драйвера, никто другой не сможет это сделать за вас. Выходные данные ethtool -i wlp2s0будут очень полезны для идентификации драйвера сетевой карты.

1
20.11.2021, 13:42
0 ответов

Теги

Похожие вопросы