ioctl, netlink и memmap для связи между пространством ядра и пространством пользователя

Получена некоторая статистическая информация о нашем пользовательском оборудовании, которая будет отображаться всякий раз, когда пользователь запрашивает использование команды в пользовательском пространстве Linux. Эта реализация в настоящее время использует интерфейс PROC. Мы начали добавлять больше статистической информации, но затем столкнулись с проблемой, когда для получения всех данных нужно было выполнить конкретную команду статистики дважды, поскольку интерфейс PROC был ограничен 1 страницей.

Как упоминалось выше, передача данных между ядром и пользовательским пространством не критична, но в зависимости от данных некоторые решения могут быть приняты пользователем. Наше требование к этому дизайну интерфейса состоит в том, что он должен быть способен передавать объем данных, возможно, больше 8192 байт, и команда должна использовать минимальные ресурсы ядра (, такие как блокировки и т. д., ), и она должна быть быстрой.

Использование ioctl может решить проблему, но, поскольку команда точно не управляет устройством, а собирает некоторую статистическую информацию, не уверен, что это хороший механизм для использования в Linux. В настоящее время мы используем ядро ​​​​3.4; не уверен, работает ли Netlink с потерями в этой версии (В предыдущих версиях я сталкивался с такими проблемами, как когда очередь заполнялась, сокет начинал сбрасывать данные ). mmap - еще один вариант. Может ли кто-нибудь предложить мне, какой интерфейс лучше всего использовать

9
задан lxusr 16 July 2012 в 09:27
поделиться