Мне нужно передавать несколько мегабайт данных в секунду из модуля ядра Linux в пользовательское пространство, и я не хочу пропустить ни одного сообщения из модуля, если я его прочитаю. Как лучше всего это сделать?
Для этого существует несколько возможных решений: Named-Pipes, Proc-File и Block-Device. Но я не уверен, какое из них выбрать и какое из них обещает наилучшую производительность, поскольку я новичок в ядре.
На данный момент я использую кольцевой буфер (со спин-блокировками) в модуле ядра для хранения сообщений, и если считывается файл Proc, я помещаю данные из кольцевого буфера в файл Proc; на стороне пользователя у меня есть программа, которая многократно запускает cat /proc/procfile
и показывает результат. Проблема с этими решениями заключается в том, что вместо получения
СООБЩЕНИЕ 1 СООБЩЕНИЕ 2 СООБЩЕНИЕ 3
на выходе вижу (иногда раз в несколько тысяч сообщений)
СООБЩЕНИЕ 1 СООБЩЕНИЕ3