Каков встроенный в systemd способ управления размерами кольцевых буферов сетевой карты до настройки связанных интерфейсов?

Это множество мелких причин, которые в сумме приводят к тому, что беспроводная сеть работает медленнее заявленной скорости. Ars Technica недавно опубликовала очень хорошую статью о том, почему реальные -скорости жизни никогда не соответствуют обещанным, и я постараюсь изложить ее в нескольких кратких пунктах. Я все же рекомендую вам прочитать статью целиком, автор намного более осведомлен и опытен, чем я.

Во-первых, сетевые устройства могут работать только на максимальной скорости самого медленного устройства, что в вашем случае составляет 300 Мбит/с беспроводной карты ноутбука. Но это максимальная теоретическая пропускная способность, которая не включает накладные расходы , такие вещи, как отброшенные пакеты, заголовки и случайные ожидания, чтобы гарантировать отсутствие коллизий пакетов в канале. Ваша Wi-Fi-карта на 300 Мбит/с на самом деле представляет собой два MIMO-потока по 150 Мбит/с, которые имеют реальную пропускную способность~42 Мбит/с каждый из-за накладных расходов на канале. Два канала по 42 это 84 мбит/с, но вайфай тоже полудуплекс , а это значит, что нельзя передавать или принимать одновременно. Это связано с тем, что весь канал является единым доменом коллизий , что означает, что для предотвращения потери пакетов только одно устройство может обмениваться данными по каналу в данный момент времени, даже устройства, которые не находятся в вашей сети, но находятся в тот же канал должен подчиняться этому.

Таким образом, реальная пропускная способность снижается до ~42 Мбит/с. ~Скорость 42 Мбит/с не соответствует никакому стандарту пропускной способности, поэтому я предполагаю, что ваша операционная система округляет это значение до ближайшего известного ей стандарта (не цитируйте меня в этой части ), что так вы получите 52 Мбит/с на интерфейсе 300 Мбит/с.

2
19.09.2019, 23:49
2 ответа

Собственный способ systemd для установки параметров — с помощью .linkфайла (см. справочную страницу systemd.link , однако в настоящее время у него нет способа установить параметры кольцевого буфера. Так что, насколько мне известно, нет собственного системного способа сделать это. Это изменится, когда будет выпущен новый systemd с запросом функции Wildcard с параметрами RxBufferSizeи TxBufferSize.

Если вы на самом деле используете /etc/network/interfacesдля настройки, просто введите там команду pre-up. Это было бы моим предпочтением вместо того, чтобы возиться с systemd -networkd.

Вы можете настроить некоторые правила udev для соответствия устройству, когда оно появится, и запустить там ethtool. Это должно выполняться до того, как systemd будет проинформирован об устройстве (и до того, как он что-либо сделает с ним ).

Вы можете настроить службу systemd (типа oneshot, просто запустив ethtool )до того, как какая-либо служба установит ваше связывающее устройство, и после того, как устройство появится, и используйте это. systemd производит .deviceмодулей для Ethernet-устройств; используйте systemctl list-units | grep sys-subsystem-net, чтобы найти правильный (, чтобы вы могли сделать свою услугу Хочет/После этого ).

1
27.01.2020, 22:17

Вот правило udev, которое работает в Ubuntu 18:

ACTION=="add|change", SUBSYSTEM=="net", KERNEL=="eth*|en*", RUN+="/sbin/ethtool -G $name rx 4096 tx 4096"

Поместите это в /etc/udev/rules.d/59-net.ring.rules, и оно вступит в силу на ранней стадии процесса загрузки.

2
27.01.2020, 22:17

Теги

Похожие вопросы