有個場景在機房反復(fù)上演:新采購的一批“高性能”網(wǎng)卡裝上去,業(yè)務(wù)吞吐沒有任何起色;同一型號插到另一臺機器上,卻“煥發(fā)青春”。運維的第一反應(yīng)往往是“卡有問題”,但多數(shù)時候,網(wǎng)卡是被冤枉的。
先糾正一個歸因習(xí)慣:硬件常常是“背鍋俠”
一條鏈路的性能由四個環(huán)節(jié)共同決定:硬件、驅(qū)動、協(xié)議棧、應(yīng)用。絕大多數(shù)“變慢”發(fā)生在硬件之外的后三個環(huán)節(jié)。網(wǎng)卡廠商能控制的是硬件與驅(qū)動,剩下的交給操作系統(tǒng)和運維——可很多團隊把全部期望壓在“換一塊好卡”上,配置卻還停留在出廠默認(rèn)值,等于讓新硬件跑舊配置。

四個藏在服務(wù)器里的隱形瓶頸
第一個是中斷風(fēng)暴與CPU親和。默認(rèn)驅(qū)動可能把全部中斷打進同一個CPU核,出現(xiàn)“某個核滿載、網(wǎng)卡卻空閑”的假性瓶頸。啟用多隊列(RSS)并配置中斷親和,把負(fù)載攤到多個核上,往往立竿見影。
第二個是卸載功能沒有開啟。TSO、GRO、校驗和卸載這類硬件加速,本質(zhì)是讓網(wǎng)卡替CPU干活。不開卸載,CPU就要用軟件去分段、校驗、重組,吞吐與CPU占用此消彼長。服務(wù)器級網(wǎng)卡普遍支持這些特性——例如光潤通FF-901E2.5G支持TCP/UDP校驗和卸載與MSI/MSIX多中斷——但“支持”不等于“已啟用”,需要運維去確認(rèn)。
第三個是巨型幀。虛擬化、存儲、備份等大包場景,把MTU從1500調(diào)到9000往往能帶來10%—20%的吞吐提升;但全鏈路必須一致配置,否則反而增加分片與丟包。
第四個是緩沖區(qū)與隊列深度。TCP收發(fā)緩沖區(qū)、環(huán)形隊列(Ring)深度、驅(qū)動參數(shù),默認(rèn)值面向“通用”而不是“你的場景”。這一層最容易被忽視,也最值得按業(yè)務(wù)調(diào)優(yōu)。

“先軟后硬”的五步排障清單
遇到網(wǎng)絡(luò)變慢,建議按下面五步走,最后一步才輪到懷疑硬件。
五步排障清單
步驟 | 動作 | 關(guān)鍵檢查點 |
第1步 | 核對驅(qū)動與固件 | 版本與操作系統(tǒng)、主板匹配;查閱廠商發(fā)布說明 |
第2步 | 檢查中斷與隊列 | 用ethtool-l查看隊列數(shù)、-g查看Ring深度;結(jié)合/proc/interrupts、/proc/softirqs確認(rèn)中斷與軟中斷分布均衡、已做CPU親和 |
第3步 | 檢查卸載與巨型幀 | 用ethtool-k確認(rèn)校驗和卸載、tso、gro已開啟;按場景決定MTU |
第4步 | 打流驗證 | 用iperf3做單流與多流對比,區(qū)分“單流上限”與“整卡上限” |
第5步 | 復(fù)檢物理層 | 協(xié)商速率、光模塊光功率、線纜與接口狀態(tài);最后再換硬件 |
為什么我們總想“換掉”,而不是“調(diào)好”?
換硬件是可見的、可匯報的、能立刻寫進周報的;調(diào)軟件是瑣碎的、難量化的、要反復(fù)試錯的。于是很多組織習(xí)慣用“買買買”替代“調(diào)調(diào)調(diào)”,買了新硬件,繼續(xù)跑舊配置,浪費翻倍。
真正的浪費往往不是設(shè)備采購,而是“新設(shè)備跑著舊配置”的沉默損耗。技術(shù)管理里最貴的成本是認(rèn)知,不是硬件。把“調(diào)好”作為第一步,把“換掉”作為最后一步,很多性能預(yù)算本可以不用花。
先調(diào)好,再換掉
下次網(wǎng)絡(luò)變慢,先做五步排障,再談?chuàng)Q卡。硬件值得你為它掏錢的時候,是你已經(jīng)確認(rèn)軟件與配置都沒有問題之后。到那時,你花的每一分錢,都在為性能買單,而不是為習(xí)慣買單。