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