色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>DSP編程>

C10K到C10M高性能網絡的實踐分析

大小:0.6 MB 人氣:0 2017-10-12 需要積分:1
 C10K時代的問題與優化手段
  首先帶大家回顧一下當年C10K場景中遇到的問題以及為了解決我們單機下高并發的承載能力所做的改進。在當時的年代,國內互聯網的普及程度相對較低,C10K并沒有給當時中國的互聯網環境帶來太大沖擊,但是在全球互聯網環境下大家開始意識到這個問題。為了解決該問題,首先的研究方向就是IO模型的優化,逐漸解決了C10K的問題。
  epoll、kqueue、iocp就是IO模型優化的一些最佳實踐,這幾種技術實現分別對應于不同的系統平臺。以epoll為例,在它的基礎上抽象了一些開發框架和庫,為廣大軟件開發者在軟件開發帶來了便利,比如libevent、libev等。隨著當年在IO模型上的革命,衍生出了很多至今為止我們都在大量使用的優秀開源軟件,比如nginx、haproxy、squid等,通過大量的創新、實踐和優化,使我們在今天能夠很輕易地解決一個大并發壓力場景下的技術問題。
  這里簡單列了幾點,較為常用的優化技術手段。
  CPU親和性&內存局域性
  目前我們使用的服務器主要是多路、多核心的x86平臺。用于運行我們的軟件代碼,在很多場景的業務需求下,都會涉及一定并發任務,無論是多進程模型還是多線程模型,都要把所有的調度任務交給操作系統,讓操作系統幫我們分配硬件資源。我們常用的服務器操作系統都屬于分時操作系統,調度模型都盡可能的追求公平,并沒有為某一類任務做特別的優化,如果當前系統僅僅運行某一特定任務的時候,默認的調度策略可能會導致一定程度上的性能損失。我運行一個A任務,第一個調度周期在0號核心上運行,第二個調度周期可能就跑到1號核心上去了,這樣頻繁的調度可能會造成大量的上下文切換,從而影響到一定的性能。
  數據局域性是同樣類似的問題。當前x86服務器以NUMA架構為主,這種平臺架構下,每個CPU有屬于自己的內存,如果當前CPU需要的數據需要到另外一顆CPU管理的內存獲取,必然增加一些延時。所以我們盡可能的嘗試讓我們的任務和數據在始終在相同的CPU核心和相同的內存節點上,Linux提供了sched_set_affinity函數,我們可以在代碼中,將我們的任務綁定在指定的CPU核心上。一些Linux發行版也在用戶態中提供了numactl和taskset工具,通過它們也很容易讓我們的程序運行在指定的節點上。
  RSS、RPS、RFS、XPS
  這些技術都是近些年來為了優化Linux網絡方面的性能而添加的特性,RPS、RFS、XPS都是Google貢獻給社區,RSS需要硬件的支持,目前主流的網卡都已支持,即俗稱的多隊列網卡,充分利用多個CPU核心,讓數據處理的壓力分布到多個CPU核心上去。RPS和RFS在linux2.6.35的版本被加入,一般是成對使用的,在不支持RSS特性的網卡上,用軟件來模擬類似的功能,并且將相同的數據流綁定到指定的核心上,盡可能提升網絡方面處理的性能。XPS特性在linux2.6.38的版本中被加入,主要針對多隊列網卡在發送數據時的優化,當你發送數據包時,可以根據CPU MAP來選擇對應的網卡隊列,低于指定的kernel版本可能無法使用相關的特性,但是發行版已經backport這些特性。
  IRQ 優化
  關于IRQ的優化,這里主要有兩點,第一點是關于中斷合并。在比較早期的時候,網卡每收到一個數據包就會觸發一個中斷,如果小包的數據量特別大的時候,中斷被觸發的數量也變的十分可怕。大部分的計算資源都被用于處理中斷,導致性能下降。后來引入了NAPI和Newernewer NAPI特性,在系統較為繁忙的時候,一次中斷觸發后,接下來用輪循的方式讀取后續的數據包,以降低中斷產生的數量,進而也提升了處理的效率。第二點是IRQ親和性,和我們前面提到了CPU親和性較為類似,是將不同的網卡隊列中斷處理綁定到指定的CPU核心上去,適用于擁有RSS特性的網卡。
  這里再說說關于網絡卸載的優化,目前主要有TSO、GSO、LRO、GRO這幾個特性,先說說TSO,以太網MTU一般為1500,減掉TCP/IP的包頭,TCP的MaxSegment Size為1460,通常情況下協議棧會對超過1460的TCP Payload進行分段,保證最后生成的IP包不超過MTU的大小,對于支持TSO/GSO的網卡來說,協議棧就不再需要這樣了,可以將更大的TCPPayload發送給網卡驅動,然后由網卡進行封包操作。通過這個手段,將需要在CPU上的計算offload到網卡上,進一步提升整體的性能。GSO為TSO的升級版,不在局限于TCP協議。LRO和TSO的工作路徑正好相反,在頻繁收到小包時,每次一個小包都要向協議棧傳遞,對多個TCPPayload包進行合并,然后再傳遞給協議棧,以此來提升協議棧處理的效率。GRO為LRO的升級版本,解決了LRO存在的一些問題。這些特性都是在一定的場景下才可以發揮其性能效率,在不明確自己的需求的時候,開啟這些特性反而可能造成性能下降。
  Kernel 優化
  關于Kernel的網絡相關優化我們就不過多的介紹了,主要的內核網絡參數的調整在以下兩處:net.ipv4.參數和net.core.參數。主要用于調節一些超時控制及緩存等,通過搜索引擎我們能很容易找到關于這些參數調優的文章,但是修改這些參數是否能帶來性能的提升,或者會有什么弊端,建議詳細的閱讀kernel文檔,并且多做一些測試來驗證。
  更深入的探索和實踐
  接下來,我們著重了解如何去更進一步提升我們單機網絡吞吐以及網絡處理性能的技術和手段。
  計算機硬件做為當前IT發展的重要組成部分。作為軟件開發者,我們更應該掌握這部分的內容,學習了解我們的軟件如何在操作系統中運行,操作系統又怎樣分配我們的硬件資源。
  硬件
  CPU
  CPU是計算機系統中最核心、最關鍵的部件。在當前的x86服務器領域我們接觸到主要還是Intel芯片。索性我們就以IntelXeon 2600系列舉例。
  Intel Xeon 2600系列的CPU已經發布了3代,第4代產品2016年Q1也即將面市,圖例中均選取了4代產品最高端的型號。圖一為該系列CPU的核心數量統計,從第一代的8核心發展到即將上市的22核心,若干年前,這是很可怕的事情。裝配該型號CPU的雙路服務器,再開啟超線程,輕而易舉達到80多個核心。就多核處理器的發展歷程來講,核心數量逐年提升,主頻基本穩定在一定的范圍內,不是說單核主頻不再重要,而是說在當前的需求場景下,多核心才是更符合我們需求的處理器。
  C10K到C10M高性能網絡的實踐分析
  圖1
  不僅僅是核心數量,像LLC緩存的容量、內存帶寬都有很大的提升,分別達到了55MB和76.8GB/s。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      ?
      主站蜘蛛池模板: 国产久久热99视频 | 国产呦精品一区二区三区下载 | 国产成人精品在视频 | 国产又爽又黄又不遮挡视频 | 啪啪后入内射日韩 | 在线免费观看国产精品 | 国产午夜精品久久久久婷婷 | 亚洲成人在线免费 | 91麻豆国产精品91久久久 | 久久国产加勒比精品无码 | 欧美精品AV一区二区无码 | 欧美精品一区二区在线电影 | 嫩草影院在线观看网站成人 | 欧美人妇无码精品久久 | 国产精品一库二库三库 | 亚洲人成在线观看一区二区 | 拔萝卜视频免费看高清 | 网址在线观看你懂我意思吧免费的 | 亚洲99精品A片久久久久久 | 国产午夜视频在永久在线观看 | 久久综合中文字幕佐佐木希 | 欧美亚洲国产手机在线有码 | 女人张开腿让男人添 | 领导边摸边吃奶边做爽在线观看 | 久久亚洲AV无码精品午色夜麻豆 | 国产成人ae在线观看网站站 | 一个人免费视频在线观看高清频道 | 99久久精品国产一区二区三区 | 免费女性裸身照无遮挡网站 | 亚洲日韩国产精品乱-久 | 欧美一区二区三区不卡免费 | 亚洲国产精品无码中文字幕 | 中国老太性色xxxxxhd | 国产日韩久久久精品影院首页 | 国产一级做a爰片久久毛片男 | 国产精自产拍久久久久久蜜 | xxx性欧美在线 | 99热在线观看 | 麻豆一二三四区乱码 | 我的年轻漂亮继坶三级 | 饥渴的40岁熟妇完整版在线 |