高頻交易下證券公司交易系統(tǒng)的性能優(yōu)化_第1頁(yè)
高頻交易下證券公司交易系統(tǒng)的性能優(yōu)化_第2頁(yè)
高頻交易下證券公司交易系統(tǒng)的性能優(yōu)化_第3頁(yè)
高頻交易下證券公司交易系統(tǒng)的性能優(yōu)化_第4頁(yè)
高頻交易下證券公司交易系統(tǒng)的性能優(yōu)化_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第一章概述交易系統(tǒng)性能優(yōu)化是當(dāng)前國(guó)內(nèi)金融市場(chǎng)中一個(gè)備受關(guān)注的話題。近年來(lái),隨著T+0交易品種陸續(xù)上市,以及北交所、廣期所的成立掛牌,金融交易市場(chǎng)機(jī)會(huì)不斷涌現(xiàn)。在這個(gè)競(jìng)爭(zhēng)激烈的環(huán)境下,如何在最短的時(shí)間內(nèi)獲取到最新的股票、期權(quán)、期貨及相關(guān)的行情信息,并且能夠以最快的速度向交易所提交訂單請(qǐng)求,是市場(chǎng)競(jìng)爭(zhēng)的重要方向。對(duì)于一次委托來(lái)說(shuō),訂單全鏈路耗時(shí)即投資者的交易訂單從訂單形成系統(tǒng)發(fā)至經(jīng)紀(jì)公司訂單處理系統(tǒng)經(jīng)過(guò)其處理確認(rèn)后發(fā)往交易所及交易所確認(rèn)報(bào)單后按原路徑返回至訂單形成系統(tǒng)的往返整體鏈路的耗時(shí)。而對(duì)于高頻交易來(lái)說(shuō),投資者除了要求訂單全鏈路耗時(shí)不斷提速外,同時(shí)也會(huì)對(duì)分筆行情的獲取有極高的要求,因此整個(gè)高頻交易體系內(nèi)的調(diào)優(yōu)主要涵蓋網(wǎng)絡(luò)鏈路、訂單形成系統(tǒng)、訂單處理系統(tǒng)、交易所報(bào)盤網(wǎng)關(guān)、交易所內(nèi)部系統(tǒng)、行情(接收)、分析行情(策略部分)等各環(huán)節(jié)。分析各環(huán)節(jié)的耗時(shí)占比及調(diào)優(yōu)性價(jià)比權(quán)衡得出最適合當(dāng)下的方案。各家應(yīng)用場(chǎng)景各有不同,本文針對(duì)基礎(chǔ)軟硬件和網(wǎng)絡(luò)簡(jiǎn)單介紹下通用方案供各位參考:第一,找尋影響因子,應(yīng)當(dāng)建立穩(wěn)定、高速的全鏈路數(shù)據(jù)度量通道,保證實(shí)時(shí)、準(zhǔn)確地獲取網(wǎng)絡(luò)快慢、系統(tǒng)優(yōu)劣的度量數(shù)據(jù)。全鏈路度量是對(duì)高頻交易系統(tǒng)整個(gè)交易流程進(jìn)行全方位的度量和評(píng)估。通過(guò)全鏈路度量,可以精確地評(píng)估每個(gè)環(huán)節(jié)的效率和時(shí)延,找出影響系統(tǒng)性能的瓶頸,并針對(duì)性地進(jìn)行優(yōu)化和改進(jìn)。第二,單元優(yōu)選更換,使用高性能的硬件設(shè)備,能夠在底層搭好框架,保證提供高算力,完成訂單匹配,減少交易時(shí)延,提高交易執(zhí)行的效率和成功率。最終,系統(tǒng)調(diào)優(yōu)觀察,對(duì)于已獲得的行情和交易數(shù)據(jù),在高性能硬件上通過(guò)系統(tǒng)和軟件優(yōu)化,使高頻交易系統(tǒng)達(dá)到極限性能,是目前證券公司的整體發(fā)力方向。在未來(lái),也將成為證券期貨公司提升核心競(jìng)爭(zhēng)力、追求長(zhǎng)期穩(wěn)定盈利的重要手段之一。第二章常見(jiàn)問(wèn)題整體性能優(yōu)化包含但不限于下述步驟:1)影響因子評(píng)估;2)瓶頸觀測(cè)及分析;3)單元調(diào)優(yōu);4)系統(tǒng)級(jí)優(yōu)化;5)持續(xù)監(jiān)控及改進(jìn)。通常存在以下常見(jiàn)問(wèn)題:找尋影響因子問(wèn)題定位難:交易環(huán)境復(fù)雜,交易鏈條長(zhǎng),無(wú)法精準(zhǔn)定位系統(tǒng)性能問(wèn)題;度量精度要求高:極速行情、交易軟硬件頻繁更新優(yōu)化,常規(guī)測(cè)試方法無(wú)法達(dá)到精度要求,對(duì)比測(cè)試大費(fèi)周章;偶發(fā)問(wèn)題難覺(jué)察:日常測(cè)試無(wú)法發(fā)現(xiàn)交易系統(tǒng)偶發(fā)問(wèn)題(抖動(dòng)、異常響應(yīng)速度)。單元優(yōu)選更換高性能服務(wù)器選擇:高頻交易系統(tǒng)需要處理大量的市場(chǎng)行情數(shù)據(jù)、歷史數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù),并進(jìn)行復(fù)雜的計(jì)算和分析。如何選擇合適的高性能CPU和內(nèi)存的服務(wù)器是至關(guān)重要的。高頻率的多核處理器和大容量的內(nèi)存可以快速處理數(shù)據(jù),加速算法模型的計(jì)算和決策生成。低延時(shí)網(wǎng)卡選擇:高頻交易系統(tǒng)需要及時(shí)獲取和傳輸行情數(shù)據(jù),而且通常需要與多個(gè)交易所和數(shù)據(jù)源連接。因此,選擇具有高帶寬和低延遲的網(wǎng)卡是必要的。高穩(wěn)定低延時(shí)交換機(jī)選擇:高頻交易系統(tǒng)通常需要持續(xù)運(yùn)行,并承受大規(guī)模的數(shù)據(jù)處理和交易流量。因此,選擇具有高可靠性和低延時(shí)的交換機(jī)可以提高系統(tǒng)的穩(wěn)定性和可靠性。系統(tǒng)調(diào)優(yōu)觀察調(diào)優(yōu)方案定奪:除了硬件層面優(yōu)化,系統(tǒng)層面的優(yōu)化包括且不限制于進(jìn)程調(diào)用、函數(shù)處理等,在開(kāi)銷及時(shí)延消耗比較大的函數(shù)棧中,通過(guò)進(jìn)行定制化工具開(kāi)發(fā),實(shí)施埋點(diǎn)等操作,從而進(jìn)行代碼級(jí)性能瓶頸分析,并助力給出針對(duì)性的調(diào)優(yōu)方案持續(xù)觀察分析:在調(diào)優(yōu)手段覆蓋之后,基于目前券商大多數(shù)系統(tǒng)環(huán)境,即使在某一次調(diào)優(yōu)后達(dá)到了不錯(cuò)的數(shù)據(jù),但是由于負(fù)載均衡、內(nèi)核污染等等不可避的問(wèn)題存在,單次調(diào)優(yōu)無(wú)法達(dá)到應(yīng)有效果,所以持續(xù)分析是不可缺少的一環(huán)。第三章優(yōu)化思路找尋影響因子——度量極速高頻交易環(huán)境中,需要采用最快的網(wǎng)絡(luò)設(shè)備進(jìn)行組網(wǎng),并且要對(duì)全鏈路節(jié)點(diǎn)的處理時(shí)延、流量、抖動(dòng)等性能指標(biāo)進(jìn)行高精準(zhǔn)統(tǒng)計(jì)與展示,幫助運(yùn)維人員對(duì)應(yīng)用系統(tǒng)性能異常和故障做出精準(zhǔn)快速定位。行情鏈路包括:行情網(wǎng)關(guān),行情解碼,行情轉(zhuǎn)發(fā),客戶端,網(wǎng)絡(luò)設(shè)備等;交易鏈路包括:客戶策略,交易系統(tǒng),報(bào)盤網(wǎng)關(guān),網(wǎng)絡(luò)設(shè)備、防火墻等?,F(xiàn)有業(yè)務(wù)分析及監(jiān)控平臺(tái)主要采用系統(tǒng)內(nèi)置分析模塊,但只能分析單節(jié)點(diǎn)性能,不能分析全鏈路端到端性能;且軟件操作系統(tǒng)打點(diǎn),時(shí)間精度抖動(dòng)較大,準(zhǔn)確性不足。上圖為一種全鏈路的高精度度量方案,此方案通過(guò)將網(wǎng)絡(luò)流量旁路導(dǎo)出至高精準(zhǔn)時(shí)間戳設(shè)備,在數(shù)據(jù)包尾部添加上可識(shí)別的時(shí)間戳標(biāo)識(shí),并實(shí)時(shí)進(jìn)行流量解析計(jì)算,計(jì)算精度為皮秒級(jí)別,可以支持全鏈路時(shí)延精準(zhǔn)度量。單元優(yōu)選更換——匹配交易鏈的不同參與者對(duì)于設(shè)備的要求會(huì)有所不同,從底層鏈路、網(wǎng)絡(luò)的選擇上,都需要選擇合適匹配的參與單元,而作為關(guān)鍵點(diǎn)的交易系統(tǒng)和宿主機(jī),在滿足高性能低延時(shí)的同時(shí),還需考慮載體、溫度、功耗等一一來(lái)進(jìn)行選型,并逐步建立測(cè)評(píng)選型基準(zhǔn)。交易系統(tǒng)不光需要追求極低的延時(shí),更重要的是保持整體穩(wěn)定,穩(wěn)定即可預(yù)期,可掌控,如果相對(duì)波動(dòng)較大,就無(wú)法預(yù)測(cè)報(bào)單策略的有效性。系統(tǒng)調(diào)優(yōu)觀察——定性機(jī)器從出廠之后,就會(huì)有相關(guān)參數(shù),而通過(guò)PCIE和速率、IO和負(fù)載、字節(jié)和網(wǎng)速等等,會(huì)計(jì)算出一個(gè)理想數(shù)值,但現(xiàn)實(shí)情況中往往達(dá)不到理想值。此時(shí)則需在整體系統(tǒng)中,對(duì)當(dāng)前CPU、IO、Memory等進(jìn)行密集性、內(nèi)存負(fù)載、IO基準(zhǔn)等測(cè)試,如性能監(jiān)控下,可采用PCP測(cè)試;系統(tǒng)追蹤中,運(yùn)用Pcef;針對(duì)于系統(tǒng)調(diào)用,用Toolkit進(jìn)行跟蹤等等。如此以來(lái),將將硬件、系統(tǒng)、應(yīng)用等進(jìn)行一連串調(diào)優(yōu),再根據(jù)每次調(diào)優(yōu)后的數(shù)據(jù)計(jì)算出基線和飽和率,審視工作流。在審視工作流完成基數(shù)標(biāo)定之后,OS層承上啟下,單點(diǎn)定性后往往在某次調(diào)優(yōu)后牽一發(fā)而動(dòng)全身。基于操作系統(tǒng)層面實(shí)現(xiàn)交易系統(tǒng)優(yōu)化往往非常有效,比修改應(yīng)用程序、改善硬件環(huán)境等問(wèn)題解決更徹底、整體TCO更優(yōu)。這個(gè)時(shí)候,針對(duì)于OS層面,往往需要確認(rèn)四件事情。1.命令集:在調(diào)優(yōu)OS層面時(shí),首先需要確認(rèn)使用的命令集。不同的硬件架構(gòu)和處理器可能支持不同的命令集,例如x86、x86-64、ARM等。了解命令集對(duì)于確定可用的優(yōu)化選項(xiàng)以及應(yīng)用程序的性能影響非常重要。2.BIOS設(shè)置:BIOS(基本輸入/輸出系統(tǒng))是在計(jì)算機(jī)啟動(dòng)過(guò)程中加載的固件,它負(fù)責(zé)初始化硬件并傳遞控制權(quán)給操作系統(tǒng)。在調(diào)優(yōu)OS層面時(shí),需要確認(rèn)BIOS設(shè)置是否合理。例如,檢查BIOS中的電源管理選項(xiàng)、內(nèi)存配置、硬件虛擬化支持等設(shè)置,以確保它們與應(yīng)用程序的性能需求相匹配。3.OS本身:操作系統(tǒng)本身也可能對(duì)系統(tǒng)性能產(chǎn)生影響。確保操作系統(tǒng)已經(jīng)進(jìn)行了必要的優(yōu)化和調(diào)整,例如啟用了適當(dāng)?shù)膬?nèi)核參數(shù)、關(guān)閉了不必要的服務(wù)、設(shè)置了正確的文件系統(tǒng)選項(xiàng)等。此外,還可以考慮更新操作系統(tǒng)補(bǔ)丁和驅(qū)動(dòng)程序,以修復(fù)可能存在的性能問(wèn)題。4.負(fù)載容量規(guī)劃:在調(diào)優(yōu)OS層面時(shí),需要對(duì)負(fù)載容量進(jìn)行規(guī)劃和評(píng)估。這包括確定系統(tǒng)的預(yù)期負(fù)載和性能需求,以便為其分配足夠的資源??梢钥紤]調(diào)整CPU調(diào)度策略、內(nèi)存管理設(shè)置、文件系統(tǒng)緩存大小等,以優(yōu)化系統(tǒng)的性能和響應(yīng)能力。而完成以上倆點(diǎn)后。金融行業(yè)的系統(tǒng)最佳不應(yīng)當(dāng)為系統(tǒng)在某一刻可以達(dá)到的峰值,而是針對(duì)于當(dāng)前應(yīng)用最匹配的一系列方案才可以稱為最佳。比如在證券客戶交易系統(tǒng)方面,縮短延時(shí)(加快響應(yīng)速度)比提高吞吐量(完成更多操作)更重要。而這二者往往互相制約。同時(shí)針對(duì)于不同系統(tǒng)不同應(yīng)用,也需要通過(guò)對(duì)業(yè)務(wù)的分析,進(jìn)行某一點(diǎn)的最佳調(diào)優(yōu),再由點(diǎn)及面,才可以達(dá)到系統(tǒng)的最佳調(diào)優(yōu)。第四章性能天梯高頻交易端到端鏈路從架構(gòu)上可分為應(yīng)用交付層、支撐環(huán)境層、操作系統(tǒng)層、硬件設(shè)備層和基礎(chǔ)設(shè)施層。應(yīng)用交付層主要是交易應(yīng)用程序和算法,支撐環(huán)境層包括了消息中間件、程序加速軟件等環(huán)境軟件,基礎(chǔ)設(shè)施層主要由機(jī)房基礎(chǔ)設(shè)施組成。端到端整體時(shí)延可以理解為證券公司從接收交易所行情入口到報(bào)盤至交易所間各個(gè)節(jié)點(diǎn)的延時(shí)之和,其中包括了行情系統(tǒng)、交易系統(tǒng)、網(wǎng)絡(luò)設(shè)備、服務(wù)器網(wǎng)卡、光纖傳輸?shù)鹊拳h(huán)節(jié),各環(huán)節(jié)目前的時(shí)延量級(jí)如下:毫秒(10-3秒)級(jí)別:運(yùn)營(yíng)商專線百微秒(10-6秒)級(jí)別:交易系統(tǒng)、行情系統(tǒng)、交易網(wǎng)關(guān)等微秒(10-6秒)級(jí)別:FPGA系統(tǒng)、服務(wù)器網(wǎng)卡百納秒(10-9秒)級(jí)別:低延時(shí)網(wǎng)絡(luò)設(shè)備納秒(10-9秒)級(jí)別:光纖、一層交換機(jī)早期“端到端低延時(shí)研究”主要集中在交易系統(tǒng)的改進(jìn)上,這是因?yàn)槎说蕉私灰琢鞒陶w延時(shí)的瓶頸集中在交易系統(tǒng)上。交易系統(tǒng)的每一次大的改進(jìn)和創(chuàng)新,都有可能為整體交易速度帶來(lái)幾倍甚至幾十倍的提升。在證券交易系統(tǒng)的延遲方面,2006-2008年間,性能很好的交易系統(tǒng)延遲都達(dá)到了100毫秒。2009-2011年間,較快交易系統(tǒng)的延遲達(dá)到了100微秒左右。目前,交易系統(tǒng)的延時(shí)已經(jīng)來(lái)到了微秒級(jí),行情系統(tǒng)的延時(shí)已經(jīng)來(lái)到了百納秒級(jí)別,底層的傳輸網(wǎng)絡(luò)、服務(wù)器網(wǎng)卡和光纖傳輸在端到端流程的整體延時(shí)占比不斷提高。第五章調(diào)優(yōu)技術(shù)在選用合適的硬件之后,僅僅完成了初始階段。怎么達(dá)到最佳性能,在目前的階段還是沒(méi)有盡頭的。而在低延遲領(lǐng)域,如高頻系統(tǒng)或?qū)崟r(shí)媒體系統(tǒng),大多要求服務(wù)器在10微秒以下提供一致的系統(tǒng)響應(yīng)。這就需要硬件、操作系統(tǒng)、應(yīng)用、網(wǎng)絡(luò)等領(lǐng)域進(jìn)行調(diào)優(yōu)以達(dá)到這一要求。本章節(jié)將主要針對(duì)硬件及操作系統(tǒng)層面的調(diào)優(yōu)技術(shù)做一些探索和分享。硬件配置要實(shí)現(xiàn)微秒級(jí)的低延遲,首先需要了解被測(cè)系統(tǒng)的硬件配置。影響時(shí)延的重要因素包括核心數(shù)、每個(gè)核心的執(zhí)行線程數(shù)、插槽數(shù)、NUMA節(jié)點(diǎn)數(shù)、CPU和內(nèi)存在NUMA拓?fù)渲械呐帕?,以及NUMA節(jié)點(diǎn)中的緩存拓?fù)?。Linux系統(tǒng)可以時(shí)延lscpu命令,對(duì)硬件拓?fù)淝闆r進(jìn)行查看。從上圖,我們知道這是一臺(tái)雙路CPU的服務(wù),總共安裝了兩顆CPU,Numa節(jié)點(diǎn)數(shù)為2等信息。請(qǐng)注意,如果應(yīng)用系統(tǒng)所需線程數(shù)較少,單路CPU的服務(wù)器也是不錯(cuò)選擇,它會(huì)減少一些槽位間通信的復(fù)雜性。為了獲得最佳的響應(yīng)時(shí)間,需要對(duì)系統(tǒng)拓?fù)溥M(jìn)行優(yōu)化,其中內(nèi)存需要均勻的在NUMA節(jié)點(diǎn)上進(jìn)行安裝,并盡量最大化使用本地內(nèi)存。關(guān)鍵應(yīng)用需要運(yùn)行在隔離CPU上,并且與Numa節(jié)點(diǎn)、PCIE網(wǎng)卡在系統(tǒng)拓?fù)渖媳3忠恢拢垣@得最優(yōu)的數(shù)據(jù)路徑。Numa和內(nèi)存以我們常用的雙路服務(wù)器為例,Numa架構(gòu)大致如下。我們可以通過(guò)numactl來(lái)查看numa節(jié)點(diǎn)信息CPU遠(yuǎn)程訪問(wèn)Numa節(jié)點(diǎn)時(shí),距離畢竟長(zhǎng),性能會(huì)受到極大影響,低時(shí)延應(yīng)用程序需要避免跨Numa的遠(yuǎn)程內(nèi)存訪問(wèn),從下面的命令,我也可以看出遠(yuǎn)程訪問(wèn)Numa的性能遠(yuǎn)低于本地訪問(wèn)。NUMA內(nèi)存平衡Linux支持基于自動(dòng)NUMA內(nèi)存平衡和手動(dòng)遷移內(nèi)存,但在NUMA節(jié)點(diǎn)之間遷移內(nèi)存頁(yè)面將導(dǎo)致內(nèi)存的TLB被清除和頁(yè)面故障,從而影響程序性能。可以使用以下命令禁用自動(dòng)NUMA內(nèi)存平衡:echo0>/proc/sys/kernel/numa_balancing還可以禁用用戶空間的numad服務(wù),關(guān)閉NUMA內(nèi)存平衡。綁定核心中斷是CPUCore收到的,可以讓關(guān)鍵線程綁定在某個(gè)Core上,然后避免各種中斷源(IRQ)向這個(gè)Core發(fā)送中斷。綁定程序在一個(gè)核上運(yùn)行,有兩種方法:taskset和sched_setaffinity,其中sched_setaffinity是程序代碼對(duì)綁核的實(shí)現(xiàn),我們主要介紹通過(guò)taskset進(jìn)行綁核。CPUAffinityCPU親和性,是指在SMP結(jié)構(gòu)下,能夠?qū)⒁粋€(gè)或多個(gè)進(jìn)程綁定到一個(gè)或多個(gè)處理器上運(yùn)行。查看進(jìn)程分配的CPUCore,可以使用taskset命令查看:taskset-c-p<pid>該CPU親和力列表表明該進(jìn)程可能會(huì)被安排在3-5中任意一個(gè)CPUCore上。更具體地查看某進(jìn)程當(dāng)前正運(yùn)行在哪個(gè)CPUCore上,我們可以使用top命令查看:top-p<uid>taskset使用taskset命令將進(jìn)程綁定到指定核,比如將31693綁定到1,2,3核上taskset-cp1,2,331693該例會(huì)將PID為31693的進(jìn)程綁定到1-3核上運(yùn)行。屏蔽硬中斷(硬盤、網(wǎng)卡)中斷源(IRQ)向CPUCore發(fā)送中斷,CPUCore調(diào)用中斷處理程序?qū)χ袛噙M(jìn)程處理。我們可以通過(guò)改寫/proc/irq/*/smp_affinity文件,避免中斷源(IRQ)向某些CPUCore發(fā)送中斷。該方法對(duì)硬盤、網(wǎng)卡等設(shè)備引起的硬中斷有效。查看設(shè)備中斷數(shù)據(jù)通過(guò)查看/proc/interrupts文件可查看設(shè)備中斷數(shù)據(jù):-第一列是IRQ號(hào)-第二列開(kāi)始表示某CPU內(nèi)核被多少次中斷。SMP_AFFINITYSMP,即symmetricmultiprocessing(對(duì)稱多處理器),通過(guò)多個(gè)處理器處理程序的方式。smp_affinity文件處理一個(gè)IRQ的中斷親和性。我們可用/proc/irq/{IRQ_NUMBER}/smp_affinity_list來(lái)制定所需要綁定的核,這里的IRQ_NUMBER就是前面中斷輸出中的IRQ號(hào),比如我們想將ens160的所有中斷綁定到CPU1和CPU2。echo1-2>/proc/irq/57/smp_affinity_listecho1-2>/proc/irq/58/smp_affinity_listecho1-2>/proc/irq/59/smp_affinity_listecho1-2>/proc/irq/60/smp_affinity_list內(nèi)核參數(shù)WatchdogWatchdog在進(jìn)行監(jiān)控的過(guò)程中會(huì)觸發(fā)中斷,會(huì)引起抖動(dòng),可通過(guò)以下命令進(jìn)行關(guān)閉:echo0>/proc/sys/kernel/watchdogSwappiness交換傾向性,描述操作系統(tǒng)在內(nèi)存不足時(shí)將數(shù)據(jù)移動(dòng)到交換分區(qū)的偏好程度,`swappiness`的值可以在0到100之間,為0表示不使用交換分區(qū),針對(duì)低時(shí)延系統(tǒng)建議設(shè)置為較低值,或直接關(guān)閉。echo10>/proc/sys/vm/swappinessdirty_ratioDirty_ratio是控制臟頁(yè)的比例,如果臟頁(yè)超過(guò)一定比例,所有的寫操作都會(huì)阻塞,知道一部分的臟頁(yè)被寫入磁盤。echo10>/proc/sys/vm/dirty_ratiodirty_background_ratioDirty_background_ratio是一個(gè)限制值,當(dāng)臟頁(yè)數(shù)超過(guò)該值時(shí),開(kāi)始將這些臟頁(yè)寫入磁盤。echo3>/proc/sys/vm/dirty_background_ratiosched_latency_ns指定在發(fā)生任務(wù)切換之前,任務(wù)可以在一個(gè)CPU核心上運(yùn)行的最長(zhǎng)時(shí)間(以納秒為單位)echo24000000>/proc/sys/kernel/sched_latency_nssched_min_granularity_ns指定了最小的時(shí)間粒度(以納秒為單位)不會(huì)被搶占的時(shí)間,在這個(gè)時(shí)間粒度內(nèi),一個(gè)任務(wù)可以在一個(gè)CPU核心上運(yùn)行。echo10000000>/proc/sys/kernel/sched_min_granularity_nssched_rt_runtime_us用于控制系統(tǒng)中實(shí)時(shí)任務(wù)的運(yùn)行時(shí)間片(以微秒為單位),默認(rèn)值為950000,總共為1000000。設(shè)置為-1則禁止這個(gè)限制。echo-1>/proc/sys/kernel/sched_rt_runtime_usstat_interval以秒為單位的更新虛擬內(nèi)存統(tǒng)計(jì)信息的間隔。默認(rèn)值是1秒,這導(dǎo)致每秒進(jìn)行信息統(tǒng)計(jì)。將其更改為1000秒可以避免這些中斷,至少延遲了16分鐘。調(diào)頻策略scaling_governor調(diào)配策略的作用是控制CPU如何管理和調(diào)整其運(yùn)行頻率以平衡性能和能耗,同以下命令,選擇“performance”使CPU保持在最高頻率,以提供最大的計(jì)算性能。echoperformance>/sys/devices/system/cpu/cpu57/cpufreq/scaling_governor操作系統(tǒng)配置操作系統(tǒng)側(cè)調(diào)優(yōu)類別包括但不限于:1)硬件資源調(diào)優(yōu);2)微架構(gòu)數(shù)據(jù)采樣MDS;3)SMT/HT/中斷;4)內(nèi)核;5)文件系統(tǒng);6)存儲(chǔ);7)CPU;8)MEM;9)網(wǎng)絡(luò)等。其中網(wǎng)絡(luò)部分主要涉及:1)網(wǎng)卡驅(qū)動(dòng)層面的優(yōu)化,包括多隊(duì)列,中斷聚合,ringbuffer等各種配置參數(shù);2)內(nèi)核協(xié)議棧優(yōu)化,Kernelbacklog隊(duì)列優(yōu)化,相關(guān)內(nèi)核參數(shù)對(duì)應(yīng)用性能的優(yōu)化;3)網(wǎng)絡(luò)相關(guān)的系統(tǒng)服務(wù)優(yōu)化;IRQBalance優(yōu)化;網(wǎng)絡(luò)延遲優(yōu)化;大量連續(xù)數(shù)據(jù)流的吞吐量?jī)?yōu)化;高吞吐量調(diào)整TCP連接優(yōu)化等等;4)網(wǎng)絡(luò)應(yīng)用優(yōu)化;5)網(wǎng)絡(luò)連接優(yōu)化性能驗(yàn)證等;最重要的是,操作系統(tǒng)可以與應(yīng)用一起做性能聯(lián)調(diào)。通過(guò)工具做持續(xù)性能監(jiān)控、分析及優(yōu)化。例如RHEL中有大量性能監(jiān)控工具。sysstat軟件包實(shí)用程序從內(nèi)核計(jì)數(shù)器獲取原始數(shù)據(jù),并提供有關(guān)CPU使用率、磁盤I/O、進(jìn)程使用、內(nèi)存使用等內(nèi)容的性能監(jiān)控。PerformanceCo-Pilot(PCP)軟件包提供了一個(gè)框架來(lái)監(jiān)控和管理實(shí)時(shí)數(shù)據(jù),以及記錄和檢索歷史數(shù)據(jù)。系統(tǒng)監(jiān)控工具同時(shí)以命令行和圖形用戶界面形式提供。BIOS配置(點(diǎn)擊圖片可放大)CPU安全漏洞近年頻繁暴露出CPU漏洞,比如MDS、Zombieload、Spectre、Meltdown、L1TF在Intelx86微處理器中發(fā)現(xiàn)的安全漏洞,它們都利用了微處理器的預(yù)測(cè)執(zhí)行(speculativeexecution)功能來(lái)竊取敏感數(shù)據(jù)。這些漏洞都需要在固件和內(nèi)核層面進(jìn)行修補(bǔ),但這會(huì)導(dǎo)致性能的下降。MDS(MicroarchitecturalDataSampling,微架構(gòu)數(shù)據(jù)采樣)是一組在2018年發(fā)現(xiàn)的漏洞,它們可以通過(guò)讀取處理器內(nèi)部的數(shù)據(jù)緩沖區(qū)來(lái)泄露跨越保護(hù)邊界的數(shù)據(jù)。Zombieload是MDS的一種變體,它可以通過(guò)監(jiān)視處理器執(zhí)行的指令來(lái)獲取敏感數(shù)據(jù),例如密碼、密鑰、瀏覽歷史等。Spectre(幽靈)是一組在2018年初公開(kāi)的漏洞,它們可以通過(guò)操縱處理器的分支預(yù)測(cè)(branchprediction)功能來(lái)迫使目標(biāo)程序執(zhí)行非預(yù)期的指令,并從其緩存中讀取敏感數(shù)據(jù)。Meltdown(熔斷)是一組與Spectre類似的漏洞,它們可以通過(guò)利用處理器的亂序執(zhí)行(out-of-orderexecution)功能來(lái)繞過(guò)內(nèi)存隔離機(jī)制,并從內(nèi)核或其他進(jìn)程中讀取敏感數(shù)據(jù)。L1TF(L1TerminalFault,L1終端故障)是一組在2018年中公開(kāi)的漏洞,它們可以通過(guò)訪問(wèn)L1緩存中的無(wú)效或不可訪問(wèn)的物理地址來(lái)泄露跨越保護(hù)邊界的數(shù)據(jù)。L1TF包括以下幾種變體:Foreshadow,Foreshadow-NG(OS,SMM,VMM)。這些漏洞都對(duì)Intelx86微處理器造成了嚴(yán)重的威脅,尤其是使用超線程技術(shù)(Hyper-Threading)的處理器。為了防止這些漏洞的攻擊,用戶需要更新系統(tǒng)和固件,并可能需要關(guān)閉超線程技術(shù)。但這些措施都會(huì)影響處理器的性能,不同的工作負(fù)載會(huì)有不同程度的下降。在高頻交易領(lǐng)域,特別是針對(duì)券商行情、交易系統(tǒng)、報(bào)盤這些應(yīng)用,因?yàn)椴渴瓠h(huán)境處于內(nèi)網(wǎng),安全環(huán)境比較好,可以通過(guò)內(nèi)核參數(shù)mitigations=off來(lái)關(guān)閉緩解措施,以提升系統(tǒng)性能。屏蔽軟中斷(LocalTimerInterrupt)Linux的schedulertimeslice是通過(guò)LOC實(shí)現(xiàn)的,如果我們讓一個(gè)線程獨(dú)占一個(gè)CPUCore,就不需要scheduler在這個(gè)CPUCore上切換進(jìn)程。可以通過(guò)isolcpus系統(tǒng)啟動(dòng)選項(xiàng)隔離一些核,讓他們只能被綁定的線程使用。同時(shí),我們還可以啟用“adaptive-ticks”模式,達(dá)到減少獨(dú)占線程收到LOC頻率的效果,這可以通過(guò)nohz_full和rcu_nocbs啟動(dòng)選項(xiàng)實(shí)現(xiàn)。假設(shè)令6-8三個(gè)核心屏蔽軟中斷,我們需要在系統(tǒng)啟動(dòng)選項(xiàng)中加入:```textnohz=on

nohz_full=6-8

rcu_nocbs=6-8```進(jìn)入adaptive-ticks模式后,如果CPUCore上的runningtask只有一個(gè)時(shí),系統(tǒng)向其發(fā)送的LOC頻率會(huì)顯著降低,但LOC不能被完全屏蔽,系統(tǒng)內(nèi)核的一些操作比如計(jì)算CPU負(fù)載等仍然需要周期性的LOC。關(guān)閉交換分區(qū)關(guān)閉所有的交換分區(qū)和文件,釋放交換空間中的數(shù)據(jù)到內(nèi)存中。這樣可以提高系統(tǒng)的性能:swapoff-a關(guān)閉透明大頁(yè)Linux透明大頁(yè)(THP)允許內(nèi)核自動(dòng)將常規(guī)內(nèi)存頁(yè)面提升為大頁(yè)。大頁(yè)減少了TLB的壓力,但將頁(yè)面提升為大頁(yè)會(huì)觸發(fā)內(nèi)存壓縮,引入了延遲峰值。通過(guò)提供內(nèi)核命令行參數(shù)transparent_hugepage=never或運(yùn)行以下命令來(lái)禁用透明大頁(yè)支持:echonever>/sys/kernel/mm/transparent_hugepage/enabled同頁(yè)合并Linux內(nèi)核同頁(yè)合并(KSM)是一項(xiàng)功能,用于去重包含相同數(shù)據(jù)的內(nèi)存頁(yè)面。合并過(guò)程需要鎖定頁(yè)面表并清除TLB,從而導(dǎo)致內(nèi)存訪問(wèn)延遲不可預(yù)測(cè)。KSM僅對(duì)已經(jīng)通過(guò)madvise(...MADV_MERGEABLE)選擇加入同頁(yè)合并的內(nèi)存頁(yè)面進(jìn)行操作。如果需要,可以通過(guò)運(yùn)行以下命令在系統(tǒng)范圍內(nèi)禁用KSM:echo0>/sys/kernel/mm/ksm/run使用大頁(yè)應(yīng)用程序訪問(wèn)的頁(yè)面在TLB中缺失時(shí),內(nèi)存管理單元(MMU)遍歷整個(gè)頁(yè)表,會(huì)有極大的性能開(kāi)銷。通過(guò)使用2MB或1GB的大頁(yè)面,可以顯著的減少TLB未命中次數(shù)。我們可以使用perf工具監(jiān)控TLB未命中情況:#perfstat-e'dTLB-loads,dTLB-load-misses,iTLB-loads,iTLB-load-misses'-a--timeout10000

Performancecounterstatsfor'systemwide':

10,525,620dTLB-loads2,964,792dTLB-load-misses#所有dTLB緩存命中的28.17%1,998,243iTLB-loads1,068,635iTLB-load-misses#所有iTLB緩存命中的53.48%

10.002451754秒的已用時(shí)間上述輸出顯示了未命中的數(shù)據(jù)加載(dTLB)和指令加載(iTLB)的比例。我們觀察到大量的TLB未命中,應(yīng)考慮使用大頁(yè)面以減少TLB未命中次數(shù)。關(guān)閉服務(wù)關(guān)閉一些多余服務(wù),減少系統(tǒng)擾動(dòng)#!/bin/shforSERVICEin\avahi-daemon.servicecrond.servicednsmasq.service\firewalld.servicelvm2-monitor.servicepostfix.service\rpcgssd.servicerpcidmapd.servicerpcsvcgssd.service\wpa_supplicant.servicedosystemctldisable$SERVICEsystemctlstop$SERVICEdone```應(yīng)用配置屏蔽Workqueueworkqueue是自kernel2.6引入的一種任務(wù)執(zhí)行機(jī)制,和softirq,tasklet并稱下半部(bottomhalf)三劍客。workqueue在進(jìn)程上下文異步執(zhí)行任務(wù),能夠進(jìn)行睡眠??梢酝ㄟ^(guò)改寫/sys/devices/virtual/workqueue/*/cpumask文件實(shí)現(xiàn)屏蔽Workqueue的軟中斷。/sys/devices/virtual/workqueue/cpumask文件中記錄了全局的cpumask,可以影響所有的workqueue。比如我們只希望CPU0和CPU3來(lái)執(zhí)行workqueue,我們計(jì)算初CPU0和CPU3的cpumask為0x9(二級(jí)制:10001)echo9/sys/devices/virtual/workqueue/cpumask網(wǎng)卡配置檢查網(wǎng)卡Numa信息根據(jù)網(wǎng)卡的numa_node設(shè)置對(duì)應(yīng)的RPS隊(duì)列,變?yōu)榫W(wǎng)卡的中斷綁定cat/sys/class/net/ens3f1/device/numa_nodeKernalBypassKernelBypass技術(shù)在高頻交易系統(tǒng)中有大量應(yīng)用。在不變更程序代碼的角度來(lái)說(shuō),目前可用的解決方案有:Solarflareonload、MellanoxVMA和Exasock三種。KernelBypass的優(yōu)點(diǎn)就是實(shí)現(xiàn)了用戶態(tài)網(wǎng)絡(luò)協(xié)議棧(User-spaceNetworking)允許應(yīng)用程序在用戶態(tài)中運(yùn)行網(wǎng)絡(luò)協(xié)議棧,避免了數(shù)據(jù)包在Linux內(nèi)核中的傳輸過(guò)程,以及涉及內(nèi)核態(tài)的切入切出,還有零Copy等技術(shù)的使用,極大的提升效率,降低傳輸時(shí)延。OnloadSolarflareonload是一種由SolarflareCommunications開(kāi)發(fā)的網(wǎng)絡(luò)加速技術(shù),旨在提高服務(wù)器和數(shù)據(jù)中心網(wǎng)絡(luò)性能,降低網(wǎng)絡(luò)通信的延遲和CPU負(fù)載。這項(xiàng)技術(shù)主要用于高性能計(jì)算(HPC)、云計(jì)算和金融領(lǐng)域等需要低延遲和高吞吐量網(wǎng)絡(luò)連接的應(yīng)用程序。onload無(wú)需對(duì)應(yīng)用程序進(jìn)行修改就可實(shí)現(xiàn)加速效果。onloadsockperfserver-i11.4.3.3VMAMellanoxVMA(VirtualMemoryAcceleration)是一種由MellanoxTechnologies(現(xiàn)在是NVIDIA的一部分)開(kāi)發(fā)的網(wǎng)絡(luò)加速技術(shù)。它旨在提高網(wǎng)絡(luò)性能,減少網(wǎng)絡(luò)傳輸?shù)腃PU負(fù)載,并降低延遲。VMA無(wú)需對(duì)應(yīng)用程序進(jìn)行修改就可實(shí)現(xiàn)加速效果。LD_PRELOAD=libvma.soVMA_SPEC=latencysockperfserver-i11.4.3.3Exasock思科NexusSmartNIC(前身為ExaNIC)KernalBypass方案,無(wú)需對(duì)應(yīng)用程序進(jìn)行修改。通過(guò)簡(jiǎn)單的在應(yīng)用程序前加exasock來(lái)執(zhí)行。exasocknc-u-l1234KernalBypass在降低網(wǎng)絡(luò)時(shí)延的同時(shí),也帶來(lái)了一系列的問(wèn)題,他們一般都會(huì)對(duì)阻塞select(),poll(),epoll_wait(),recv(),read()

和accept()這些調(diào)用來(lái)等待數(shù)據(jù)到來(lái),會(huì)較多占用CPU運(yùn)行時(shí)間,導(dǎo)致這段時(shí)間可用CPU數(shù)變少,如果應(yīng)用程序的線程數(shù)大于可用CPU資源數(shù)時(shí),就會(huì)存在CPU資源競(jìng)爭(zhēng),導(dǎo)致性能下降。所以是否應(yīng)用KernelBypass方案,要根據(jù)實(shí)際程序的運(yùn)行情況來(lái)確定。網(wǎng)絡(luò)配置證券交易網(wǎng)絡(luò)通信通常具有一個(gè)非常明顯的特征:Microburst。即從宏觀結(jié)構(gòu)上來(lái)看,平均每秒流量非常小,但是縮放到毫秒級(jí)刻度,則會(huì)出現(xiàn)鏈路使用率幾乎滿載的情況,如下圖所示:交易數(shù)據(jù)從局域網(wǎng)內(nèi)部一臺(tái)主機(jī)傳輸?shù)搅硪慌_(tái)主機(jī),沿途會(huì)經(jīng)歷幾種不同類型的時(shí)延:丟包時(shí)延(PacketDropDelay)、排隊(duì)時(shí)延(QueuingDelay)、路由交換轉(zhuǎn)發(fā)時(shí)延(SwitchProcessingDelay)、傳輸時(shí)延(PropagationDelay)和串行化時(shí)延(SerializationDelay)。其中丟包時(shí)延、排隊(duì)時(shí)延、串行化時(shí)延都和交換機(jī)端口帶寬和端口緩存直接相關(guān),而傳輸時(shí)延一般受距離影響較大,路由交換轉(zhuǎn)發(fā)時(shí)延則是交換機(jī)設(shè)備的轉(zhuǎn)發(fā)耗時(shí)。因此,使用更低時(shí)延的交換機(jī)和更大的帶寬通??梢杂行Ь徑庋舆t問(wèn)題。極致的網(wǎng)絡(luò)環(huán)境中可以適當(dāng)選擇一層或FPGA交換機(jī)來(lái)做到極低時(shí)延的網(wǎng)絡(luò)轉(zhuǎn)發(fā)。一層交換機(jī)的實(shí)現(xiàn)原理是通過(guò)復(fù)制電平高低信號(hào)來(lái)實(shí)現(xiàn)信號(hào)的快速?gòu)?fù)制傳播,并且能夠?qū)㈦娦盘?hào)進(jìn)行增強(qiáng)及平穩(wěn)處理,使得直通轉(zhuǎn)發(fā)時(shí)延低至5ns以內(nèi)。較適用于高速行情分發(fā)場(chǎng)景。FPGA交換機(jī)可以將同一用戶的策略服務(wù)器訂單上報(bào)后進(jìn)行匯聚輸出,時(shí)延低至40ns以內(nèi);也針對(duì)不同用戶的策略服務(wù)器連接,可以通過(guò)VLAN進(jìn)行劃分隔離。調(diào)優(yōu)工具調(diào)優(yōu)工具跟蹤機(jī)制(點(diǎn)擊圖片可放大)常用工具(點(diǎn)擊圖片可放大)內(nèi)核版本低于4.1以Centos7系統(tǒng)為例,其依賴3.10.0

內(nèi)核版本,這就決定了我們只能通過(guò)perf_event,ftrace/utrace和systemtap的方式進(jìn)行系統(tǒng)調(diào)試.在實(shí)際使用的時(shí)候我們需要考慮不同的需求使用不同的工具,如下所示為簡(jiǎn)單的總結(jié):(點(diǎn)擊圖片可放大)如果Redhat/Centos7內(nèi)核高于3.10.0-940.el7.x86_64,可以酌情使用基于eBPF的bcc-tools工具。內(nèi)核版本高于4.1高于4.1+

版本的系統(tǒng)可以直接通過(guò)eBPF獲取想要調(diào)試的信息。當(dāng)然也可以繼續(xù)使用frace,systemtap等工具工具示意在當(dāng)前的Linux發(fā)行版中,perf和strace是兩個(gè)得到廣泛支持的分析工具。它們提供了豐富的功能,用于診斷和優(yōu)化系統(tǒng)性能問(wèn)題,它們安裝最為便捷,同時(shí)對(duì)于環(huán)境的依賴較小,輸出信息可讀性也比較好。perf進(jìn)行信息采集示例1.通過(guò)perfstat命令可以統(tǒng)計(jì)程序的性能指標(biāo)例如指令數(shù)、周期數(shù)、緩存命中率等。例如,要統(tǒng)計(jì)當(dāng)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論