了解最新公司動態及行業資訊
1 服務器簡介
服務器是提供計算服務的設備。高性能Linux服務器運維。由于服務器需要響應用戶請求,因此在處理能力、穩定性、安全性、可擴展性、可管理性等方面提出了更高的要求。隨著虛擬化技術的進步,云服務器(ECS)在國內迅速普及服務器運維技術,其管理方式比物理服務器更簡單、更高效。用戶可以快速創建或發布任意數量的云服務器,幫助企業降低開發、運維難度和整體IT成本,讓整個研發周期專注于核心業務創新。在網絡環境中,根據服務器提供的服務類型不同,分為文件服務器、
本次學習總結的主要內容是高性能linux服務器的運維:
如何處理多個客戶端連接。探索面對數百萬客戶端連接的性能優化。服務器處理并發數據的效率。深入分析大數據通信時的 Linux 內核瓶頸。如何克服瓶頸 2 I/O 多路復用技術
2.1 循環模式
當服務器有多個網絡連接需要處理時,它會循環打開網絡連接列表以確定是否有數據要讀取。缺點:
慢(必須遍歷所有網絡連接)低效(可能在處理一個連接時阻塞,阻止檢查和處理其他網絡連接)示例:{int; ;};// std::deque ;// queue 1std::deque;// queue 2 void ::(std::deque *){char data[1024] = {0};int len ??= 0;for(int i = 0; i size( ); ++i){//當沒有數據要讀取時,發生阻塞 len = read(->at(i)., data, data); //處理數據 bzero(data, data);//清空緩存 }}
2.2 種方式
首先,將第二、三、四參數所指向的點復制到內核,輪詢每個SET描述符,并記錄在臨時結果(fdset)中。如果發生事件,臨時結果將被寫入用戶空間并返回。
缺點:
返回后,需要一一檢查描述符是否為SET(事件是否發生)。(支持的
文件描述符數量太少,默認為1024)。
例子:
無效 ::(std::deque *){char 數據[1024] = {0}; input;// fdset 記錄輪詢結果 int len = 0; 整數 = 0; (&input);// 清除記錄 for(int i = 0; i size(); ++i){(->at(i)., &input); = (->at(i). + 1, &input, NULL, NULL, NULL);//檢測事件是否發生 if(> 0 && (->at(i)., &input)){//讀取數據len = read(->at(i)., data, data);//處理數據 bzero(data, data);}//處理其他事情}}
2.3 輪詢方式
與 poll 不同的是,需要注意的事件通過數組傳遞給內核,因此描述符的數量沒有限制。和 中的字段用于表示感興趣的事件和發生的事件,因此數組只需要初始化一次。poll的實現機制類似。它對應于內核,只是 poll 將一個數組傳遞給內核,然后輪詢 poll 中的每個描述符。與處理 fdset 相比,poll 效率更高。
缺點:
poll 需要檢查其中每個元素的值,以了解是否發生了事件。
例子:
std:: ;void ::(std::deque *){int = 0;int len ???= 0;char data[1024] = {0};//初始化容器 for(int i = 0; i size (); ++i){ pfd;pfd.fd = ->at(i).;//設置。= ;//設置事件 pfd. = 0;//設置無事件返回,設置為零。(pfd); }while(1){ = poll(&*.begin(), .size(), -1);//負數表示無限等待,直到有事件發生并返回for(::it = .begin(); it != .end() && > 0; ++it){ // 遍歷查看fd產生的事件 if (it-> & ){len = read(it->fd, buf , data); //處理數據 bzero(data, data);}}//處理其他東西}}
相關視頻推薦
linux下epoll的秘密——支撐億級IO的底層基石
90分鐘了解Linux內存架構,numa的優勢,slab的實現,原理
為什么dpdk越來越火,看完讓人豁然開朗
學習地址:C/C++ Linux服務器開發/后端架構師【零語音教育】-學習視頻教程-騰訊課堂
C/C++ Linux服務器架構師需要學習資料和獲取(資料包括C/C++、Linux、技術、Nginx、MySQL、Redis、ZK、流媒體、CDN、P2P、K8S、TCP/IP、協程、DPDK等.),免費分享
2.4 epoll方法
與 epoll 和 poll 不同的是,它不需要每次調用時都將事件描述信息復制到內核中。第一次調用后,事件信息會與對應的 epoll 描述符相關聯。其次,epoll不是通過輪詢,而是在等待描述符上注冊一個回調函數。當事件發生時,回調函數負責將發生的事件存儲到就緒事件列表中,最后寫入用戶空間。
epoll返回后,這個參數指向的緩沖區就是發生的事件,緩沖區中的每個元素都可以被處理,不需要像poll一樣輪詢和檢查。
例子:
void ::(std::deque *){int ;//事件個數 int i = 0;int len ??= 0;char data[1024] = {0};int = (1024); //(i = 0; i size(); ++i){ ev;ev. = | ;//設置觸發事件的類型 ev.data.fd = ->at(i).;//到epoll add( ( , , ->at(i)., &ev )
多線程技術還可以處理高并發客戶端連接,因為可以在服務器中創建大量線程來監視連接。缺點:多線程技術不適合處理長連接,因為在linux中建立線程會消耗棧空間,并且在產生大量連接時會耗盡系統內存。例子:
{int; pid;bool ;};std::deque ;//客戶端隊列 void ::(){int i = 0;//創建多線程連接 for(i = 0; i , data, data); //處理數據 bzero(data, data);//清空緩存}(NULL);}
多線程+I/O多路復用技術,用一個線程監控一個端口和描述符是否有讀寫事件,然后將事件分發給其他工作線程處理數據。模型架構:
該架構主要基于單線程I/O復用(/poll/epoll),實現了高并發,避免了多線程I/O來回切換的各種開銷。線程進一步提高業務處理能力,避免產生過多線程。
4 CPU多核并行計算
程序的線程是指可以同時并發執行的邏輯單元數,通過時間片分配算法實現;
CPU的線程是指使CPU的指令執行過程(取指、解釋、執行、內存訪問、寫入數據)流水線化以提高并發性的方法。
并行計算和多線程的區別:
并行計算的 CPU 利用率比多線程高,因此相對來說效率更高。并行計算是使用多個 CPU 內核進行計算,而多線程是使用一個 CPU 內核在不同的時間段進行計算。并行計算是在多核 CPU 上運行多個線程,多線程是在單核 CPU 上運行多個線程。
綜上所述,可以得出結論,多線程并不能真正提升數據處理能力,受限于單核CPU的性能。當服務器需要執行大量數據操作(如圖形處理、復雜算法)時,可以考慮多核并行計算。
5 深入分析內核性能
5.1 中斷處理
當大量數據包到達網絡時,會產生頻繁的硬件中斷請求。這些硬件中斷可以中斷較低優先級的軟中斷或系統調用的執行。高性能開銷。
5.2 內存拷貝
一般情況下,一個網絡數據包從網卡到應用程序需要經過以下過程:數據從網卡通過DMA(直接內存訪問)等方式傳輸到內核打開的緩沖區,以及然后從內核空間復制到用戶空間。在 Linux 內核協議棧中,這個耗時的操作甚至占到整個數據包處理流程的 57.1%。
5.3 上下文切換
頻繁到達的硬件中斷和軟中斷隨時可能搶占系統調用的執行,會產生大量的上下文切換開銷。此外,在基于多線程的服務器設計框架中,線程間的調度也會產生頻繁的上下文切換開銷。同樣,鎖競爭的能耗也是一個很嚴重的問題。
5.4 本地故障
現在的主流處理器都是多核的,也就是說一個數據包的處理可能會跨越多個CPU核。例如服務器運維技術,一個數據包可能在cpu0上被中斷,在cpu1上以內核態處理,在cpu2上以用戶態處理。多核很容易導致CPU緩存失效和本地失效。
5.5 內存管理
傳統的服務器內存頁是 4K。為了提高內存訪問速度,避免緩存未命中,可以增加緩存中映射表的條目,但這會影響CPU的檢索效率。結合以上問題,可以看出內核本身就是一個非常大的瓶頸,解決辦法就是想辦法繞過內核。
6 高性能網絡框架DPDK
DPDK 提供庫函數和驅動程序支持,以在 Intel 處理器架構下的用戶空間中進行高效的數據包處理。它不同于為通用目的而設計的Linux系統,而是專注于對網絡應用程序中的數據包進行高性能處理。
DPDK官網:
DPDK架構圖:
Linux內核網絡數據流:
硬件中斷--->獲取包分發給內核線程--->軟件中斷--->內核線程處理協議棧中的包--->通知用戶層和用戶層接收封裝-->網絡層--->邏輯層-->業務層
DPDK網絡數據流:
硬件中斷--->放棄中斷過程,用戶層通過設備映射取包--->進入用戶層協議棧--->邏輯層--->業務層
一起來看看dpdk取得了哪些突破?
在UIO(用戶空間I/O技術)的支持下,dpdk可以繞過內核協議棧,這本質上要歸功于UIO技術。UIO可以攔截中斷并重置中斷回調行為,從而繞過后續的內核協議棧。工藝流程。
本站為粉絲站,提供全網最新優惠碼和最全優惠券。本站優惠碼只能在中文站使用,香港主機、藝術主機、美國VPS均可使用。
不同時間段,官方會給渠道不同的優惠,優惠30%~70%,祝你好運!!
如果您有任何問題,請加入我們的粉絲群。
馬上去中文官網選擇合適的虛擬主機,活動期間還贈送1個國際域名!!