不久前,我在 Ubuntu 20.04 中評測了一款基于 Realtek RTL8156B 芯片USB 3.0 轉 2.5 Gbps 的以太網適配器。測評時,我對這款適配器的可靠性和性能并沒有多印象的深刻。當時也有很多朋友給了建議,例如更換網線、MTU 尺寸等。
但更換網線并沒有什么幫助,我看到評論有人提到可能是 cdc_ncm 驅動程序的問題,我還看到另一條評論說更新到 linux 內核 5.14有應該能正確地安裝r8152 驅動程序。所以我就這樣做了,如下所示:
前往“CNX Software中文站”官網,查看完整信息
將 Linux 5.13(Ubuntu 20.04 + HWE 附帶)升級到了 Linux 5.14,但不幸的是該系統仍然繼續使用了帶有半雙工鏈接的 cdc_ncm 驅動程序:
前往“CNX Software中文站”官網,查看完整信息
后來我想,有可能必須要使用 udev 規則來防止加載 cdc_ncm 驅動程序了。而 r8152 驅動程序中確實有50-usb-realtek-net.rules能夠幫助做到這一點。所以我就將文件復制到了/etc/udev/rules.d/文件夾中。由于不想重新啟動,所以我卸載了不需要的模塊,然后重新啟動了 udev 試一試:
前往“CNX Software中文站”官網,查看完整信息
我們來看看結果怎么樣,如下所示:
前往“CNX Software中文站”官網,查看完整信息
很好!它現在可以使用 r8152 驅動程序了,并且我們還有一個全雙工連接。
我們再次來對所有測試的結果來進行一下比較。
iperf2
上傳:
前往“CNX Software中文站”官網,查看完整信息
下載:
前往“CNX Software中文站”官網,查看完整信息
這樣做之后,下載速度有所提高了,之前使用 cdc_ncm 驅動程序時速度是 600 Mbps,但仍然沒有接近 2.3 Gbps。
現在我們來體驗下全雙工:
前往“CNX Software中文站”官網,查看完整信息
這其實還不算太糟糕了。
iperf3
上傳:
前往“CNX Software中文站”官網,查看完整信息
下載:
前往“CNX Software中文站”官網,查看完整信息
和iperf2是差不多的。其實 iperf3 多年來一直都不支持全雙工,但它們這次的 3.7 版重新引入了該功能。所以我們來試試看:
前往“CNX Software中文站”官網,查看完整信息
哎呀!發生了什么呢?內核日志中似乎也有一些錯誤消息。
前往“CNX Software中文站”官網,查看完整信息
我其實不是唯一遇到這個問題的人了,所以我只能說這是 r8156 驅動程序 Github repo 中一個未解決問題。以下是開發者的回答,僅供參考:
我懷疑是以太網適配器方面存在了問題,因為有很多報告稱它與 DS918+ 是一起工作。比如:如電源線設計、過熱等等。你們可以點擊下面鏈接查看詳情:
https://github.com/bb-qq/r8152/wiki/Compatibility
或者你們也可以試試其他供應商的以太網適配器,使用帶有外部電源的 USB 集線器有可能可以改善這種情況。
此時,以太網根本不工作,所以我不得不拔下并重新插入 USB 適配器。這次終于成功“工作”了。
前往“CNX Software中文站”官網,查看完整信息
Rx 側仍然有重傳,這其實也幫助解釋了為什么速度會如此低。
SAMBA
我將一臺帶有 RTL8156B 適配器和 SATA SSD 的筆記本電腦連接到了一個帶有 2.5GbE 的端口上,并配備了480GB SSD和MINIX USB-C 擴展塢的UP Xtreme i11迷你 PC 。
SAMBA r8152驅動程序筆記本電腦傳輸到到迷你電腦的速度
r8152 驅動程序的傳輸速度大約是 930 Mbps,而 cdc_ncm 驅動程序的傳速度大約是 750 Mbps。
現在我從迷你 PC 傳輸數據到筆記本電腦這個傳輸也可以稱其為“下載”。
SAMBA r8152驅動程序迷你電腦傳輸數據到筆記本電腦
不出意料,此時的速度比較慢,只有837 Mbps,但仍然比我使用 cdc_ncm 驅動程序時的速度要好,使用 cdc_ncm 時只有不到500 Mbps。
scp
筆記本電腦到迷你電腦:
前往“CNX Software中文站”官網,查看完整信息
迷你電腦到筆記本電腦:
前往“CNX Software中文站”官網,查看完整信息
使用 scp 下載和上傳的速度幾乎是相同的,這一點很奇怪。這里的遇到的瓶頸似乎是因為我的 SATA SSD:
前往“CNX Software中文站”官網,查看完整信息
可以看到其讀取速度限制在 145 MB/s 左右,寫入速度則限制在了 140 MB/s 左右。
對比來看,MINIX NEO Storage Plus USB-C 擴展塢中使用的SSD 速度要更快了。我上次測試時,其順序讀取速度是 379MB/s,順序寫入速度為 240+ MB/s。
現在我們將數據放到 /dev/null上,看看現在的速度是怎么樣的。
下載到筆記本電腦:
前往“CNX Software中文站”官網,查看完整信息
從筆記本電腦上傳:
前往“CNX Software中文站”官網,查看完整信息
由上可以看到,至少對于上傳而言,速度已經基本可以了。我覺得下載速度還是有一些問題,但是使用 r8152 驅動后其性能確實是有了很大的提升。
cdc_ncm和r8152 drivers ubuntu
使用NanoPi R4S進行測試
雖然上面的測試結果比之前的測試結果要好多了,但仍然不是最佳的。因為我有一個帶2個 USB 3.0 端口的 NanoPi R4S 路由器,所以我首先使用最新的 OpenWrt (FriendlyWrt) 21.02 鏡像和 Linux 5.15來嘗試一下,如下所示:
前往“CNX Software中文站”官網,查看完整信息
這真的很慘,兩邊都有很多是重傳的。
前往“CNX Software中文站”官網,查看完整信息
查看內核日志,我們的 RTL8156B USB 適配器再次使用該 CDC NCM 驅動程序,就像在 Ubuntu 中一樣……也有一個 r8152 驅動程序,但無論我在 /etc/modules.d 中刪除什么模塊,要么加載 CDC NCM,要么加載 eth2界面根本不顯示。所以我切換到基于 Ubuntu 20.04 的 FriendlyCore 操作系統,它也是Linux 5.15,這將更接近我筆記本電腦上的設置。
正如人們所預料的那樣,RTL8156B 適配器在 Ubuntu 中默認使用的是 CDC NCM 驅動程序。
前往“CNX Software中文站”官網,查看完整信息
eth1 沒有出現在 ifconfig 中,所以為了使用 r8152 驅動程序我還是繼續更改 udev 規則。
前往“CNX Software中文站”官網,查看完整信息
這個測試越來越令人沮喪了,我們先來更新一下系統看看。
前往“CNX Software中文站”官網,查看完整信息
雖然我遵循了所有的步驟,但因為 FriendlyCore 鏡像依賴的是中國的服務器,這與我的服務器相比就非常慢(只是運行 apt update 就可能需要 15 分鐘)。因此雖然理論上更新其實是很快的,但它仍然還是需要幾個小時!具體你們可以參考“從命令行更改 Ubuntu Apt 鏡像”。
更新系統對固件的問題其實沒有什么幫助。因此,我搜索了rtl_nic/rtl8156b-2.fw文件。它應該是位于 firmware--realtek Debian 軟件包和linux-firmware Ubuntu Impish 軟件包中。
我下載了后者,并提取了 rtl8156b-2.fw ,然后將其復制到 /etc/firmware/rtl_nic。現在終于可以成功工作了,如下所示:
前往“CNX Software中文站”官網,查看完整信息
不知道什么原因,其接口仍然未啟動,我只好手動將其添加到了 /etc/network/interfaces.d,但似乎不起什么作用。
回到帶有rtl8156b-2.fw固件的Ubuntu筆記本電腦
因為沒什么作用,所以我又回到了筆記本電腦上,并將固件文件復制到了/lib/firmware/rtl_nic目錄下。結果與 NanoPi R4S 中的結果是一樣的,如下所示:
前往“CNX Software中文站”官網,查看完整信息
我們試試iperf3上傳:
前往“CNX Software中文站”官網,查看完整信息
和以前一樣,還是沒有回到之前的狀態。現在我使用iperf3測試下載:
前往“CNX Software中文站”官網,查看完整信息
情況好轉了一點,但還是沒有達到最理想的結果,而且重發數量真的好多!我現在真的好累,如果你們有什么其他想法好方法,請留言告訴我。