Запись потоков в NFS мешает другим потокам ⇐ Linux
Запись потоков в NFS мешает другим потокам
Во встроенном приложении я использую дистрибутив Linux на базе Yocto с исправлениями RT. Один поток записывает данные в файл в файловой системе NFS, а другой поток раз в секунду запускает хроническое отслеживание с помощью popen.
Проблема в том, что хроническое отслеживание не возвращает результат в течение 100 мс, если оба потока выполняются в одном приложении. Однако если каждый поток выполняется в своем собственном процессе, он работает как положено. Насколько я понял, в Linux CFS (полностью справедливый планировщик) не имеет значения, принадлежат ли потоки одному и тому же процессу или нет.
Я ожидаю, что выполнение обоих потоков в одном процессе должно быть таким же, как выполнение каждого потока в отдельном процессе.
[*]Я пробовал без патчей RT, поведение было таким же. [*]Я пробовал ядро 4.x, 5.x и 6.x с тем же результатом. [*]Я пробовал писать в CIFS вместо NFS, результат тот же. [*]Запись на SD-карту работает как положено. [*]Запись в файловую систему sshfs работает должным образом.
Кто-нибудь знает, что здесь происходит? Есть ли какие-то параметры ядра, которые следует изменить? Какие-то ограничения в этом процессе?
Есть ли хороший способ устранить эту проблему?
Код, воспроизводящий проблему:
#include #include #include bool сделано {ложь}; std::строковый путь; команда bool (const char * cmd) { std::array буфер; std::строковый результат; авто труба = popen (cmd, «r»); если (!труба) { std::cout
Во встроенном приложении я использую дистрибутив Linux на базе Yocto с исправлениями RT. Один поток записывает данные в файл в файловой системе NFS, а другой поток раз в секунду запускает хроническое отслеживание с помощью popen.
Проблема в том, что хроническое отслеживание не возвращает результат в течение 100 мс, если оба потока выполняются в одном приложении. Однако если каждый поток выполняется в своем собственном процессе, он работает как положено. Насколько я понял, в Linux CFS (полностью справедливый планировщик) не имеет значения, принадлежат ли потоки одному и тому же процессу или нет.
Я ожидаю, что выполнение обоих потоков в одном процессе должно быть таким же, как выполнение каждого потока в отдельном процессе.
[*]Я пробовал без патчей RT, поведение было таким же. [*]Я пробовал ядро 4.x, 5.x и 6.x с тем же результатом. [*]Я пробовал писать в CIFS вместо NFS, результат тот же. [*]Запись на SD-карту работает как положено. [*]Запись в файловую систему sshfs работает должным образом.
Кто-нибудь знает, что здесь происходит? Есть ли какие-то параметры ядра, которые следует изменить? Какие-то ограничения в этом процессе?
Есть ли хороший способ устранить эту проблему?
Код, воспроизводящий проблему:
#include #include #include bool сделано {ложь}; std::строковый путь; команда bool (const char * cmd) { std::array буфер; std::строковый результат; авто труба = popen (cmd, «r»); если (!труба) { std::cout
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение