V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
echo1937
V2EX  ›  服务器

为什么 软路由/nas 的网卡更多选择 PCI-E 直通,而不是 SR-IOV

  •  
  •   echo1937 · 354 天前 · 3219 次点击
    这是一个创建于 354 天前的主题,其中的信息可能已经有所发展或是发生改变。

    常用的 I/O 虚拟化有三种形式:

    • 虚拟网卡:通过软件模拟物理网卡的功能,使得虚拟机可以与外部网络互联。
    • PCI 网卡直通:将主机上的网卡作为 PCI 直通网卡透传给虚拟机使用,该网卡由这台虚拟机独占。
    • SR-IOV 直通:将一个支持 SR-IOV 的物理网卡虚拟化出多个 VF (Virtual Function),作为 SR-IOV 直通网卡直接挂载给虚拟机使用,可实现多个虚拟机共享同一个物理网卡的通信能力。

    部分背景信息: 超融合虚拟化下的网络 I/O 虚拟化技术

    个人的需求其实很简单,就是把全部的虚拟机都桥接到宿主机的物理网络下,这样所有的设备都在拨号路由器下属的同一子网内,省去了很多的麻烦。

    实践方面遇到了一些问题:

    • 虚拟网卡:性能很差,无论是 vmware workstation 那种 vmnet0 的直通,还是 hyper-v 建立外部交换机进行桥接(无论是宿主机通过网桥,还是虚拟机通过外部交换机,千兆的公网 1000mbps 下行都只能跑 100 多 mbps),性能很难让人满意
    • PCIE 网卡直通,这是网络上比较常用的方法,各路 PVE ,ikuai ,黑群晖用这个方法是最多的,但是也有缺陷,PCIE x4 槽也就能出 4 口,而且口子还必须连接到上行交换机,网口和网卡很多。
    • SR-IOV 直通,这个资料比较少,大致就是一个物理网卡可以虚拟化为多个 VF ,然后再将 VF 直通给虚拟机,无论多少个 VF ,只要插一根网线就可以了,所有这些 VF 共享单个物理网卡的带宽。

    在我看来,SR-IOV 显然是技术上最佳的方案,比如说单个万兆口可以分为 10 个 VF ,10 个 VF 单独都是万兆,10 个 VF 共享了万兆的总带宽,线路管理和扩展上限都很方便。似乎困难在于需要主板、网卡和系统的支持。

    不知道个人对相关内容的认知是否正确,为什么现在类似畅网的软路由 mini 主机,都是选择方案 2 ;个人的 all in boom 也是方案 2 ,其背后的原因是什么。

    万能的水友们,有相关的网卡产品和技术方案推荐吗,还请不吝赐教。

    18 条回复    2024-03-17 22:02:08 +08:00
    renothing
        2
    renothing  
       354 天前
    因为软路由多数用的低功耗板子。没那些企业级功能
    TsubasaHanekaw
        3
    TsubasaHanekaw  
       354 天前   ❤️ 1
    因为虚拟网卡:性能很差,无论是 vmware workstation 那种 vmnet0 的直通,还是 hyper-v 建立外部交换机进行桥接(无论是宿主机通过网桥,还是虚拟机通过外部交换机,千兆的公网 1000mbps 下行都只能跑 100 多 mbps),性能很难让人满意
    你这个前提就是错的
    rrfeng
        4
    rrfeng  
       354 天前 via Android
    sriov 太高级了…那是数据中心虚拟化用的
    0044200420
        5
    0044200420  
       354 天前
    @TsubasaHanekaw 对,为什么少人用是因为消耗 cpu 而不是性能,这么慢肯定哪里搞错了
    shinko
        6
    shinko  
       354 天前 via iPhone
    @rrfeng 畅网的新款 intel U 现在都支持了。不过现在性能过剩,虚拟化网卡也够用
    helleon
        7
    helleon  
       354 天前
    虚拟网卡 1000m 只能跑到 100m 绝无可能。
    这三个的区别最多就是 950m, 990m, 980m 的区别
    echo1937
        8
    echo1937  
    OP
       354 天前
    @helleon 测试方法,https://www.speedtest.cn/ 没有用 iperf

    场景 1:开 vmware workstation 的的 windows 虚拟机,网络模式选择桥接,虚拟机内部测速下行 100mbps
    场景 2:启动 hyper-v ,增加一个外部交换机,选择“允许管理操作系统共享此网络适配器”,然后在管理操作系统跑 speedtest ,也是只有 100 多 mbps
    helleon
        9
    helleon  
       354 天前
    @echo1937 你用那玩意测出来的那不是出口带宽的性能么,能说明啥?

    我贴个第一种虚拟网卡的 iperf 结果吧,古老的 Gen8 跑 PVE ,VirtIO 网卡,中间是个垃圾红米路由器的 LAN 口


    D:\Soft\iperf-3.1.3-win64>iperf3.exe -c 10.1.1.7
    Connecting to host 10.1.1.7, port 5201
    [ 4] local 10.1.1.8 port 51471 connected to 10.1.1.7 port 5201
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-1.00 sec 22.5 MBytes 189 Mbits/sec
    [ 4] 1.00-2.01 sec 19.0 MBytes 158 Mbits/sec
    [ 4] 2.01-3.00 sec 31.0 MBytes 263 Mbits/sec
    [ 4] 3.00-4.00 sec 36.5 MBytes 306 Mbits/sec
    [ 4] 4.00-5.00 sec 36.4 MBytes 305 Mbits/sec
    [ 4] 5.00-6.01 sec 35.4 MBytes 296 Mbits/sec
    [ 4] 6.01-7.00 sec 33.6 MBytes 283 Mbits/sec
    [ 4] 7.00-8.00 sec 34.2 MBytes 287 Mbits/sec
    [ 4] 8.00-9.00 sec 33.4 MBytes 280 Mbits/sec
    [ 4] 9.00-10.00 sec 36.5 MBytes 306 Mbits/sec
    - - - - - - - - - - - - - - - - - - - - - - - - -
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-10.00 sec 318 MBytes 267 Mbits/sec sender
    [ 4] 0.00-10.00 sec 318 MBytes 267 Mbits/sec receiver

    iperf Done.
    helleon
        10
    helleon  
       354 天前
    Sorry 贴成无线的了,下面这个才是

    D:\Soft\iperf-3.1.3-win64>iperf3.exe -c 10.1.1.7
    Connecting to host 10.1.1.7, port 5201
    [ 4] local 10.1.1.8 port 51534 connected to 10.1.1.7 port 5201
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-1.00 sec 112 MBytes 940 Mbits/sec
    [ 4] 1.00-2.00 sec 112 MBytes 936 Mbits/sec
    [ 4] 2.00-3.00 sec 112 MBytes 936 Mbits/sec
    [ 4] 3.00-4.00 sec 110 MBytes 919 Mbits/sec
    [ 4] 4.00-5.00 sec 113 MBytes 944 Mbits/sec
    [ 4] 5.00-6.00 sec 113 MBytes 949 Mbits/sec
    [ 4] 6.00-7.00 sec 109 MBytes 916 Mbits/sec
    [ 4] 7.00-8.00 sec 112 MBytes 941 Mbits/sec
    [ 4] 8.00-9.00 sec 113 MBytes 949 Mbits/sec
    [ 4] 9.00-10.00 sec 110 MBytes 922 Mbits/sec
    - - - - - - - - - - - - - - - - - - - - - - - - -
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-10.00 sec 1.09 GBytes 935 Mbits/sec sender
    [ 4] 0.00-10.00 sec 1.09 GBytes 935 Mbits/sec receiver

    iperf Done.
    echo1937
        11
    echo1937  
    OP
       354 天前
    @helleon #10 我大概了解你的意思了。

    方案一虚拟网卡本身种类很有多种的,VirtIO 算是开销相对较小的吧,我这创建出来的网卡有且只有 Intel 82574L ,表现不一样很正常吧。

    为什么用 speedtest 的出口带宽测试,因为场景 2 中,未进行操作前,同样的 windows 物理机可以轻松测速跑到 960 多 mbps ,只是为了粗略体现一下差别。
    Fish1024
        12
    Fish1024  
       354 天前
    虚拟网卡性能不差啊,hyperV 的虚拟交换机下的 win11 实例,内网 2.5G 能跑满,外网千兆跑下载也有 120-150MB/s 。
    zhangckid
        13
    zhangckid  
       354 天前 via Android
    @echo1937 搜下 virtio-net 你就知道…你的 1 就不成立…随随便便跑个几个 g
    tywtyw2002
        14
    tywtyw2002  
       354 天前 via iPhone
    现在家用 sriov 的卡基本都是二手洋垃圾 10g/40g 的卡吧

    这种卡 sriov 说实话性能有点差。

    先说驱动
    pcie pass through 的网卡驱动是在虚拟机,支持全功能网卡功能,而且可以在虚拟机里面随便改驱动。这种想的等于虚拟机有个硬件网卡。

    sriov 的驱动跑在母鸡的上,虚拟机里面是没法直接控制硬件的。我的那几张 10g 洋垃圾卡都不支持 mac 层操作,比如硬件 vlan ,旁路端口镜像抓包等。sriov 的卡 相当等于高级一点的 vmxnet 卡,网卡的 ic 帮助 cpu offload 一些工作,节约母鸡 cpu 。但是也是个虚拟网卡。
    helleon
        15
    helleon  
       353 天前
    @echo1937 我的意思是就算虚拟化也不可能掉 90%的性能,你这要么是驱动要么是网线啥的,具体只能你自己排查了。但是这个锅虚拟化肯定不背
    wm5d8b
        16
    wm5d8b  
       353 天前 via Android
    我花两倍价格,从小黄鱼买了 sriov 网卡,然后主板不支持,我怎么用?
    echo1937
        17
    echo1937  
    OP
       352 天前
    @wm5d8b 层主你买的什么卡,我也想买张来玩玩。
    nicai
        18
    nicai  
       284 天前
    个人的 all in boom 也是方案 2 ,其背后的原因是什么。

    这个是你了解的少把?我的 AIO 就是一张 10G 卡一张 40G 卡,所有 LXC 和 VM 都走的 sriov 后 VF 直通,不走虚拟网桥,小包转发性能那不是 virtio 能比的且不占 cpu 开销。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3347 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 00:45 · PVG 08:45 · LAX 16:45 · JFK 19:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.