Введение
это специальный системный вызов Linux, который перемещает данные между файловым дескриптором и трубой без поездок в пользовательское пространство. Соответствующий системный вызов перемещает или копирует данные между трубой и пользовательским пространством. В идеале, splice и vmsplice работают путем перенастройки страниц и фактически не копируют какие-либо данные, что может улучшить производительность ввода-вывода. Поскольку линейные адреса не обязательно соответствуют соседствующим физическим адресам, это может быть невозможно во всех случаях и на всех аппаратных комбинациях.
Работа
С помощью , можно перемещать данные из одного файлового дескриптора в другой, не вызывая копий из пользовательского пространства в пространство ядра, что обычно требуется для обеспечения безопасности системы, а также для сохранения простого интерфейса для процессов чтения и записи в файлы. Работает с помощью буфера трубы. Буфер трубки - это буфер памяти ядра, который непрозрачен для процесса пользовательского пространства. Пользовательский процесс может сцеплять содержимое исходного файла в этот буфер трубы, а затем сцеплять буфер трубы в файл назначения, и все это без перемещения каких-либо данных через пользовательское пространство.
Происхождение
Линус Торвальдс описал в электронном письме 2006 года, который был включен в статью KernelTrap. Внедрение Linux-сплиса заимствует некоторые идеи из оригинального предложения Ларри МакВоя в 1998 году. Системные вызовы сплиса впервые появились в ядре Linux версии 2.6.17 и были написаны Йенсом Аксбо.
Дополнительные системные вызовы
является одним из трех системных вызовов, которые завершают архитектуру. может отображать область данных приложения в трубу (или наоборот), таким образом, позволяя передачи между трубами и пользовательской памятью, где передачи между файловым дескриптором и трубой. Последняя часть трилогии. Он дублирует одну трубу в другую, позволяя вилкам в том, как приложения соединены с трубами.
Требования
При использовании со сцеплениями контроллер сети (NIC) должен поддерживать DMA, в противном случае сцепление не принесет значительного улучшения производительности. Причина этого в том, что каждая страница трубы будет просто заполняться до размера кадра (1460 байт из доступных 4096 байтов на страницу). не поддерживает UDP-сокеты. Не все типы файловых систем поддерживаются. Также не поддерживаются сокеты.