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

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

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

    聶永的博客

    記錄工作/學習的點點滴滴。

    Fastsocket學習筆記之示范應用篇

    前言

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

    嗯,下面進入翻譯篇。

    介紹

    示范為一個簡單TCP Server服務器程序,用于基準測試和剖析Liunx內核網絡堆棧性能表現,當然也是為了演示Fastsocket可擴展和其性能改進。

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

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

    • 服務器模式:任何請求都會直接返回HTTP 200 OK
    • 代理模式:服務器接收到客戶端請求,轉發給后端服務器,同時轉發后端響應給客戶端。

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

    構建

    以下面方式進行構建:

    cd demo && make

    用法

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

    ./server

    參數如下:

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

    實例

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

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

    服務器模式示范

    服務器模式至少需要兩臺主機:

    • 主機A作為客戶端產生HTTP請求
    • 主機B為Web服務器

    設定每臺主機CPU 12核,網絡大概設置如下:

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

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

    主機B

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

      ./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程序不能夠體現服務器負載能力,多個ab實例同時并發運行可能會好很多,開12個實例和CPU核心數一致: 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作為客戶端產生HTTP請求
    • 主機B作為代理角色
    • 主機C則需要后端服務器

    設定每臺機器CPU內核數12,網絡結構如下:

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

    下面為具體的運行步驟:

    主機B

    • 為代理服務器啟動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服務器都可以充當后端服務器,這里充分利用示范程序好了:
      ./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

    動手實踐

    以上翻譯完畢,下面將是根據上面內容進行動手測試描述吧。

    安裝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專業版跑VMware Workstation 10.04虛擬機,兩個Centos 6.5系統,配置一致,2G內存,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

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

    服務器模式對比

    兩組數據對比:

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

    代理模式數據

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

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

    備注:虛擬機上數據,不代表真實服務器上數據,僅供參考。

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

    關于LD_PRELOAD注意事項

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

    • 靜態鏈接使用gcc -static參數把libc.so.6靜態鏈入執行程序中
    • 設置執行文件的SUID權限,可能也會導致LD_PRELOAD失效(如:chmod 4755 daemon)

    情況很復雜,小心為上。

    小結

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

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

    評論

    # re: Fastsocket學習筆記之示范應用篇 2015-01-29 21:38 京山游俠

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

    公告

    所有文章皆為原創,若轉載請標明出處,謝謝~

    新浪微博,歡迎關注:

    導航

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

    統計

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲最大中文字幕| 中文在线观看永久免费| 亚洲av永久无码天堂网| 亚洲免费网站观看视频| 国产精品亚洲а∨天堂2021| 人妻免费久久久久久久了| 四虎成人免费网址在线| 国产成人 亚洲欧洲| 伊在人亚洲香蕉精品区麻豆| 一区二区三区免费视频播放器| 2022年亚洲午夜一区二区福利 | a成人毛片免费观看| 亚洲色偷拍另类无码专区| 精品一区二区三区无码免费直播 | 久久这里只精品99re免费| a高清免费毛片久久| 亚洲一区二区三区偷拍女厕| 免费看国产成年无码AV片| 皇色在线免费视频| 亚洲无码一区二区三区| 亚洲人成网站色在线观看| 免费在线精品视频| 日本免费网站在线观看| 日韩电影免费观看| 成视频年人黄网站免费视频| 免费福利在线视频| 久久亚洲中文字幕无码| youjizz亚洲| 久久久久久亚洲精品中文字幕| 免费国产在线观看不卡| av无码国产在线看免费网站 | 美女被羞羞网站免费下载| 亚洲精品无码少妇30P| 久久精品蜜芽亚洲国产AV | 亚洲伊人久久大香线蕉| 亚洲人成人网站18禁| 成人浮力影院免费看| 丝袜足液精子免费视频| 亚洲国产综合在线| 亚洲精品一级无码中文字幕| 久久精品一本到99热免费|