Я хотел бы знать причины, по которым ядро Linux (или любая другая основная ОС) не имеет функции для работы в сети с нулевым копированием? Под нулевой копией я подразумеваю, что пакет/поток данных не копируется для передачи в приложение в пользовательском пространстве, а, например. использует распределитель типа пула памяти для разделения памяти между ядром и пользовательским пространством. Я придумал 3 теории самостоятельно:
а) Я предполагаю, что есть проблемы с безопасностью. Но неужели нет никакого способа безопасно разделить память между пользовательским пространством и ядром, когда они просто используются в качестве буфера?
б) Я предполагаю, что есть проблемы со стабильностью. Но разве мы не можем предположить, что тот, кто использует сеть с нулевым копированием и, например, нужно создать экземпляр и передать пул памяти, чтобы вызов ядра знал об управлении памятью? Достаточно осведомлены, чтобы избежать утечек?
c) Это просто еще не сделано/не нужно. Я не могу себе представить, чтобы никто не запрашивал эту функцию, поскольку все, кто использует небольшие размеры пакетов, обычно ограничены «медленной» реализацией TCP-стека, и есть сторонние инструменты, предлагаемые для сети с нулевым копированием для использования со специальными сетевые карты.
Не стесняйтесь публиковать любые предположения, но, пожалуйста, отметьте, предполагаете ли вы или имеете более глубокие знания о причинах сохранения качества StackOverflow :-)
splice
,tee
иvmsplice
. Они позволяют копировать между сокетами, файлами и каналами (буферы ядра), дублировать каналы (счетчик ссылок на страницы) и копировать между пользователем и пространством ядра путем переназначения страниц. Так много для хорошей теории, на практике вы получаете страницы, которые вы можете не трогать и не знаете, когда освободить ... и бле. - person Damon   schedule 03.03.2014splice
и каналы для предотвращения копирования через пользовательское пространство (источник немного груб для прохождения из-за цикла событий и использования пула каналов). Я слышал, что автор haproxy работает над патчем ядра для прямого соединения сокетов, но не уверен, что это действительно будет быстрее. - person JimB   schedule 04.03.2014