2021-4-10 | 證券交易論文
1概述
近年來,國際、國內(nèi)資本市場獲得高速發(fā)展,帶來資本流動性與交易量的急劇增大[1],使得降低交易系統(tǒng)延遲的需求凸現(xiàn)出來。同時,程序化交易、算法交易、高頻交易的大量使用,也造成追求更細粒度交易時間的“競賽”不斷升級。事實上,消息傳輸帶寬、延遲方面的問題已成為證券交易行業(yè)近年來發(fā)展所面臨的最大技術(shù)挑戰(zhàn)之一。
面對挑戰(zhàn),以紐交所、德交所、加拿大Chi-X交易所、美國Bats交易所為代表的全球主要交易所已經(jīng)展開了激烈的競爭,紛紛采取措施降低交易延遲,以毫秒甚至微秒來計算證券交易延遲的“低延遲證券交易系統(tǒng)”因此成為研究熱點。
本文給出證券交易延遲的分析框架和分類方法,并針對構(gòu)建低延遲證券交易系統(tǒng)時的軟件集成和開發(fā),研究了操作系統(tǒng)、消息中間件、軟件開發(fā)、性能測試及優(yōu)化等相關(guān)軟件關(guān)鍵技術(shù)。
2證券交易系統(tǒng)延遲分析框架
與其他金融服務(wù)應(yīng)用相比,證券交易具有時間集中、數(shù)據(jù)密集的特點,對交易速度具有很高的要求。以上海證券交易所為例,2009年日均成交股票達到了100多億股,股票每秒的成交量則達到了數(shù)萬筆之多,與此同時,每秒鐘有數(shù)以萬計的訂單、確認、回報、行情等消息被產(chǎn)生。
廣義上的證券交易延遲是指由訂單等交易指令從市場參與者系統(tǒng)發(fā)出,到交易系統(tǒng)接受、處理,并返回處理結(jié)果的時間開銷。而狹義上的交易延遲是指交易指令從進入交易系統(tǒng)接入點之后到處理結(jié)果返回接入點之間的時間開銷。對于證券交易所這種集中式的交易系統(tǒng)來說,客戶方系統(tǒng)和網(wǎng)路等外部延遲因素不可控,因此低延遲證券交易系統(tǒng)的構(gòu)建主要基于后者進行討論。對于證券交易系統(tǒng),根據(jù)經(jīng)過的處理環(huán)節(jié),交易延遲可細分為以下5類:
(1)消息處理延遲:應(yīng)用消息傳輸過程中的消息格式轉(zhuǎn)換、消息可用性機制相關(guān)的時間開銷。
(2)通信處理延遲:主機的協(xié)議棧處理開銷。
(3)調(diào)度延遲:主機提出請求到請求開始被處理的時間開銷。
(4)發(fā)送/接收延遲:主機向網(wǎng)絡(luò)發(fā)送或接收協(xié)議包的開銷。
(5)傳播延遲:在傳播介質(zhì)上傳輸?shù)臅r間開銷,主要與傳輸距離和傳輸介質(zhì)相關(guān)。
相應(yīng)地,交易延遲的影響因素涵蓋了網(wǎng)絡(luò)、CPU、存儲器、網(wǎng)絡(luò)接口性能等硬件相關(guān)的因素,以及操作系統(tǒng)、中間件(主要為消息中間件)、應(yīng)用軟件等軟件相關(guān)的因素。這些因素在不同層次上對證券交易延遲造成影響。其中,根據(jù)文獻[2],對于高性能、低延遲硬件環(huán)境的系統(tǒng)來說,大部分的開銷由軟件處理所引起。因此,在構(gòu)建低延遲證券交易系統(tǒng)的時候,尤其需要對這些軟件延遲影響因素進行分析,盡量避免或降低延遲影響因素造成的影響,降低交易的延遲。
3低延遲證券交易系統(tǒng)軟件關(guān)鍵技術(shù)
3.1操作系統(tǒng)
常見的通用操作系統(tǒng)存在以下不適于低延遲處理的地方:
(1)雖然理論上操作系統(tǒng)時鐘最小可以與硬件中斷處理的時間相等,但通用操作系統(tǒng)的時間管理一般采用粗粒度的周期性時鐘中斷。盡管對操作系統(tǒng)本身而言,這避免了頻繁進行進程上下文切換,但也使調(diào)度的時鐘延遲在最壞情況下可能等同于時鐘的間隔,從而成為延遲產(chǎn)生的最大來源[3]。
例如,Linux缺省時鐘間隔粒度為10ms,因此最壞情況下內(nèi)核和用戶空間應(yīng)用程序需要使用一個時間間隔來進行調(diào)度。也就是說,對于一個休眠的進程,即便喚醒條件已經(jīng)觸發(fā),也許需要10ms的時間才能被調(diào)度執(zhí)行,這顯然難以滿足低延遲應(yīng)用的要求。
(2)通用操作系統(tǒng)中大量存在的非搶占式處理會對低延遲處理造成影響。這是因為,即便操作系統(tǒng)已經(jīng)使用了細粒度的時鐘,而且硬件也及時地產(chǎn)生了一個時鐘中斷,但如果中斷被屏蔽或者內(nèi)核運行在非搶占式代碼區(qū),也會造成內(nèi)核不能及時中斷,應(yīng)用程序依然得不到及時的調(diào)度執(zhí)行,這樣的延遲可能會長達50ms~100ms[4]。
(3)線程調(diào)度策略也可能造成較大的延遲。即便操作系統(tǒng)使用了細粒度的時鐘,并且使用了搶占式方式可以及時中斷,但如果優(yōu)先權(quán)不夠,還是無法被立刻被調(diào)度執(zhí)行。實時系統(tǒng)領(lǐng)域?qū)υ搯栴}進行了較多的研究。其中較好的一類辦法是使用按比例的實時調(diào)度器[5],它能按照比例對不同類型的應(yīng)用線程進行調(diào)度,前提是所有線程都是搶占式的,而且使用粒度更細的時鐘。
(4)通用操作系統(tǒng)一般都使用虛擬內(nèi)存,因為這使得并發(fā)執(zhí)行的程序可以在運行程序時,只將運行需要的部分載入內(nèi)存,從而允許程序空間的總和可以遠大于實際可用的RAM內(nèi)存。對于時分系統(tǒng)來說,虛擬內(nèi)存不會產(chǎn)生問題。但是對于實時系統(tǒng),這種頁面調(diào)度與交換會造成無法容忍的不確定性延遲。
為支持實時、低延遲的應(yīng)用,一些面向操作系統(tǒng)的實時技術(shù)被提出。文獻[6]實現(xiàn)的實時操作系統(tǒng)利用MINIX無任何頁面調(diào)度與交換的特點,使用基于優(yōu)先權(quán)的調(diào)度器替換了MINIX操作系統(tǒng)原本基于循環(huán)的調(diào)度器。該方法對時間粒度的要求不太高的應(yīng)用比較適合。QNX[7]系統(tǒng)在Unix中使用POSIX.1b實時規(guī)范,采用的技術(shù)有基于優(yōu)先權(quán)的調(diào)度算法、用戶內(nèi)存頁面鎖定、實時信號、優(yōu)化IPC和時鐘等。Vxworks繼承了POSIX.1b中的許多方法,此外,Vxworks中內(nèi)核和事務(wù)進程使用了同一地址空間,這使得事務(wù)的切換十分迅速,也避免了系統(tǒng)調(diào)用中斷。REAL/IX系統(tǒng)[8]兼容POSX.1b,通過實現(xiàn)基于信號量的資源訪問替換了傳統(tǒng)的休眠/喚醒和中斷屏蔽,這有效地降低了中斷延遲,并使得向多處理器/多微處理器機器的遷移更加容易。REAL/IX實現(xiàn)的技術(shù)包括預(yù)分配內(nèi)存和文件空間、同步和異步I/O支持、用戶進程直接處理中斷等。Rtlinux[9]系統(tǒng)通過在Linux內(nèi)核和中斷控制器硬件之間加上一層輕量級的虛擬機層來虛擬中斷控制器和時鐘,從而可以將Linux按照搶占式的方式來運行。其中操作系統(tǒng)內(nèi)核不能直接控制中斷控制器,因為虛擬機層使用宏替換了所有開/關(guān)中斷和中斷返回指令,所有的硬件中斷均被虛擬機層捕獲,然后根據(jù)中斷狀態(tài)判斷是否需要處理該中斷。