2011-12-08 82 views
0

我打算直接寫一些軟件到FPGA網卡,來捕獲傳入的定製網絡數據包。納秒內核時序?

最終我相信我會將獲得的數據發送到內核或用戶應用程序。這是一個延遲關鍵的交易研究項目。

由於所需的準確性以及我計算PCI-E網卡接收和內核接收器之間持續時間的事實,我可以使用哪種納秒定時工具?

這將是在Linux上,以「驅動器」代碼(我可以把用戶的應用程序在這個水平削減延遲)用C寫的

+0

想起CPU的[時間戳計數器](http://en.wikipedia.org/wiki/Time_Stamp_Counter)。我不確定你在網絡端有什麼硬件......你在使用哪張卡? –

+0

由於限制,它可能是AdvancedIO或Napatech。這裏是advancedIO:http://www.advancedio.com/markets/financial/ultra-low-latency-trading/ – user997112

+0

令人印象深刻的硬件。 :-)要在FPGA上測量時間,只需使用時鐘信號和寄存器。你將在FPGA上運行什麼軟件/硬件? –

回答

0

在軟件的每一件事情發生在系統時鐘的倍數。我認爲你可以使用任何時間測量函數來返回經過的時鐘滴答數,例如clock()應該給你足夠的準確度。

+1

clock()會返回幾微秒,但其粒度介於幾百毫秒和1秒之間 –

+0

我不確定的唯一原因是因爲我讀了某處調用getTimeOfDay()函數(大概是在Java或C#中)的函數有很大的開銷。因此我不確定本地C函數不需要大量開銷。 – user997112

1

在Linux上使用CPU時鐘週期就是通過tsc相當於Windows的QueryPerformanceCounter的

+0

您好Martin,如果我對FPGA進行編程,我可以從FPGA /網卡訪問嗎? – user997112

+0

這是一個CPU指令,它在CPU中運行並返回CPU計數器。 YOu必須在內核的驅動程序中讀取它並將其發送到PCI卡 –

1

clock_gettime使用HPET(如果可用),這是簡單的好,一樣可靠,你可以得到。

如果HPET是可用,你必須在這個規模沒有可靠的計時器,無論如何,所以不幸的clock_gettime分辨率會差一些,但這是它僅僅是什麼,有沒有什麼可以做的。

任何其他來源,包括tsc,都是較低分辨率或不可靠,或者兩者都有。