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