Кіріспе
Бұл файл дескрипторы мен құбыр арасындағы деректерді пайдаланушы кеңістігіне жолайсыз жылжытатын Linux-қа тән жүйелік шақыру. Байланысты жүйелік шақыру құбыр мен пайдаланушы кеңістігі арасындағы деректерді жылжытады немесе көшіреді. Идеалда, splice және vmsplice беттерді қайта карталау арқылы жұмыс істейді және нақты ешқандай деректерді көшірмелейді, бұл I / O өнімділігін жақсарта алады. Сызықтық адрестер міндетті түрде жалғасқан физикалық адрестерге сәйкес келмейтіндіктен, бұл барлық жағдайларда және барлық аппараттық комбинацияларда мүмкін болмауы мүмкін.
Жұмыс істеу
Бұл арқылы деректер бір файл дескрипторынан екіншісіне көшірмесіз көшіріледі, бұл жүйе қауіпсіздігін қамтамасыз ету үшін және файлдарды оқу мен жазу процестерінің қарапайым интерфейсін сақтау үшін қажет. құбыр буферін пайдалану арқылы жұмыс істейді. Құбыр буфері - ядролық жад буфері, ол пайдаланушы кеңістігі процесіне мөлдір емес. Пайдаланушы процессі бастапқы файлдың мазмұнын осы құбыр буферіне, содан кейін құбыр буферін мақсатты файлға біріктіре алады, мұның бәрі пайдаланушы кеңістігі арқылы ешқандай деректерді жылжытпай.
Шығу тегі
Линус Торвальдс 2006 жылы KernelTrap мақаласына енгізілген электрондық поштада сипаттады. Linux splice-ті іске асыру 1998 жылы Ларри МакВойдың бастапқы ұсынысынан кейбір идеяларды алады. Сплис жүйелік шақырулар алғаш рет Linux ядросының 2.6.17 нұсқасында пайда болды және оны Jens Axboe жазды.
Қосымша жүйелік шақырулар
архитектураны толықтыратын үш жүйелік шақырудың бірі. қолданбалық деректер аймағын құбырға (немесе керісінше) карталай алады, осылайша құбырлар мен пайдаланушының жады арасындағы трансферлерге мүмкіндік береді, онда файл дескрипторы мен құбыр арасындағы трансферлер. "Ақ жол" трилогиясының соңғы бөлімі. Ол бір құбырды екіншісіне қайталайды, бұл қолданбалар құбырлармен қосылған кездегі бұрандаларды іске асырады.
Талаптар
Сокеттермен пайдаланғанда желілік контроллер (NIC) DMA-ны қолдауы керек, әйтпесе дәнекерлеу өнімділікті жоғарылатып жібермейді. Мұның себебі - құбырдың әрбір беті кадр өлшеміне дейін толтырылады (бір бетке қол жетімді 4096 байттың 1460 байты). UDP сокетін қолдамайды. Барлық файл жүйелері қолдамайды. Сонымен қатар, сокеттер де қолдамайды.