超高頻交易幫助
我正在組裝一個超高頻辦公桌,需要回答以下問題,以便訂購一些機架伺服器以每秒處理大約 2 GB 的數據。如果有人以前在高頻交易台工作過,你能幫幫我嗎?大型高頻交易商店執行什麼樣的軟體?
- 需要多少個處理器,時鐘速度是多少?
- 需要多少記憶體?
- 您需要多少內部儲存空間?
- 您需要任何外部儲存嗎?
- 需要多少個網路埠?
- 需要多少光纖連接?
這個問題在(正確地)被關閉後再次被重新打開,因為它太寬泛了,目的是為了消除對這裡的一個答案的一些誤解。
這裡要強調的主要思想是:當涉及到高頻交易時,最大或“盡可能多”很少是正確的。
這不僅是錯誤的,而且在空間要求和其他限制 HFT 架構外觀的因素方面也是不可能的。
假設您擁有所有資源,包括整個貨幣方面。讓我們回顧一下位於同一位置的 HFT 機器的一些固有限制。
- 尺寸:無論您為此花多少錢,您都沒有足夠的空間來放置您夢想中的 HFT 機器。您有一個機架(或多個機架,具體取決於您計劃使用的硬體以及您有多少錢)。
- CPU:大部分情況下,我們都被困在同一個 CPU 上,現場可程式門陣列(FPGA) 也是如此。我們在硬體/架構方面都“卡住”了它們,也就是說,沒有一家公司會落後於最新的 CPU 技術,更重要的是,我們在軟體方面也受到限制。GPU 和ASICS也是如此。授予軟體限制是由於硬體造成的,因此將其歸類為“軟體限制”似乎是武斷的,但問題更多地取決於軟體功能而不是硬體,因為後者在該領域或多或少地標準化。這是一個範例,即使您一無所知,也可以使概念化變得簡單關於 C++ 中的並發多執行緒程式…
根據具體的硬體實現,讓我們通過一個場景來調查它的基本結構。
對於這個例子,假設你可以讓所有不同的任務在不同的執行緒上執行(這裡專門討論 HFT)做他們可能為應用程序做的任何事情(例如,一個用於處理傳入市場數據的執行緒(一個提要處理程序),一個用於處理市場數據和交易所/訂單網關執行緒)。讓我們更詳細地討論這三個過程對這個特定硬體設置的要求。
注意:我絕不是說以下設置是行業標準,甚至不是智能設置。這只是一個範例,展示了該策略可能在硬體方面所做的一些事情。
- **Feed 處理器:**該執行緒的工作是處理傳入的市場數據,並準備好將其發送到與策略有更多關係的下一個執行緒。這項工作和交換網關通常是 HFT 系統中總體網路延遲的最大生產者。為什麼?當涉及到交易所和網路 i/o 時,有幾個因素構成了無法即時預測和/或補償的挑戰。這些問題通常以奇怪/不一致增量的傳入市場數據的形式出現,市場數據在幾分之一秒內沒有顯示,等等。
- 信號發現/生成:這個執行緒的工作應該是不言自明的,它是獲取市場數據並根據策略的基礎,根據正在發生的事情做出一些決定。這裡需要注意的重要一點是,鑑於這種性質的計算是危險的,並且在硬體級別進行迭代,這通常是您在彙編中看到的部分/在硬體級別編寫的部分。
- **Exchange Gateway:**同樣,鑑於流程的不確定性,這也將成為延遲的主要貢獻者之一。該執行緒的工作是確保信號生成執行緒做出的任何決定都準確有效地傳遞給交換。通常在這裡,根據市場情況,較大的訂單被分成較小的訂單,根據市場的表現以及計算出的市場影響分析類型,將其發送到各種不同的交易所/暗池。
但是,要讓所有這些都適用於這個特定的系統,必鬚髮生一些非常具體的事情,那就是:在這個應用程序執行期間的某個時刻,必須存在某種形式的“關鍵處理路徑”……你有必須連續/以某種離散順序處理的事情。
但為什麼會這樣呢?為什麼必須按順序處理其中的某些部分?主要是因為每個執行緒正在執行的操作的結果必須傳遞到下一個執行緒,這很容易通過我們在假 HFT 應用程序中每個執行緒正在執行的基本範例進行視覺化。
這有什麼不好的?
好吧,你只是不需要所有這些執行緒!
所以,從這個答案:
問:需要多少個處理器,時鐘速度是多少?A:盡可能多
根本沒有多大意義!
對於 HFT 系統對延遲最敏感的方面,您將看到看起來更像這樣的東西:
單執行緒隔離到單核。**為什麼?**我能想到的主要原因有兩個:作業系統不會妨礙您(即,如果所有內容都鎖定在一個核心和一個執行緒上,那麼處理作業系統並防止其將任何其他任務委派給該作業系統會更容易)執行緒,為您節省寶貴的記憶體)。其次,在這樣的設置中,任何無鎖程式的實現都容易得多。對於在單個核心上執行的單執行緒,您可以進行單生產者單消費者呼叫,這些呼叫集成了該核心上發生的事情,並確保其有效路徑到以類似方式執行的策略核心。
現在,進入記憶:
- 需要多少記憶體?
其實不多。絕對不是“ A:你能得到的”
這樣想:你想從記憶中讀取做 HFT 嗎?
不,你不會,你也不會。鑑於此活動的確定性,您的記憶體路徑必須能夠快速訪問並且不易失去和從 RAM 中讀取,因此將其保持在 CPU 記憶體中的低級別是目前最好的選擇。
現在,儲存!
- 您需要多少內部儲存空間?
同樣,與隨機存取儲存器的處理類似:從記憶體中讀取是不好的,但是從儲存中讀取?這將是災難性的。來自交易所的數據正在儲存,但不在現場!你為什麼要花錢在託管空間上並用它來儲存滴答數據?答案是你不會。
- 需要多少個網路埠?
另一個答案在很大程度上涵蓋了這一點,這取決於交易所及其運作方式,但一般來說,你不會看到超過兩三個。從理論上講,您只需要連接到交易所的訂單處理程序,這是另一個固有限制的例子;您可以獲得交易所支持的任何頻寬。這與關於光纖和頻寬的最後一個問題有關:假設您達到了頻寬限制,“盡可能多地”是愚蠢和荒謬的,如前所述。您將達到頻寬限制,而更多的光纖對您毫無用處。
在機器上執行的作業系統取決於硬體,而且系統的這一方面大多不是一個值得關注的領域。只是對使核心網路更容易的資源有所了解。如果您必須了解 HFT 機器上使用的特定作業系統,我知道有一家成功的公司使用CentOS,它是上游Red Hat Enterprise Linux (RHEL)的衍生產品。後者傳統上在 x86、x86-64 和 Itanium 伺服器上執行。
如果必須將其總結為非常簡短的內容,那就是:
- 更多的 CPU 核心
!=
更好的 HFT 系統。將單個關鍵程序隔離到核心更有意義,因為通信更容易(更快),並且您消除了為快速路徑互連引入系統的潛在成本。- 鑑於大多數記憶體密集型任務應在 CPU 記憶體中完成,因此系統的 RAM 在很大程度上是一個不重要的因素。
- 出於與 RAM 類似的原因,儲存空間甚至更小:數據不儲存在現場,從儲存中讀取會很糟糕。
- 網路埠:這是比其他任何東西都更標準化的東西,因為交換是以某種方式建構的,這迫使每個人都以某種方式對其進行配置。
- 更多的光纖
!=
更高的頻寬。頻寬又是一個很大程度上取決於交換的因素,更多的光纖不會為您做任何事情。
您的問題非常廣泛,社區無法回答,因為它需要對您的業務需求進行全面分析。這不是喝咖啡休息時可以做的事情。當然,有人可能會回答您的問題:“盡可能多、盡可能多、至少和最快”,但您的成本會飆升,因為幾乎沒有限制……您真的想在 F1 賽車上花錢嗎?一輛像樣的麵包車能滿足需求嗎?
長話短說:僱用知識淵博的人來做這項工作,你會做得更好。