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

下載本文檔

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

文檔簡介

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

nohz_full=6-8

rcu_nocbs=6-8```進入adaptive-ticks模式后,如果CPUCore上的runningtask只有一個時,系統(tǒng)向其發(fā)送的LOC頻率會顯著降低,但LOC不能被完全屏蔽,系統(tǒng)內(nèi)核的一些操作比如計算CPU負載等仍然需要周期性的LOC。關(guān)閉交換分區(qū)關(guān)閉所有的交換分區(qū)和文件,釋放交換空間中的數(shù)據(jù)到內(nèi)存中。這樣可以提高系統(tǒng)的性能:swapoff-a關(guān)閉透明大頁Linux透明大頁(THP)允許內(nèi)核自動將常規(guī)內(nèi)存頁面提升為大頁。大頁減少了TLB的壓力,但將頁面提升為大頁會觸發(fā)內(nèi)存壓縮,引入了延遲峰值。通過提供內(nèi)核命令行參數(shù)transparent_hugepage=never或運行以下命令來禁用透明大頁支持:echonever>/sys/kernel/mm/transparent_hugepage/enabled同頁合并Linux內(nèi)核同頁合并(KSM)是一項功能,用于去重包含相同數(shù)據(jù)的內(nèi)存頁面。合并過程需要鎖定頁面表并清除TLB,從而導致內(nèi)存訪問延遲不可預(yù)測。KSM僅對已經(jīng)通過madvise(...MADV_MERGEABLE)選擇加入同頁合并的內(nèi)存頁面進行操作。如果需要,可以通過運行以下命令在系統(tǒng)范圍內(nèi)禁用KSM:echo0>/sys/kernel/mm/ksm/run使用大頁應(yīng)用程序訪問的頁面在TLB中缺失時,內(nèi)存管理單元(MMU)遍歷整個頁表,會有極大的性能開銷。通過使用2MB或1GB的大頁面,可以顯著的減少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ù)據(jù)加載(dTLB)和指令加載(iTLB)的比例。我們觀察到大量的TLB未命中,應(yīng)考慮使用大頁面以減少TLB未命中次數(shù)。關(guān)閉服務(wù)關(guān)閉一些多余服務(wù),減少系統(tǒ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í)行機制,和softirq,tasklet并稱下半部(bottomhalf)三劍客。workqueue在進程上下文異步執(zhí)行任務(wù),能夠進行睡眠??梢酝ㄟ^改寫/sys/devices/virtual/workqueue/*/cpumask文件實現(xiàn)屏蔽Workqueue的軟中斷。/sys/devices/virtual/workqueue/cpumask文件中記錄了全局的cpumask,可以影響所有的workqueue。比如我們只希望CPU0和CPU3來執(zhí)行workqueue,我們計算初CPU0和CPU3的cpumask為0x9(二級制:10001)echo9/sys/devices/virtual/workqueue/cpumask網(wǎng)卡配置檢查網(wǎng)卡Numa信息根據(jù)網(wǎng)卡的numa_node設(shè)置對應(yīng)的RPS隊列,變?yōu)榫W(wǎng)卡的中斷綁定cat/sys/class/net/ens3f1/device/numa_nodeKernalBypassKernelBypass技術(shù)在高頻交易系統(tǒng)中有大量應(yīng)用。在不變更程序代碼的角度來說,目前可用的解決方案有:Solarflareonload、MellanoxVMA和Exasock三種。KernelBypass的優(yōu)點就是實現(xiàn)了用戶態(tài)網(wǎng)絡(luò)協(xié)議棧(User-spaceNetworking)允許應(yīng)用程序在用戶態(tài)中運行網(wǎng)絡(luò)協(xié)議棧,避免了數(shù)據(jù)包在Linux內(nèi)核中的傳輸過程,以及涉及內(nèi)核態(tài)的切入切出,還有零Copy等技術(shù)的使用,極大的提升效率,降低傳輸時延。OnloadSolarflareonload是一種由SolarflareCommunications開發(fā)的網(wǎng)絡(luò)加速技術(shù),旨在提高服務(wù)器和數(shù)據(jù)中心網(wǎng)絡(luò)性能,降低網(wǎng)絡(luò)通信的延遲和CPU負載。這項技術(shù)主要用于高性能計算(HPC)、云計算和金融領(lǐng)域等需要低延遲和高吞吐量網(wǎng)絡(luò)連接的應(yīng)用程序。onload無需對應(yīng)用程序進行修改就可實現(xiàn)加速效果。onloadsockperfserver-i11.4.3.3VMAMellanoxVMA(VirtualMemoryAcceleration)是一種由MellanoxTechnologies(現(xiàn)在是NVIDIA的一部分)開發(fā)的網(wǎng)絡(luò)加速技術(shù)。它旨在提高網(wǎng)絡(luò)性能,減少網(wǎng)絡(luò)傳輸?shù)腃PU負載,并降低延遲。VMA無需對應(yīng)用程序進行修改就可實現(xiàn)加速效果。LD_PRELOAD=libvma.soVMA_SPEC=latencysockperfserver-i11.4.3.3Exasock思科NexusSmartNIC(前身為ExaNIC)KernalBypass方案,無需對應(yīng)用程序進行修改。通過簡單的在應(yīng)用程序前加exasock來執(zhí)行。exasocknc-u-l1234KernalBypass在降低網(wǎng)絡(luò)時延的同時,也帶來了一系列的問題,他們一般都會對阻塞select(),poll(),epoll_wait(),recv(),read()

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

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

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

溫馨提示

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

評論

0/150

提交評論