Добавление данных в файл из ядра Linux - PullRequest
0 голосов
/ 01 марта 2011

Я пытаюсь собрать измерения количества циклов для определенного вызова sys (sys_clone) в ядре linux.Тем не менее, мой процесс не будет единственным, вызывающим это, и я не могу знать свой pid заранее;поэтому мне придется записывать каждый вызов для каждого pid.

Проблема, с которой я столкнулся, заключается в том, что единственный способ выяснить, как выводить эти данные (debugfs, sysfs, procfs), заключается вбуферы статического размера, которые будут быстро перезаписаны ненужными данными из других процессов, вызывающих sys_clone.

Итак, кто-нибудь знает, как добавить произвольное количество строк в файл, доступный для пользователя в Linux?

Ответы [ 2 ]

0 голосов
/ 02 марта 2011

Вы можете сохранить счетчик справа task_struct и сделать его видимым через файл для процесса в /proc/<pid>/.

0 голосов
/ 01 марта 2011

Вы можете использовать подход printk () / klogd и использовать кольцевой буфер, который экспортируется через / proc. Процесс в пользовательском пространстве блокирует чтение вашего файла / proc и, как только он читает что-то, что удаляется из буфера. Фактически, вы можете посмотреть, можно ли изменить klogd / syslogd, чтобы он также считывал ваш файл / proc, поэтому вам не нужно будет реализовывать часть пространства пользователя.

Если вы хорошо справляетесь с чем-то более простым, просто распечатайте вашу информацию в нормализованной форме с некоторым префиксом, а затем просто отфильтруйте ее из системного журнала, используя этот префикс.

Есть еще несколько возможностей (например, использование netlink для отправки сообщений в пространство пользователя), но я не рекомендую записывать в файл из ядра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...