<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    聶永的博客

    記錄工作/學(xué)習(xí)的點點滴滴。

    Fastsocket學(xué)習(xí)筆記之示范應(yīng)用篇

    前言

    上篇介紹了如何構(gòu)建安裝fastsocket內(nèi)核模塊,下面將基于fastsocket/demo/README.md文件翻譯整理而成。

    嗯,下面進入翻譯篇。

    介紹

    示范為一個簡單TCP Server服務(wù)器程序,用于基準(zhǔn)測試和剖析Liunx內(nèi)核網(wǎng)絡(luò)堆棧性能表現(xiàn),當(dāng)然也是為了演示Fastsocket可擴展和其性能改進。

    示范應(yīng)用基于epoll模型和非阻塞性IO,處理網(wǎng)絡(luò)連接,但只有在多核的模式下才能夠工作得很好:程序的每一個進程被綁定到CPU的不同核,起始于CPU core 0,各自獨立處理客戶端連接請求。

    示范程序具有兩種工作模式:

    • 服務(wù)器模式:任何請求都會直接返回HTTP 200 OK
    • 代理模式:服務(wù)器接收到客戶端請求,轉(zhuǎn)發(fā)給后端服務(wù)器,同時轉(zhuǎn)發(fā)后端響應(yīng)給客戶端。

    這是一個簡單傻瓜形式的Tcp Server,僅僅用于測試使用,使用時要求客戶端和服務(wù)器端只能夠攜帶一個packet包大小的數(shù)據(jù),否則程序會處理不了。

    構(gòu)建

    以下面方式進行構(gòu)建:

    cd demo && make

    用法

    最簡單方式以默認配置無參數(shù)形式運行:

    ./server

    參數(shù)如下:

    • -w worker_num: 定義進程數(shù).
      • 默認值為當(dāng)前可用CPU核心數(shù)個進程.
    • -c start_core: 指定進程綁定CPU核的開始索引值
      • 默認值為 0.
    • -o log_file: 定義日志文件名稱
      • 默認值為 ./demo.log
    • -a listen_address: 指定監(jiān)聽地址,[ip:port]字符串組合形式,支持添加多個地址
      • 默認值為 0.0.0.0:80
    • -x backend_address: 啟動代理模式,需要填寫[ip:port]組合形式地址,支持多個代理地址
      • 默認不開啟
    • -v: 啟用詳細統(tǒng)計數(shù)據(jù)輸出
      • 默認為禁用
    • -d: 啟動Debug調(diào)試模式,調(diào)試信息被寫入日志文件中
      • 默認禁用
    • -k: 啟用HTTP keepalive機制,當(dāng)前只能夠工作在服務(wù)器模式下
      • 默認被禁用

    實例

    在運行之前,需要注意兩點:

    • 為了跑滿CPU,需要確保客戶端和后端服務(wù)器都不應(yīng)該成為瓶頸,兩種可行方案:
      • 提供足夠多機器用以充當(dāng)客戶端和后端服務(wù)器角色
      • 或在一臺機器上充當(dāng)客戶端和后端服務(wù)器,使用fastsocket(推薦方案,較為節(jié)省服務(wù)器)
    • 正確配置網(wǎng)卡,若不知道如何做,可以參考源碼中script目錄

    服務(wù)器模式示范

    服務(wù)器模式至少需要兩臺主機:

    • 主機A作為客戶端產(chǎn)生HTTP請求
    • 主機B為Web服務(wù)器

    設(shè)定每臺主機CPU 12核,網(wǎng)絡(luò)大概設(shè)置如下:

     +--------------------+     +--------------------+
     |       Host A       |     |      Host B        |
     |                    |     |                    |
     |    10.0.0.1/24     |-----|    10.0.0.2/24     |
     |                    |     |                    |
     +--------------------+     +--------------------+
    

    下面是運行兩臺主機的步驟:

    主機B

    • Web服務(wù)器模式單獨運行,開啟12個工作進程,和CPU核心數(shù)一致:

      ./server -w 12 -a 10.0.0.2:80

    • 或者測試借助于Fastsocket所帶來的性能

      LD_PRELOAD=../library/libfsocket.so ./server -w 12 -a 10.0.0.2:80

    主機A

    • 運行Apache ab程序作為請求者
      ab -n 1000000 -c 100 http://10.0.0.2:80/
    • 單個Apache ab程序不能夠體現(xiàn)服務(wù)器負載能力,多個ab實例同時并發(fā)運行可能會好很多,開12個實例和CPU核心數(shù)一致: N=12; for i in $(seq 1 $N); do ab -n 1000000 -c 100 http://10.0.0.2:80/ > /dev/null 2>&1; done

    代理模式示范

    代理模式下,需要三臺機器:

    • 主機A作為客戶端產(chǎn)生HTTP請求
    • 主機B作為代理角色
    • 主機C則需要后端服務(wù)器

    設(shè)定每臺機器CPU內(nèi)核數(shù)12,網(wǎng)絡(luò)結(jié)構(gòu)如下:

     +--------------------+     +--------------------+     +--------------------+
     |       Host A       |     |       Host B       |     |       Host C       |
     |                    |     |                    |     |                    |
     |    10.0.0.1/24     |     |    10.0.0.2/24     |     |     10.0.0.3/24    |
     +---------+----------+     +---------+----------+     +----------+---------+
               |                          |                           |
     +---------+--------------------------+---------------------------+---------+
     |                                 switch                                   |
     +--------------------------------------------------------------------------+
    

    下面為具體的運行步驟:

    主機B

    • 為代理服務(wù)器啟動12個進程
      ./server -w 12 -a 10.0.0.2:80 -x 10.0.0.3:80
    • 或者以Fastsocket方式啟動 LD_PRELOAD=../library/libsocket.so ./server -w 12 -a 10.0.0.2:80 -x 10.0.0.3:80

    主機C

    • 理論上任何WEB服務(wù)器都可以充當(dāng)后端服務(wù)器,這里充分利用示范程序好了:
      ./server -w 12 -a 10.0.0.3:80

    主機A

    • 作為客戶端請求生成器,同樣啟動12個Apache ab實例:
      N=12; for i in $(seq 1 $N); do ab -n 1000000 -c 100 http://10.0.0.2:80/ > /dev/null 2>&1; done

    動手實踐

    以上翻譯完畢,下面將是根據(jù)上面內(nèi)容進行動手測試描述吧。

    安裝Apache ab命令

    檢查一下包含Apache ab命令的軟件包:

    yum provides /usr/bin/ab

    可以看到類似于如下字樣:

    httpd-tools-2.2.15-39.el6.centos.x86_64 : Tools for use with the Apache HTTP Server

    安裝它就可以了

    yum install httpd-tools

    虛擬機測試

    Windows 7專業(yè)版跑VMware Workstation 10.04虛擬機,兩個Centos 6.5系統(tǒng),配置一致,2G內(nèi)存,8個CPU邏輯處理器核心。

    客戶端安裝Apache ab命令測試,跑8個實例: for i in $(seq 1 8); do ab -n 10000 -c 100 http://192.168.192.16:80/ > /dev/null 2>&1; done

    服務(wù)器端,分別記錄:
    /opt/fast/server -w 8 LD_PRELOAD=../library/libfsocket.so ./server -w 8

    服務(wù)器模式對比

    兩組數(shù)據(jù)對比:

    運行方式 處理消耗時間(秒) 處理總數(shù) 平均每秒處理數(shù) 最大值
    單獨運行 34s 80270 2361 2674
    加載fasocket 28s 80399 2871 2964

    代理模式數(shù)據(jù)

    測試方式如上,三臺服務(wù)器(測試端+代理端+服務(wù)器端)配置一樣。第一次代理單獨啟動,第二次代理預(yù)加載fastsocket方式。

    運行方式 處理消耗時間(秒) 處理總數(shù) 平均每秒處理數(shù) 最大值
    第一次測試后端 44s 80189 1822 2150
    第一次測試代理 44s 80189 1822 2152
    第二次測試后端 42s 80051 1906 2188
    第二次測試代理 42s 80051 1906 2167

    備注:虛擬機上數(shù)據(jù),不代表真實服務(wù)器上數(shù)據(jù),僅供參考。

    雖然基于虛擬機,測試環(huán)境受限,但一樣可以看到基于fastsocket服務(wù)器模型,處理性能有所提升:總體處理時間,每秒平均處理數(shù),以及處理上限等。

    關(guān)于LD_PRELOAD注意事項

    動態(tài)鏈接預(yù)先加載LD_PRELOAD雖是利器,但不是萬能藥,LD_PRELOAD遇到下面情況會失效:

    • 靜態(tài)鏈接使用gcc -static參數(shù)把libc.so.6靜態(tài)鏈入執(zhí)行程序中
    • 設(shè)置執(zhí)行文件的SUID權(quán)限,可能也會導(dǎo)致LD_PRELOAD失效(如:chmod 4755 daemon)

    情況很復(fù)雜,小心為上。

    小結(jié)

    學(xué)習(xí)并測試了fastsocket的源碼示范部分,前后對比可以看到fastsocket帶來了處理性能的提升。

    posted on 2015-01-29 17:16 nieyong 閱讀(4432) 評論(1)  編輯  收藏 所屬分類: Socket

    評論

    # re: Fastsocket學(xué)習(xí)筆記之示范應(yīng)用篇 2015-01-29 21:38 京山游俠

    測試最能說明問題,看來性能提升不錯。  回復(fù)  更多評論   

    公告

    所有文章皆為原創(chuàng),若轉(zhuǎn)載請標(biāo)明出處,謝謝~

    新浪微博,歡迎關(guān)注:

    導(dǎo)航

    <2015年1月>
    28293031123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統(tǒng)計

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 永久免费视频v片www| 午夜亚洲WWW湿好爽| 大地资源二在线观看免费高清| 日韩亚洲人成在线综合日本 | 亚洲人成色4444在线观看| 亚洲国产一区明星换脸| 免费视频成人片在线观看| 亚洲第一街区偷拍街拍| 日本亚洲成高清一区二区三区| 国内外成人免费视频| 中文无码成人免费视频在线观看 | 亚洲av无码电影网| 亚洲婷婷国产精品电影人久久| 精品无码国产污污污免费网站| 亚洲欧洲免费视频| 国产免费av片在线无码免费看| 91在线老王精品免费播放| 无码 免费 国产在线观看91| 亚洲依依成人精品| 亚洲色av性色在线观无码| 久草在视频免费福利| 丁香花在线观看免费观看图片| 久久精品国产亚洲av麻| 成人在线免费看片| 精品久久久久久国产免费了| 亚洲欧美成人一区二区三区| 精品亚洲aⅴ在线观看| 久久青青草原亚洲av无码| 小日子的在线观看免费| 免费精品久久久久久中文字幕| 亚洲日产无码中文字幕| 日本h在线精品免费观看| 理论亚洲区美一区二区三区| 中文字幕亚洲色图| 国产∨亚洲V天堂无码久久久| 免费一级毛片免费播放| 青青草国产免费久久久91| a拍拍男女免费看全片| 久久精品国产这里是免费| WWW免费视频在线观看播放| 四虎一区二区成人免费影院网址|