1. 程式人生 > >系統技術非業餘研究 » qperf測量網路頻寬和延遲

系統技術非業餘研究 » qperf測量網路頻寬和延遲

我們在做網路伺服器的時候,通常會很關心網路的頻寬和延遲。因為我們的很多協議都是request-reponse協議,延遲決定了最大的QPS,而頻寬決定了最大的負荷。 通常我們知道自己的網絡卡是什麼型號,交換機什麼型號,主機之間的物理距離是多少,理論上是知道頻寬和延遲是多少的。但是現實的情況是,真正的頻寬和延遲情況會有很多變數的,比如說網絡卡驅動,交換機跳數,丟包率,協議棧配置,光實際速度都很大的影響了數值的估算。 所以我們需要找到工具來實際測量下。

網路測量的工具有很多,netperf什麼的都很不錯。 我這裡推薦了qperf,這是RHEL 6發行版裡面自帶的,所以使用起來很方便,只要簡單的:

yum install qperf

就好。

我們看下man qperf的介紹:

qperf measures bandwidth and latency between two nodes. It can work over TCP/IP as well as the RDMA transports. On one of the nodes, qperf is typically run with no arguments designating it the server node. One may then run qperf on a client node to obtain measurements such as bandwidth, latency and cpu utilization.
In its most basic form, qperf is run on one node in server mode by invoking it with no arguments. On the other node, it is run with two arguments: the name of the server node followed by the name of the test. A list of tests can be found in the section, TESTS. A variety of options may also be specified.

使用起來也相當簡單:

在其中一臺機器上執行qperf,不帶任何引數就好,這臺機器就充當伺服器角色:

$ uname -r
2.6.32-131.21.1.tb477.el6.x86_64
$ qperf

在另外一臺機器上執行qperf,測量tcp的頻寬和延時,順便看下雙方機器的配置情況:

$ qperf 10.232.64.yyy tcp_bw tcp_lat conf
tcp_bw:
    bw  =  118 MB/sec
tcp_lat:
    latency  =  31.9 us
conf:
    loc_node   =  xxx.sqa.cm4
    loc_cpu    =  16 Cores: Intel Xeon  L5630 @ 2.13GHz
    loc_os     =  Linux 2.6.32-131.21.1.tb477.el6.x86_64
    loc_qperf  =  0.4.6
    rem_node   =  yyy.sqa.cm4
    rem_cpu    =  16 Cores: Intel Xeon  L5630 @ 2.13GHz
    rem_os     =  Linux 2.6.32-131.21.1.tb477.el6.x86_64
    rem_qperf  =  0.4.6

是不是很方便?典型情況下我們的頻寬是118M,延遲是32us, 在標準的千M環境下是符合預期的。

當然qperf有很多高階引數,可以設定socket buffer的大小,繫結CPU親緣性等, 很讚的一個特性是可以通過持續改變某個重要引數的值,來觀察臨界點:

-oo, –loop Var:Init:Last:Incr
Run a test multiple times sequencing through a series of values. Var is the loop variable;
Init is the initial value; Last is the value it must not exceed and Incr is the increment. It
is useful to set the –verbose_used (-vu) option in conjunction with this option.

比如我們可以透過改變訊息的大小(msg_size),比如從1個位元組到64K,每次倍增的方式,來觀察頻寬和延遲的變化情況,演示下:

$ qperf -oo msg_size:1:64K:*2  10.232.64.yyy tcp_bw tcp_lat 
tcp_bw:
    bw  =  2.43 MB/sec
tcp_bw:
    bw  =  4.69 MB/sec
tcp_bw:
    bw  =  9.12 MB/sec
tcp_bw:
    bw  =  18.5 MB/sec
tcp_bw:
    bw  =  33.1 MB/sec
tcp_bw:
    bw  =  61.4 MB/sec
tcp_bw:
    bw  =  114 MB/sec
tcp_bw:
    bw  =  118 MB/sec
tcp_bw:
    bw  =  113 MB/sec
tcp_bw:
    bw  =  114 MB/sec
tcp_bw:
    bw  =  114 MB/sec
tcp_bw:
    bw  =  118 MB/sec
tcp_bw:
    bw  =  117 MB/sec
tcp_bw:
    bw  =  118 MB/sec
tcp_bw:
    bw  =  118 MB/sec
tcp_bw:
    bw  =  117 MB/sec
tcp_bw:
    bw  =  117 MB/sec
tcp_lat:
    latency  =  31 us
tcp_lat:
    latency  =  31.1 us
tcp_lat:
    latency  =  31.1 us
tcp_lat:
    latency  =  31.4 us
tcp_lat:
    latency  =  30.8 us
tcp_lat:
    latency  =  32.1 us
tcp_lat:
    latency  =  32.6 us
tcp_lat:
    latency  =  33.3 us
tcp_lat:
    latency  =  35.5 us
tcp_lat:
    latency  =  38.6 us
tcp_lat:
    latency  =  50.1 us
tcp_lat:
    latency  =  69.6 us
tcp_lat:
    latency  =  88 us
tcp_lat:
    latency  =  128 us
tcp_lat:
    latency  =  209 us
tcp_lat:
    latency  =  365 us
tcp_lat:
    latency  =  650 us


我們可以看到當包的大小達到64位元組的時候,頻寬就上不去了;包到達1K的時候,延遲有了很大的變化。 這些臨界點對我們的伺服器程式設計時候對效能的估計和預期非常有幫助。

qperf除了測量tcp的,還可以測試rdma, udp, sctp等主流網路協議的頻寬和延遲,算是個很新的工具,推薦大家使用。

祝玩得開心!

Post Footer automatically generated by wp-posturl plugin for wordpress.

No related posts.

相關推薦

系統技術業餘研究 » qperf測量網路頻寬延遲

我們在做網路伺服器的時候,通常會很關心網路的頻寬和延遲。因為我們的很多協議都是request-reponse協議,延遲決定了最大的QPS,而頻寬決定了最大的負荷。 通常我們知道自己的網絡卡是什麼型號,交換機什麼型號,主機之間的物理距離是多少,理論上是知道頻寬和延遲是多少的。但是現實的情況是,真正的

系統技術業餘研究 » Erlang match_spec引擎介紹應用

match_spec是什麼呢? A “match specification” (match_spec) is an Erlang term describing a small “program” that will try to match something (either the para

系統技術業餘研究 » 區域性性原理在計算機分散式系統中的應用課程PPT

這個課程最主要focus在資料的區域性性原理,從硬體到作業系統到應用程式這樣的順序過來的,對於我們提高核心系統軟體的效能非常有啟發意義. 課件下載點選這裡 修正:由於原連結已經不存在了,特地在這裡放了一份。 以下是教程的介紹: 課程簡介 ___________________________

系統技術業餘研究 » Fio壓測工具io佇列深度理解誤區

Fio 是個強大的IO壓力測試工具,我之前寫過不少fio的使用和實踐,參見 這裡。 隨著塊裝置的發展,特別是SSD盤的出現,裝置的並行度越來越高。利用好這些裝置,有個訣竅就是提高裝置的iodepth, 一把餵給裝置更多的IO請求,讓電梯演算法和裝置有機會來安排合併以及內部並行處理,提高總體效率。

系統技術業餘研究 » 大檔案重定向管道的效率對比

微博上的@拉風_zhang提出了個問題: @淘寶褚霸 請教個問題,#1. cat huge_dump.sql | mysql -uroot ;#2. mysql -uroot < huge_dump.sql ;#1效率要高,在linux中通過管道傳輸 和 < 這種方式有什麼差別

系統技術業餘研究 » Erlang 網路密集型伺服器的瓶頸解決思路

最近我們的Erlang IO密集型的伺服器程式要做細緻的效能提升,從每秒40萬包處理提升到60萬目標,需要對程序和IO排程器的原理很熟悉,並且對行為進行微調,花了不少時間參閱了相關的文件和程式碼。 其中最有價值的二篇文章是: 1. Characterizing the Scalability of

系統技術業餘研究 » erlsnoop erlang訊息監聽器(除錯erlang網路程式利器,支援最新的R13B04)

由於R13B以後, Erlang的分佈協議修改了格式, 添加了Atom Cache, erlsnoop在新版本下無法使用, 我特地打了patch, 使得它支援最新的版本,原始碼在附件中下載. 在erlang的郵件列表上看到: Have you tried putting a snoop to se

系統技術業餘研究 » Erlang網路多程序模型的實驗

在做網路程式的時候我們會經常用到多程序模式. 主程序執行bind呼叫得到控制代碼後, 同時fork N個子程序, 把控制代碼傳遞給子程序, 多程序同時accept來處理. 這個模型在erlang下很有現實意義的. 在之前的測試中,我們演示了erlang的單處理器模式的威力,最多的時候在單cpu上可

系統技術業餘研究 » blktrace未公開選項網路儲存擷取資料

我們透過blktrace來觀察io行為的時候,第一件事情需要選擇目標裝置,以便分析該裝置的io行為。具體使用可以參考我之前寫的幾篇:這裡 這裡 這裡 blktrace分為核心部分和應用部分,應用部分收到我們要捕捉的裝置名單,傳給核心。核心分佈在block層的各個tracepoint就會開始工作,把

系統技術業餘研究 » 巧用Netcat方便網路程式開發

首先介紹下NC,這個號稱網路瑞士軍刀的工具。 What is Netcat? Netcat is a featured networking utility which reads and writes data across network connections, using the TC

系統技術業餘研究 » 詳解伺服器記憶體頻寬計算使用情況測量

前段時間我們在MYSQL調優上發現有瓶頸,懷疑是過多拷貝記憶體,導致記憶體頻寬用完。在Linux下CPU的使用情況有top工具, IO裝置的使用情況有iostat工具,就是沒有記憶體使用情況的測量工具。 我們可以看到大量的memcpy和字串拷貝(可以用systemtap來測量),但是像簡單的資料移

系統技術業餘研究 » dropwatch 網路協議棧丟包檢查利器

在做網路伺服器的時候,會碰到各種各樣的網路問題比如說網路超時,通常一般的開發人員對於這種問題最常用的工具當然是tcpdump或者更先進的wireshark來進行抓包分析。通常這個工具能解決大部分的問題,但是比如說wireshark發現丟包,那深層次的原因就很難解釋了。這不怪開發人員,要怪就怪lin

系統技術業餘研究 » 網路棧記憶體不足引發程序掛起問題

我們知道TCP socket有傳送緩衝區和接收緩衝區,這二個緩衝區都可以透過setsockopt設定SO_SNDBUF,SO_RCVBUF來修改,但是這些值設多大呢?這些值和協議棧的記憶體控制相關的值什麼關係呢? 我們來解釋下: $ sysctl net|grep mem net.core.wme

系統技術業餘研究 » nicstat 網路流量統計利器

前段時間看到brendangregg的 Linux Performance Analysis and Tools PPT裡面提到的nicstat,研究了下是個不錯的東西,分享給大家。 nicstat is to network interfaces as “iostat” is to disks,

系統技術業餘研究

ItPub寫的文章“2017 年度 DB-Engines 資料庫冠軍得主:PostgreSQL 封王!”, 點選 這裡 進一步閱讀 升的最快的幾個資料庫,我簡單的無責任點評: PG資料庫是很老的資料庫,不過這幾年冉冉升起,因為是學院派的,有很好的學術和智力的支援,一直以來在資料庫的體系結構,程式碼

系統技術業餘研究 » MySQL資料庫架構的演化觀察

MySQL資料庫架構的演化觀察 December 14th, 2017 Categories: 資料庫 Tags: mysql

系統技術業餘研究 » inet_dist_connect_options

Erlang 17.5版本引入了inet_dist_{listen,connect}_options,對於結點間的互聯socket可以有更精細的控制,RPC的時候效能可以微調: raimo/inet_tcp_dist-priority-option/OTP-12476: Document ke

系統技術業餘研究 » 推薦工作機會

最後更新時間:2014/11/28 請賜簡歷至:[email protected], 感謝您對加入我們公司有興趣,我們希望能早日和您共事。 以下幾個職位1年內有效,歡迎內部轉崗:
 資深資料工程師 公司:阿里(核心系統資料庫組) 工作地點:杭州(西溪園區) 崗位描述: 分析雲服務產生的海

系統技術業餘研究 » 新的工作研究方向

和大家更新下: 做了將近8年資料庫後,我的工作和研究方向將會延伸到虛擬化和計算相關的雲服務,希望能夠和大家一起進步,Happy New Year! 預祝大家玩得開心! Post Footer automatically generated by wp-posturl plugin for w

系統技術業餘研究 » 叢集引入inet_dist_{listen,connect}_options更精細引數微調

Erlang 17.5版本引入了inet_dist_{listen,connect}_options,對於結點間的互聯socket可以有更精細的控制,RPC的時候效能可以微調: raimo/inet_tcp_dist-priority-option/OTP-12476: Document ke