Количество переключателей контекста в команде cp - PullRequest
0 голосов
/ 10 декабря 2011

Я пытаюсь понять, как команда cp похожа на / отличается от комбинации чтения / записи с точки зрения переключения контекста.Другими словами, использование cp для копирования данных из приложения эквивалентно использованию комбинации чтения / записи.Я думаю, что комбинация чтения / записи выполняет 4 переключения контекста - пользовательский контекст - контекст ядра (данные копируются в буфер ядра, затем данные копируются в пространство пользователя) - пользовательский контекст для чтения, а затем еще один набор из 2 переключателей контекста для записи.Сколько переключений контекста произойдет для cp?Также было бы лучше использовать нулевое копирование или sendfile, чем использовать cp?

Я на платформе Linux и использую ядро ​​позже, чем 2.4.

Спасибо.

Ответы [ 3 ]

1 голос
/ 10 декабря 2011

Я проверил исходный код cp из fileutils 4.1, и он копирует обычные файлы, вызывая read() и write() в цикле.Таким образом, для этого конкретного cp нет никакой разницы между ним и циклом * 1006.

Теперь количество вызовов read() и write() явно зависит от размера буфера, используемогокопирование.

Наконец, трудно понять, насколько количество переключений контекста даже важно, учитывая, что копия почти наверняка будет связана с вводом / выводом.Если это имеет отношение к вашим конкретным обстоятельствам, вы можете уточнить, что это такое, чтобы мы могли учесть эти обстоятельства.

0 голосов
/ 10 декабря 2011

Взгляните на соединение:

0 голосов
/ 10 декабря 2011

Переключение контекста также происходит асинхронно . В частности, для каждого такта системных часов (которые происходят каждые 20 или даже 1 миллисекунду) - потому что тогда ядро ​​перепланирует выполнение задач.

Я думаю, вы не должны заботиться о них в процессе cp.

Вы можете позаботиться о сокращении количества системных вызовов ; для копии файла это означает увеличение буферов при вызове read & write

...