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

同一 USB 千兆网卡,为何在 OSX 下速度只能发挥 70%?

  •  
  •   zer · 2018-03-11 22:42:46 +08:00 · 6924 次点击
    这是一个创建于 2483 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Bus 001 Device 004: ID 0bda:8153 Realtek Semiconductor Corp. USB 10/100/1000 LAN  Serial: 001000001
    

    通过 iPerf 测速的结果只有 650~700Mbps,但在另外一台 Win 主机上可以达到 950Mbps 以上,基本达到了千兆的速度。 我尝试排除程序干扰,卸载了 Little Snitch、关闭其他应用,重置 PRAM 后,速度依旧如此。 求解

    iperf -u -c 10.0.0.101 -b 1000M -t 10 -i 1
    ------------------------------------------------------------
    Client connecting to 10.0.0.101, UDP port 5001
    Sending 1470 byte datagrams
    UDP buffer size: 9.00 KByte (default)
    ------------------------------------------------------------
    [  4] local 10.0.0.24 port 58162 connected with 10.0.0.101 port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  4]  0.0- 1.0 sec  79.3 MBytes   665 Mbits/sec
    [  4]  1.0- 2.0 sec  79.2 MBytes   664 Mbits/sec
    [  4]  2.0- 3.0 sec  78.3 MBytes   657 Mbits/sec
    [  4]  3.0- 4.0 sec  78.1 MBytes   655 Mbits/sec
    [  4]  4.0- 5.0 sec  78.0 MBytes   654 Mbits/sec
    [  4]  5.0- 6.0 sec  78.4 MBytes   657 Mbits/sec
    [  4]  6.0- 7.0 sec  78.0 MBytes   654 Mbits/sec
    [  4]  7.0- 8.0 sec  78.0 MBytes   655 Mbits/sec
    [  4]  8.0- 9.0 sec  78.3 MBytes   657 Mbits/sec
    [  4]  9.0-10.0 sec  78.3 MBytes   657 Mbits/sec
    [  4]  0.0-10.0 sec   784 MBytes   658 Mbits/sec
    [  4] Sent 559112 datagrams
    [  4] Server Report:
    [  4]  0.0-10.0 sec   782 MBytes   656 Mbits/sec   0.196 ms  952/559111 (0.17%)
    [  4]  0.0-10.0 sec  1 datagrams received out-of-order
    
    第 1 条附言  ·  2018-03-12 10:20:14 +08:00

    我是这样测试的: 内网Mac Mini Server,ip:10.0.0.101

    运行

    iperf -s -u
    

    客户端2台,一台MBP2017,一台PC 将这个Type-C千兆网卡分别连接到这2台电脑,运行

    iperf -u -c 10.0.0.101 -b 1000M -t 10 -i 1
    
    第 2 条附言  ·  2018-03-19 00:08:31 +08:00

    2018年03月19日 今天把server、重启后速度恢复正常了,不知道是怎么回事

    Imgur

    在服务端接收到的数据也是正常的

    Imgur

    21 条回复    2018-03-25 08:55:59 +08:00
    mokeyjay
        1
    mokeyjay  
       2018-03-11 22:47:01 +08:00
    驱动问题吧,我的 XPS 装了黑苹果也有类似问题,MacOS 下网卡性能不如 Win 下
    zer
        2
    zer  
    OP
       2018-03-11 22:48:24 +08:00
    @mokeyjay 我尝试安装 Realtek 官方驱动,也没有改善
    cevincheung
        3
    cevincheung  
       2018-03-11 23:12:31 +08:00   ❤️ 1
    网卡是千兆。USB 口不达标吧 2333 typec 试试
    cevincheung
        4
    cevincheung  
       2018-03-11 23:15:06 +08:00
    also24
        5
    also24  
       2018-03-11 23:19:47 +08:00   ❤️ 1
    最近搞了不少 Realtek 和亚信的网卡测试,直观感觉是 Realtek 的普遍不如亚信的,特别是对 Apple 设备的兼容性方面。
    zer
        6
    zer  
    OP
       2018-03-11 23:23:57 +08:00
    @cevincheung 是千兆 Type-C 的,可以看到是 5Gb 的速度
    @cevincheung 我用的就是这款
    cevincheung
        7
    cevincheung  
       2018-03-11 23:29:17 +08:00
    @zer #6 噗呲……本来还想入这款……
    ptyfork
        8
    ptyfork  
       2018-03-11 23:51:01 +08:00
    确定 windows 上也是用的 iperf,而且参数一致?
    jedihy
        9
    jedihy  
       2018-03-12 02:53:17 +08:00   ❤️ 1
    应该是驱动问题,看看 CPU 是不是达到瓶颈了,虽然可能性很小。Win 和 Linux 都有一些 RSC,LSO 的优化不知道 OSX 上驱动支持不支持。
    zer
        10
    zer  
    OP
       2018-03-12 08:06:57 +08:00 via iPhone
    @ptyfork 参数一致的
    fork
        11
    fork  
       2018-03-12 09:27:38 +08:00
    @zer

    我觉得跟驱动关系不大, 我在我的 iMac 27'上测自带的网卡,使用你的参数测试 UDP 速度也只能 680Mb 左右,但是如果使用 TCP 传输的话,能稳定在 930Mb。 为什么测试传输要用 UDP 呢?
    zer
        12
    zer  
    OP
       2018-03-12 09:34:54 +08:00 via iPhone
    @fork UDP 方式可以看到延迟,用 TCP 的话,可能因为 TCP 的重传机制,真实的带宽会不准
    dudesun
        13
    dudesun  
       2018-03-12 10:42:49 +08:00
    realtek 的 macos 上自带驱动,亚信需要安装驱动才能用。
    我用的是
    https://detail.tmall.com/item.htm?spm=a230r.1.14.18.7bde1ff0W54P1O&id=536844809545&ns=1&abbucket=7&skuId=3205234220735
    tailf
        14
    tailf  
       2018-03-12 11:39:08 +08:00   ❤️ 1
    Darwin 内核和 Windows 内核的网络驱动完全不同,可能是 Darwin 对这款芯片 UDP 支持的不到位。
    fork
        15
    fork  
       2018-03-12 12:00:22 +08:00
    @zer

    iperf 里面带宽数据里还会包括 tcp retransmission 的数? 方便指引一下 iperf 文档或者代码的位置吗?


    @tailf 跟硬件驱动应该没什么关系,感觉跟内核的网络层关系更大一些,可以做个实验测试 loopback 的性能

    在我机器上,loopback 都上不了千兆:

    iperf -u -c 127.0.0.1 -b 1000M -t 10 -i 1
    ------------------------------------------------------------
    Client connecting to 127.0.0.1, UDP port 5001
    Sending 1470 byte datagrams
    UDP buffer size: 9.00 KByte (default)
    ------------------------------------------------------------
    [ 4] local 127.0.0.1 port 63929 connected with 127.0.0.1 port 5001
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.0- 1.0 sec 82.8 MBytes 695 Mbits/sec
    [ 4] 1.0- 2.0 sec 81.9 MBytes 687 Mbits/sec
    [ 4] 2.0- 3.0 sec 82.9 MBytes 696 Mbits/sec
    [ 4] 3.0- 4.0 sec 82.2 MBytes 690 Mbits/sec
    [ 4] 4.0- 5.0 sec 83.2 MBytes 698 Mbits/sec
    [ 4] 5.0- 6.0 sec 82.8 MBytes 695 Mbits/sec
    [ 4] 6.0- 7.0 sec 83.1 MBytes 697 Mbits/sec
    [ 4] 7.0- 8.0 sec 82.9 MBytes 696 Mbits/sec
    [ 4] 8.0- 9.0 sec 83.2 MBytes 698 Mbits/sec
    [ 4] 9.0-10.0 sec 82.9 MBytes 695 Mbits/sec
    [ 4] 0.0-10.0 sec 828 MBytes 694 Mbits/sec
    [ 4] Sent 591802 datagrams
    read failed: Connection refused
    [ 4] WARNING: did not receive ack of last datagram after 7 tries.



    tcp 轻松上 40Gb

    iperf -c localhost -i 1
    ------------------------------------------------------------
    Client connecting to localhost, TCP port 5001
    TCP window size: 144 KByte (default)
    ------------------------------------------------------------
    [ 5] local 127.0.0.1 port 56463 connected with 127.0.0.1 port 5001
    [ ID] Interval Transfer Bandwidth
    [ 5] 0.0- 1.0 sec 4.61 GBytes 39.6 Gbits/sec
    [ 5] 1.0- 2.0 sec 4.73 GBytes 40.7 Gbits/sec
    [ 5] 2.0- 3.0 sec 4.74 GBytes 40.7 Gbits/sec
    [ 5] 3.0- 4.0 sec 4.80 GBytes 41.2 Gbits/sec
    [ 5] 4.0- 5.0 sec 4.79 GBytes 41.2 Gbits/sec
    [ 5] 5.0- 6.0 sec 4.78 GBytes 41.0 Gbits/sec
    [ 5] 6.0- 7.0 sec 4.76 GBytes 40.9 Gbits/sec
    [ 5] 7.0- 8.0 sec 4.80 GBytes 41.2 Gbits/sec
    [ 5] 8.0- 9.0 sec 4.77 GBytes 41.0 Gbits/sec
    [ 5] 9.0-10.0 sec 4.78 GBytes 41.0 Gbits/sec
    [ 5] 0.0-10.0 sec 47.6 GBytes 40.9 Gbits/sec
    fork
        16
    fork  
       2018-03-12 12:03:41 +08:00
    刚才又试了一下, 用 iperf3 能快一点:

    iperf3 -c 127.0.0.1 -u -b 3000M
    Connecting to host 127.0.0.1, port 5201
    warning: Block size 16332 > sending socket buffer size 9216
    Increasing socket buffer size to 17356
    [ 5] local 127.0.0.1 port 63066 connected to 127.0.0.1 port 5201
    [ ID] Interval Transfer Bitrate Total Datagrams
    [ 5] 0.00-1.00 sec 357 MBytes 3.00 Gbits/sec 22952
    [ 5] 1.00-2.00 sec 358 MBytes 3.00 Gbits/sec 22958
    [ 5] 2.00-3.00 sec 358 MBytes 3.00 Gbits/sec 22962
    [ 5] 3.00-4.00 sec 358 MBytes 3.00 Gbits/sec 22967
    [ 5] 4.00-5.00 sec 357 MBytes 3.00 Gbits/sec 22947
    [ 5] 5.00-6.00 sec 358 MBytes 3.00 Gbits/sec 22970
    [ 5] 6.00-7.00 sec 358 MBytes 3.00 Gbits/sec 22961
    [ 5] 7.00-8.00 sec 358 MBytes 3.00 Gbits/sec 22967
    [ 5] 8.00-9.00 sec 358 MBytes 3.00 Gbits/sec 22956
    [ 5] 9.00-10.00 sec 357 MBytes 3.00 Gbits/sec 22952
    - - - - - - - - - - - - - - - - - - - - - - - - -
    [ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
    [ 5] 0.00-10.00 sec 3.49 GBytes 3.00 Gbits/sec 0.000 ms 0/229592 (0%) sender
    [ 5] 0.00-10.00 sec 1.57 GBytes 1.35 Gbits/sec 0.019 ms 126536/229592 (55%) receiver
    zer
        17
    zer  
    OP
       2018-03-12 13:52:34 +08:00
    @fork iperf2 可以通过-e 参数看到 tcp retransmit,但 iPerf3 通过-i 参数可以看到
    参考来源:
    https://fasterdata.es.net/performance-testing/network-troubleshooting-tools/iperf/
    zer
        18
    zer  
    OP
       2018-03-14 10:23:41 +08:00
    昨天入了苹果官网销售的 Belkin Type-C 千兆网卡,速度依旧没有改善,这网卡的芯片也是 Realtek 的,但是具体型号和网易这款不一样。
    我在安全模式下试了一次,也几乎没有变化。
    bao3
        19
    bao3  
       2018-03-14 10:42:50 +08:00 via iPhone
    别纠结这个了,同样的 wifi,同样的系统,同样的软件,同一个网卡,用 udp 测试就是慢,大约会是 tcp 的 70%左右,我是 win,经常要测试地铁 pis 无线
    zer
        20
    zer  
    OP
       2018-03-14 14:01:44 +08:00
    @bao3 我是有线千兆,同样测试在 pc 到 mac、mac 到 nas,速度都能达到千兆的速度,即使是 UDP。没理由使用 mac 到 mac 的时候,达不到千兆
    ptyfork
        21
    ptyfork  
       2018-03-25 08:55:59 +08:00
    @zer 上面都告诉你了,是 iperf 的在 mac 上实现有问题,跟硬件没有一毛钱关系,loopback 都达不到速度。换 iperf3。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2687 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:47 · PVG 22:47 · LAX 06:47 · JFK 09:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.