2013-07-30 3 views
1

Мне нужно написать приложение, которое получает статистику производительности на машине Linux. К сожалению, среда чрезвычайно ограничена памятью, поэтому использование стандартных инструментов командной строки на самом деле не является вариантом, поскольку мне нужно будет часто их опросить.Доступ к данным о производительности системы непосредственно из ядра linux

В идеале я хотел бы получить данные о производительности непосредственно из самого ядра, используя те же буферы и данные, которые он использует, чтобы максимально сократить требования к ОЗУ для моего приложения , Привязать мое приложение к ядру Linux так близко, что это не проблема, которую мы использовали когда-либо только в Linux, и я не вижу, что это действительно меняется.

Я провел последний день или два, просматривая исходный код ядра, но я должен признать, что его несколько потеряли. Может ли кто-нибудь указать мне нужное место для получения доступа к информации о производительности процессора/информации о производительности ввода/вывода/информации о производительности сети и информации об использовании полосы пропускания?

+1

Если средство командной строки может получить доступ к этой информации, вы также можете получить к ней доступ, не будучи в ядре. Вы, вероятно, можете прочитать источник своего любимого инструмента командной строки, чтобы узнать, как он работает. Не пытайтесь «жить в ядре», если только не существует ** очень ** веской причины. – nneonneo

+0

Взгляните на [Perf] (https://perf.wiki.kernel.org/index.php/Main_Page), это может быть полезно. – Eugene

ответ

5

Я думаю, что есть несколько файлов под/proc, например/proc/stat,/proc/diskstats,/proc/net/*.

Для получения информации о производительности ЦП с использованием/proc/stat формат файла определяется в файле ./fs/proc/stat.c в дереве исходного кода ядра Linux.

Для получения информации о доступе к диску, используя/proc/diskstats, формат файла определяется в файле ./block/genhd.c в дереве исходного кода ядра Linux, функция diskstats_show().

Для статистики, связанной с сетью, можно обратиться к файлам под/proc/net /. Но я не знаю, как рассчитать использование полосы пропускания на основе файла в каталоге/proc/net.

+0

Все файлы под '/ proc' должны быть прочитаны внутри пользовательского приложения. Большинство из них (например, '/ proc/$ pid/stat' или'/proc/$ pid/maps' следует читать последовательно, например, трубы или soqkets). –

+0

Отличный ответ. Спасибо. – Cromulent

Смежные вопросы