背景
當下雲計算、大數據盛行的背景下,大並發和大吞吐量的需求已經是擺在企業面前的問題了,其中網絡的性能要求尤為關鍵,除了軟體本身需要考慮到性能方面的要求,一些硬體上面的優化也是必不可少的。
作為一名測試工作者,對於性能測試的問題肯定不會陌生,但是測試不僅僅是執行和收集數據,更多的應該是分析問題、找到性能瓶頸以及一些優化工作。
畢竟在客戶現場測試性能的時候,能夠通過一些系統層面的調優,提升軟體的性能,那對項目無疑是一件錦上添花的事。
指標
不管你做何種性能測試,指標是繞不過去的事,指標是量化性能測試的重要依據。衡量某個性能的指標有很多,比如衡量資料庫性能通常用TPS、QPS和延時,衡量io性能通常用iops、吞吐量和延時,衡量網絡的性能指標也有很多,在業界有一個RFC2544的標準,參考連結:https://www.rfc-editor.org/rfc/rfc2544。
這裡稍微解釋一下幾個指標:
背靠背測試:在一段時間內,以合法的最小幀間隔在傳輸介質上連續發送固定長度的包而不引起丟包時的數據量。
丟包率測試:在路由器穩定負載狀態下,由於缺乏資源而不能被轉發的幀占所有該被轉發的幀的百分比。
時延測試:輸入幀的最後一位到達輸入埠到輸出幀的第一位出現在輸出端看的時間間隔。
吞吐量測試:沒有丟包情況下能夠轉發的最大速率。
通常客戶對於吞吐量和時延的指標是比較關心的,吞吐量反應了系統的並發的處理能力,時延反應了整體業務的響應時間。
測試準備
本文以網卡中的戰鬥機intel X710為測試對象,進行小包的吞吐量測試。
Tips:通常大包的測試可以達到線速,小包則很難線速,相同mtu下,包越小單位時間內cpu處理的包數越多,cpu的壓力越大。
測試拓撲
在被測設備上插入X710網卡,使用網卡的2個網口建立linux bridge,通過測試儀發送接收數據包:
[root@localhost~]#brctl addbr test
[root@localhost~]#brctl addif test enp11s0f2 enp11s0f3
[root@localhost~]#ip link set test up
[root@localhost~]#brctl show
bridge name bridge id STP enabled interfaces
test 8000.6cb311618c30 no enp11s0f2
enp11s0f3
virbr0 8000.5254004c4831 yes virbr0-nic
3.2硬體信息
有個偉人曾說過,「如果性能測試不談硬體,那麼就和戀愛不談結婚一個道理,都是耍流氓」。
魯迅:"我沒說過!"題外話,這裡先簡單說一下數據包進入網卡後的流程:數據包進入到網卡後,將數據緩存到伺服器內存後通知內核進行處理,接著協議棧進行處理,通常netfilter也是在協議棧去處理,最後應用程式從socker buff讀取數據。
言歸真正,本文測試採用的是國產之光飛騰S2500伺服器。
4、測試調優
針對以上拓撲,發送128位元組萬兆雙向流量,用RFC2544標準進行測試。
RFC2544的標準是0丟包測試吞吐量,結果是818Mbps
以上都是前菜,接下來是本文的重頭戲,根據已有資源做一些優化,提升「測試」性能,讓客戶滿意。
4.1調整隊列數
調整網卡的隊列數,利用網卡的多隊列特性,不同的隊列通過中斷綁定到不同的cpu,提升cpu處理性能,提升網絡帶寬。
調整隊列數,這裡也不是越大越好,因為伺服器的cpu個數是有上限的,隊列多的話會出現多個中斷綁定在同一個cpu上,這裡我伺服器單個numa有8個cpu,修改隊列數為8。
[root@localhost~]#ethtool-l enp11s0f2
Channel parameters for enp11s0f2:
Pre-set maximums:
RX:0
TX:0
Other:1
Combined:128
Current hardware settings:
RX:0
TX:0
Other:1
Combined:8
因為數據包會根據hash來進入到多個收包隊列,因此發送數據包的時候,可以選擇源ip變化的流來確保使用了網卡的多隊列,可以查看網卡的隊列計數。
……
由於作者版權要求,僅展示文章的一部分,如需閱讀完整版文章,可以私信回復」文章「即可免費獲取。
最後:
1)關注+私信回覆:「測試」,可以免費領取一份10G軟體測試工程師面試寶典文檔資料。以及相對應的視頻學習教程免費分享!,其中包括了有基礎知識、Linux必備、Mysql資料庫、抓包工具、接口測試工具、測試進階-Python編程、Web自動化測試、APP自動化測試、接口自動化測試、測試高級持續集成、測試架構開發測試框架、性能測試等。
2)關注+私信回覆:"入群" 就可以邀請你進入軟體測試群學習交流~~