Я пытаюсь разрешить проблему, которая возникает с буферами ввода-вывода в нечетких файлах в нескольких программах на разных языках, работающих в Linux.Решение по очистке буферов достаточно простое, но эта проблема незаполненных буферов происходит совершенно случайно.Вместо того, чтобы обращаться за помощью к тому, что может вызвать это, меня интересует, как создать (воспроизвести) и диагностировать ситуацию такого рода.
Это приводит к вопросу из двух частей:
Возможно ли искусственно и легко построить экземпляры, в которых в течение заданного периода времени можно иметь выходные буферы, для которых известно, что не обнулено?Мои поиски оказываются пустыми.Тривиальная базовая линия - забить жесткий диск (например, подкачку) в одном процессе, пытаясь записать большое количество данных из другого процесса.Хотя это «работает», это делает систему практически непригодной для использования: я не могу осмотреться и посмотреть, что происходит.
Существуют ли в Linux команды, которые могут идентифицировать данный процессесть незаполненные буферы вывода файла?Это что-то, что может быть запущено из командной строки, или это необходимо для непосредственного запроса к ядру?Я смотрел на fsync
, sync
, ioctl
, flush
, bdflush
и других.Однако, не имея метода для создания незаполненных буферов, неясно, что они могут показать.
Чтобы воспроизвести для других, пример для # 1 в C был бы превосходным, новопрос действительно не зависит от языка - просто знание подхода к созданию такой ситуации помогло бы на других языках, на которых я работаю.
Обновление 1. Мои извинения за любую путаницу.Как отметили несколько человек, буферы могут находиться в пространстве ядра или в пространстве пользователя.Это помогло точно определить проблемы: мы создаем большие грязные буферы ядра.Это различие и ответы полностью решают вопрос № 1: теперь кажется ясным, как воссоздать незаполненные буферы либо в пространстве пользователя, либо в пространстве ядра.Однако определить, какой идентификатор процесса имеет грязные буферы ядра, пока не ясно.