⚡️探究 iPhone 的 USB 速度對開發體驗的影響:實測 USB 速率的方法
使用 usbmuxd 和 iperf3 實測 iPhone 16 Pro Max 的 USB 3 可達 6 Gb/s,比 USB 2.0 快 20 倍。並且能從數據算出虛擬網路層的損耗。
在前一篇文章中,我說找不到實測 USB 傳輸速率的方法。很高興地,今天已經有所突破。這篇就來介紹這個方法與實測結果。
在開始介紹以前,得先說明一下,Mac 與 iOS 在透過 USB 連線時,是走一套虛擬網路介面,而不是直接走 USB 的通訊協定。
簡介 usbmux
這套介面使用一個 daemon 程序,叫做 usbmuxd,它的功能是提供一個類似 TCP 的機制,進行通訊。透過這種機制,不同的程式可以採用不同的 port 進行溝通,而不會有獨占 USB 資源的問題。
你可以從活動監視器(Activity Monitor)或系統監視程式(Console)看到它的存在。


位置在 /Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/Resources/usbmuxd。
而一些備份或與 iPhone 傳輸資料的軟體,包括非 Mac 平台的軟體,都是使用相容 usbmux 的實作來達成的。
例如,libimobiledevice.org 有一套跨平台的(以 Linux 為主)開源實作,來達成與 iOS 設備通訊。
使用開源的 libusbmuxd 實測 USB 速率
而我們用來進行 USB 實際傳輸速率的方式,就是使用 usbmuxd 的相容套件,建立起虛擬網路的 port,然後再使用 iperf3 測速。
步驟如下:
1. 安裝 libimobiledevice 與 libusbmuxd。
brew install libimobiledevice
brew install libusbmuxd
2. 把 iPhone 透過 USB 線與 Mac 連接
3. 配對裝置 idevicepair pair。第一次可能會被詢問裝置密碼,輸入完畢以後再送出一次相同指令
4. 輸入 iproxy 2222 22 來啟用虛擬的網路,讓本地的 2222 port 轉發到裝置的 22 port(請注意:每次插拔 USB 都需要重新執行 3、4 兩個步驟)

5. 把 iPhone 的 Wi-Fi 關閉,並打開 iPerf app,進入 Server Mode,會看到 iPhone 的 IP

6. 在 Mac 上,使用 iperf3 指令,搭配上一步驟看到的 IP
iperf3 -c 169.254.134.43
實測結果
在我的 iPhone 16 Pro Max,使用 10 Gb/s 的 USB 3 傳輸線,可以跑出 6.12 Gb/s 的速率!

使用理論值為 5 Gb/s 的 USB Hub,實際速率是 3.21 Gb/s。

至於使用 Apple 原廠的 USB 2.0 規格 USB-C 傳輸線,只得到 303 Mb/s 的速率,比理論值 480 Mb/s 低上不少。

重新整理一次前一篇的速率列表,由慢到快:
- 93.8 Mb/s: Mac 接 100 Mbps 乙太網路(爛網路線)
- 303 Mb/s: USB 2.0(Apple 原廠充電傳輸線)
- 500 Mb/s: Mac 與 iPhone 都接上 Wi-Fi 6 AP
- 700 Mb/s: Mac 接乙太網路 + iPhone 接 Wi-Fi 6
- 940 Mb/s: Mac 與 iPhone 都接乙太網路
- 3.21 Gb/s: USB 3 Hub(5 Gb/s 規格)
- 6.12 Gb/s: USB 3(10 Gb/s 傳輸線)
實測結果顯示,iPhone 的 USB 3 速率可以達到 USB 2.0 的 20 倍。對於 Mac 接上1 GbE、iPhone 走 Wi-Fi 6 的情況,也有 8.7 倍速的差異。
此外,透過 usbmuxd 沒有達到 USB 規格的理論值,大概只剩下 61~63 %。可以看得出來這套虛擬網路層是有一些損耗的。
結語
最後,跟讀者分享一下,我是怎麼找到實測 iPhone USB 速率的方法。