Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Проброс сетевой карты Intel i210 в виртуальную машину (DDA)

    Scheduled Pinned Locked Moved Russian
    21 Posts 3 Posters 1.8k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • K
      Konstanti @programmer_86
      last edited by

      @programmer_86
      Здр
      драйвер ругается на что-то.
      На что конкретно , сложно сказать

      В документации на драйвер есть информация о нюансах настройки работы сетевой карты с HYPER-V

      P 1 Reply Last reply Reply Quote 0
      • P
        programmer_86 @Konstanti
        last edited by

        @Konstanti А как понять, что он подтянул именно мой скомпилированный драйвер? Мне просто хотяб понять, подтянул он его или нет

        K 1 Reply Last reply Reply Quote 0
        • P
          programmer_86 @werter
          last edited by

          @werter Спасибо за ответ. Мне там тоже ответили про SR-IOV, но intel i210 не поддерживает SR-IOV. Мне нужен просто прямой проброс, как устройства целиком. Почитаю вечером про Proxmox VE (KVM)

          1 Reply Last reply Reply Quote 0
          • K
            Konstanti @programmer_86
            last edited by Konstanti

            @programmer_86
            А смысл Ваш драйвер тянуть ?
            Тот что встроен в ядро, вполне работоспособен
            По-моему , проблема не в драйвере , а в настройках гипервизора (но это мое мнение)
            Если знакомы с CИ , то можно поизучать 2 файла в исходниках драйвера
            e1000_api.c и if_igb.c
            во втором файле есть вот такой кусок кода

            /* Do Shared Code initialization */
            	if (e1000_setup_init_funcs(&adapter->hw, TRUE)) {
            		device_printf(dev, "Setup of Shared code failed\n");
            		error = ENXIO;
            		goto err_pci;
            	}
            

            а в первом листинг функции
            s32 e1000_setup_init_funcs(struct e1000_hw *hw, bool init_device)
            и все ошибки , какие генерит эта функция
            мб это Вам поможет

            что касается Вашего вопроса

            dmesg | grep igb
            igb0: <Intel(R) PRO/1000 Network Connection, Version - 2.5.3-k> port 0x1000-0x101f mem 0xdff60000-0xdff7ffff,0xdffe4000-0xdffe7fff irq 18 at device 20.0 on pci0
            igb0: Using MSIX interrupts with 3 vectors
            igb0: Ethernet address: 00:08:a2:0a:ff:72
            igb0: Bound queue 0 to cpu 0
            igb0: Bound queue 1 to cpu 1
            igb0: netmap queues/slots: TX 2/4096, RX 2/409
            
            P 1 Reply Last reply Reply Quote 1
            • werterW
              werter
              last edited by werter

              @programmer_86

              Вкл ли в БИОС vt-d? Это важно. БИОС свежий?

              P 1 Reply Last reply Reply Quote 0
              • P
                programmer_86 @werter
                last edited by

                @werter Добрался до сервера, проверил, такой опции там нету. Я так понимаю она для intel, у меня AMD и мне надо было искать AMD-V, но такой тоже не нашел. Есть SVM Mode (в описании написано что-то про виртуализацию), он включен. Так же включен SR-IOV.

                1 Reply Last reply Reply Quote 0
                • werterW
                  werter
                  last edited by werter

                  @programmer_86
                  Да-да, я как тот Зоркий Глаз, на 3-ий день заметил ) Все верно. Вам нужно вкл. SVM Mode, IOMMU и можно SR-IOV.
                  Матплата у вас знатная https://www.asrockrack.com/general/productdetail.asp?Model=X470D4U#Specifications и умеет
                  PCIE6: Gen3 x16 link (splittable in x4/4/4/4). Что это дает? Можно купить (в будущем) вот такое JEYI iHyper SSD 4x M.2 NVMe to PCIe Adapter (JP84A) или ASRock Ultra Quad M.2 Card + 4 шт Silicon Power P34A80 (объем по вкусу) и получится оч. и оч. шустро )

                  P 1 Reply Last reply Reply Quote 0
                  • P
                    programmer_86 @werter
                    last edited by

                    @werter Простите, забыл ответить про BIOS, стоит последняя версия 3.30. В настройках еще для IOMMU поменял значение с Auto на Enabled. Перепроверил снова, не помогло. Про информацию с 4 m2, спасибо, про такое даже не думал)

                    1 Reply Last reply Reply Quote 0
                    • P
                      programmer_86 @Konstanti
                      last edited by programmer_86

                      @Konstanti Спасибо за информацию. Проверил мой драйвер реально подтянулся. Включил отладочную всю отладочную информацию в кодах и заново собрал драйвер. Получил следующий вывод при запуске:

                      pcib0: <Hyper-V PCI Express Pass Through> on vmbus0
                      pci0: <PCI bus> on pcib0
                      igb_probe: begin
                      igb_probe: begin
                      igb_probe: begin
                      igb0: <Intel(R) PRO/1000 Network Connection, Version - 2.5.9> at device 0.0 on pci0
                      igb_attach: begin
                      e1000_set_mac_type
                      igb0: Unable to map MSIX table
                      igb0:  Using an MSI interrupt
                      e1000_set_mac_type
                      e1000_init_mac_ops_generic
                      e1000_init_phy_ops_generic
                      e1000_init_nvm_ops_generic
                      e1000_init_function_pointers_82575
                      e1000_init_mac_params_82575
                      e1000_init_mac_ops_generic
                      e1000_init_nvm_params_i210
                      e1000_init_nvm_params_82575
                      e1000_get_flash_presence_i210
                      e1000_init_phy_params_82575
                      e1000_reset_mdicnfg_82580
                      e1000_get_phy_id_82575
                      e1000_get_phy_id
                      e1000_read_phy_reg_gs40g
                      e1000_acquire_phy_base
                      e1000_acquire_swfw_sync_i210
                      e1000_get_hw_semaphore_i210
                      e1000_put_hw_semaphore_generic
                      e1000_write_phy_reg_mdic
                      MDI Write did not complete
                      e1000_release_phy_base
                      e1000_release_swfw_sync_i210
                      e1000_get_hw_semaphore_i210
                      e1000_put_hw_semaphore_generic
                      PHY Initialization Error
                      igb0: Setup of Shared code failed
                      device_attach: igb0 attach returned 6
                      
                      K 1 Reply Last reply Reply Quote 0
                      • K
                        Konstanti @programmer_86
                        last edited by Konstanti

                        @programmer_86
                        Здр
                        Листинг показывает ошибку чтения/записи данных из MDI control register. Файл e1000_phy.c
                        При этом документация freebsd говорит, что такого быть не должно, и в случае ошибки система должна впадать в панику.
                        Почему происходит ошибка, сказать не могу. Знаний не хватает.

                        Вопрос для самообразования - как включили вывод отладочной информации?

                        P 1 Reply Last reply Reply Quote 0
                        • werterW
                          werter
                          last edited by werter

                          @programmer_86
                          Не тратьте время на гипер-в. Есть вероятность, что это не последняя проблема. На linux (proxmox - это debian c модифиц. ядром от убунты) заработает без танцев с 99% вероятностью. Попробуйте альтернативу. Не понравится - вернетесь.

                          P 1 Reply Last reply Reply Quote 0
                          • P
                            programmer_86 @Konstanti
                            last edited by

                            @Konstanti Отадку включил в коде, в файле e1000_osdep.h:

                            /* Enable/disable debugging statements in shared code */
                            #define DBG		0
                            

                            И еще нашел в файле if_igb.h:

                            /* Defines for printing debug information */
                            #define DEBUG_INIT  0
                            #define DEBUG_IOCTL 0
                            #define DEBUG_HW    0
                            

                            Ну а дальше опять пересобрал драйвер на FreeBSD и подсунул pfSense

                            K 1 Reply Last reply Reply Quote 0
                            • P
                              programmer_86 @werter
                              last edited by programmer_86

                              @werter Уговорили, сегодня попробую поставить и отпишу по результатам))

                              werterW 1 Reply Last reply Reply Quote 0
                              • K
                                Konstanti @programmer_86
                                last edited by Konstanti

                                @programmer_86
                                Спс
                                Да , вижу
                                в этом же файле , собственно

                                /* Register READ/WRITE macros */
                                
                                #define E1000_READ_REG(hw, reg) \
                                    bus_space_read_4(((struct e1000_osdep *)(hw)->back)->mem_bus_space_tag, \
                                        ((struct e1000_osdep *)(hw)->back)->mem_bus_space_handle, \
                                        E1000_REGISTER(hw, reg))
                                
                                #define E1000_WRITE_REG(hw, reg, value) \
                                    bus_space_write_4(((struct e1000_osdep *)(hw)->back)->mem_bus_space_tag, \
                                        ((struct e1000_osdep *)(hw)->back)->mem_bus_space_handle, \
                                        E1000_REGISTER(hw, reg), value)
                                

                                Описание этого безобразия
                                https://www.freebsd.org/cgi/man.cgi?query=bus_space&sektion=9&manpath=FreeBSD+6.0-RELEASE

                                These functions will never ail.  If they would fail (e.g. because of an argument error), 
                                that indicates a software bug which should cause a panic. In that case, they will never return.
                                
                                1 Reply Last reply Reply Quote 1
                                • werterW
                                  werter @programmer_86
                                  last edited by werter

                                  @programmer_86
                                  Для zfs не нужен железный raid (даже вреден) Если у вас он присутствует - развалите его перед установкой proxmox.
                                  При установке proxmox пользуйте ZFS , даже если у вас ОДИН диск (выберите zfs raid 0 в установщике).
                                  Лучше бы 4 диска и ZFS RAID 10, но это просто хотелки )

                                  Если чего - пишите в ЛС\чат.

                                  P 1 Reply Last reply Reply Quote 0
                                  • P
                                    programmer_86 @werter
                                    last edited by

                                    @werter Установил ProxMox, начал настраивать все под PCI(e) Passthrough и кажется нашел камень преткновения из-за чего все это не работало. Как написано в инструкции то устройства должны находиться в разных IOMMU группах. У меня это условие не выполнено, очень жаль... О чем-то таком меня предупреждал Hyper-V где-то в начале, но я не придал этому значения. 2b94f078-c52f-4d80-9991-34530ea1545e-image.png

                                    1 Reply Last reply Reply Quote 0
                                    • werterW
                                      werter
                                      last edited by werter

                                      @programmer_86
                                      Проблема с IOMMU группами решаема. Отписал в чат.

                                      Зы. Выложу тут. "Страждущий" так и не ответил.

                                      1. Вкл в БИОС ВСЁ, что касается вирт-ции. Для АМД - это SVM, IOMMU. Для Интел - это vt-x, vt-d.
                                      2. Под root-ом:
                                      [ ! -d /etc/default/grub.d ] && mkdir -pv /etc/default/grub.d
                                      if dmesg | grep -E -q "(IOMMU|DMAR)"; then
                                        grep -iqw "vmx" /proc/cpuinfo && echo 'GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT intel_iommu=on"' > /etc/default/grub.d/iommu.cfg
                                        grep -iqw "svm" /proc/cpuinfo && echo 'GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT amd_iommu=on iommu=pt"' > /etc/default/grub.d/iommu.cfg
                                        echo 'GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT pcie_acs_override=downstream,multifunction"' > /etc/default/grub.d/pcie_acs_override.cfg
                                      fi
                                      update-grub
                                      reboot
                                      

                                      Т.о. мы "развалили" IOMMU группу и теперь можно пробрасывать сет. карту (и не только) в ВМ.

                                      Установить Proxmox VE - это только половина дела. Его требуется "допиливать" под себя.

                                      P 1 Reply Last reply Reply Quote 1
                                      • P
                                        programmer_86 @werter
                                        last edited by

                                        @werter Вчера лег рано и не увидел ваших сообщений. Сегодня все проверил, дополнительно почитал информацию и все заработало. Большое спасибо @werter, вы очень помогли. Сейчас все работает как часы!)))

                                        1 Reply Last reply Reply Quote 0
                                        • werterW
                                          werter
                                          last edited by werter

                                          @programmer_86
                                          При создании ВМ с пф выбирайте Virtio-SCSI в кач-ве контроллера hdd и scsi как жесткий диск.
                                          Обязательно галку на Discard в настройках hdd поставьте (+ после нужны еще кое-какие манипуляции в самой ВМ с пф для того, чтобы заработал Discard).
                                          Сетевые тоже virtio. И не забывать откл. HW offload в настройках сети на пф.
                                          В самом PVE вместо Linux bridge для сети рекомендую установить и пользовать Open vswitch. Он гораздо гибче в плане работы с сетью (особенно при работе с VLAN).

                                          1 Reply Last reply Reply Quote 1
                                          • First post
                                            Last post
                                          Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.