Как легко переключать проприетарные драйверы Nvidia и драйверы с открытым исходным кодом?

Раньше я не использовал Open vSwitch, поэтому теперь мне пришлось поиграть с этим.

Ключевая информация находится в man 5 ovs-vswitchd.conf.db, где объясняются различные vlan_mode.

В частности, для порта доступа внутри коммутатора пакет всегда помечен, вне коммутатора он не помечен, и на входе тег добавляется, а на выходе он удаляется.Именно это я и подозревал после твоего описания, но приятно удостовериться.

Итак, чтобы реализовать ваш сценарий только с портами доступа, я использовал три пространства именns0(маршрутизатор ), ns1и ns2вот так:

ns0:
  veth0b (peer veth0a), 10.0.10.254/24
  veth0d (peer veth0c), 10.0.20.254/24

ns1:
  veth1b (peer veth1a), 10.0.10.1/24

ns2:
  veth2b (peer veth2a), 10.0.20.1/24

main namespace:
  br0 (ovs):
    veth0a (access, tag=100)
    veth0c (access, tag=200)
    veth1a (access, tag=100)
    veth2a (access, tag=200)

Чрезвычайно удобно запускать xtermв каждом пространстве имен (Я предпочитаю цветной фон ), тогда вы также можете отлаживать поток пакетов с помощью tcpdumpвнутри пространства имен.

Создайте пространства имен, создайте veth -пары, переместитесь в пространства имен по мере необходимости, не забудьте setкаждую ссылку up. Тогда

Вns0:

sudo ip addr add 10.0.10.254/24 dev veth0b
sudo ip addr add 10.0.20.254/24 dev veth0d
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

Вns1:

sudo ip addr add 10.0.10.1/24 dev veth1b
sudo ip route add default via 10.0.10.254

Вns2:

sudo ip addr add 10.0.20.1/24 dev veth2b
sudo ip route add default via 10.0.20.254

В основном пространстве имен:

sudo ovs-vsctl add-br br0
sudo ovs-vsctl add-port br0 veth0a tag=100
sudo ovs-vsctl add-port br0 veth0c tag=200
sudo ovs-vsctl add-port br0 veth1a tag=100
sudo ovs-vsctl add-port br0 veth2a tag=200

Теперь в каждом пространстве имен ping должен работать, сначала проверьте прямого партнера, а затем маршрутизируемого партнера.

Мы также можем заменить две пары портов доступа veth -одной парой магистральных veth -. Нет необходимости добавлять trunk=100,200, потому что по умолчанию каждый порт доступа, отличный от -, является магистральным портом для всех VLAN.

В основном пространстве имен:

sudo ovs-vsctl del-port br0 veth0a
sudo ovs-vsctl del-port br0 veth0c
sudo ip link del veth0a
sudo ip link del veth0c
sudo ip link add veth0a type veth peer name veth0b netns ns0
sudo ip link set veth0a up
sudo ovs-vsctl add-port br0 veth0a

Вns0:

sudo ip link add link veth0b name veth0b.100 type vlan id 100
sudo ip link add link veth0b name veth0b.200 type vlan id 200
sudo ip link set veth0b up
sudo ip addr add 10.0.10.254/24 dev veth0b.100
sudo ip addr add 10.0.20.254/24 dev veth0b.200

Затем проверьте, как описано выше.

0
13.11.2021, 08:11
1 ответ

Видеодрайвер загружается при инициализации X, подробности можно посмотреть в /var/log/Xorg.log.

Невозможно указать X «переключаться» между драйверами. Также нет возможности загрузить оба драйвера, поскольку оба используют одно и то же оборудование.

Таким образом, любое «переключение» потребует перезапуска X-сервера (с другим файлом конфигурации ). Это означает, что вы выйдете из своего рабочего стола.

Если вас устраивает это решение, вы можете написать его (в сценарии, хотя это, вероятно, нетривиальный объем работы ).

Если вам нужно что-то, что позволяет переключаться между драйверами, оставаясь на рабочем столе, то это невозможно.

Если это действительно важно для вас, купите вторую карту Nvidia и запустите один драйвер на одной карте и один драйвер на другой карте.


Если у вас все в порядке с перезапуском X-сервера, первым шагом будет запись двух xorg.confфайлов для каждого драйвера и изучение того, как перезапустить X-драйвер в вашем дистрибутиве с помощью определенного файла конфигурации (подробности зависят от вашего дистрибутива, среды рабочего стола, диспетчера отображения и т. д. Прочтите документацию ).

0
13.11.2021, 08:32

Теги

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