Syscall накладные расходы - PullRequest
6 голосов
/ 23 ноября 2011

Насколько велики (приблизительно) издержки системного вызова ввода / вывода в Linux из программы C, я имею в виду, насколько плохо работает, например, много небольших операций read / write по сравнению с read / write для больших буферов (для обычных файлов или сетевых сокетов)? Приложение сильно многопоточное.

Ответы [ 2 ]

15 голосов
/ 23 ноября 2011

Системные вызовы занимают по крайней мере 1-2 микросекунды на большинстве современных машин только для издержек системного вызова , и гораздо больше времени, если они делают что-то сложное, что может блокировать или спать.Ожидайте не менее 20 микросекунд и порядка порядка миллисекунд для ввода-вывода.Сравните это с крошечным вызовом функции или макросом, который считывает байт из буфера пространства пользователя, который, вероятно, завершится за считанные наносекунды (возможно, 200 нс в плохой день).

3 голосов
/ 23 ноября 2011

Вы можете измерить это самостоятельно.Просто откройте /dev/zero и читайте и пишите, измеряя время.Также варьируйте количество байтов, которые вы вводите в каждый вызов - например, 1 байт, 2 байта, 128 байт, .. 4096 байт.Также позаботьтесь о том, чтобы использовать системные вызовы read(2) и write(2), а не что-либо с использованием внутренних буферов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...