, доступно для не подписчиков через 7-14 дней.

гиналеvmsplice() реализация,было предложено что если бы у вас был пользовательский буфер, в два раза превышающий максимальное количество страниц, которое могло бы поместиться в конвейере, успешное выполнение vmsplice () во второй половине буфера гарантировало бы, что ядро ​​было выполнено с использованием первой половины буфера.

Но в конце концов это было не так, и особенно для TCP, страницы ядра сохранялись до получения ACK с другой стороны. Исправление было оставлено в качестве будущей работы, и поэтому для TCP ядру все равно пришлось бы копировать страницы из конвейера.

vmsplice() имеетSPLICE_F_GIFT Эта опция имеет дело с этим, но проблема в том, что это выставляет две другие проблемы - как эффективно получать свежие страницы из ядра и как уменьшить кэш-память. Первая проблема заключается в том, что mmap требует, чтобы ядро ​​очистило страницы, а вторая проблема заключается в том, что, хотя mmap может использовать причудливыйkscrubd функция в ядре, которая увеличивает рабочий набор процесса (очистка кеша).

Исходя из этого, у меня есть следующие вопросы:

Каково текущее состояние для уведомления пользователей о безопасном повторном использовании страниц? Меня особенно интересуют страницы splice () d на сокете (TCP). Что-нибудь случилось за последние 5 лет?Являетсяmmap / vmsplice / splice / munmap текущая лучшая практика для нулевого копирования на TCP-сервере или у нас есть лучшие варианты сегодня?

Ответы на вопрос(1)

Ваш ответ на вопрос