Глядя на Git-репозиторий ядра Linux, кажется, что ни PF_INET
, ни PF_INET6
сокеты не поддерживают доступ с отображением памяти, поэтому, если
Мое приложение требует только использования стандартного интерфейса UDP-сокета Linux. Я хочу использовать package_mmap исключительно для повышения эффективности — прямо сейчас системные вызовы потребляют более 50% циклов моего процессора.
вы имеете в виду, что хотите использовать доступ с отображением памяти для обычного сокета UDP или TCP, к сожалению, вы не можете. То же самое относится и к необработанным IP-сокетам.
PF_PACKET
сокеты поддерживают доступ с отображением памяти, но для них требуются повышенные привилегии, независимо от того, используете ли вы доступ с отображением памяти или нет. Они не заменяют сокеты PF_INET
или PF_INET6
; они представляют собой механизм для чтения и записи пакетов канального уровня, поэтому, если вы хотите запускать на них обычные интернет-приложения, удачи:
- вам придется переопределить IP и любой транспортный протокол, который вы используете (UDP, TCP и т. д.) самостоятельно;
- вам каким-то образом придется не допускать, чтобы стек IP и транспортных протоколов ядра обрабатывал эти пакеты;
и вы на самом деле не хотите этого делать.
(Обратите внимание, что под «повышенными привилегиями» я не обязательно подразумеваю «привилегии root»; CAP_NET_RAW
привилегий должно быть достаточно. Однако, как я заметил, если вы пытаетесь заменить обычный доступ к сокету, вы не хотите использовать PF_PACKET
сокеты. .)
person
Community
schedule
01.03.2013