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