2015-01-21 44 views
0

我在Linux x86_64上使用基於以太網10 Gbit/s的TCP/IP。TCP/IP中的數據包處理中斷代碼是什麼?

但是在CPU-Core之一發生中斷時會發生什麼?

是不是真的,出現這種情況:

  • 中斷的代碼計算IP數據包的校驗
  • 代碼中斷將數據從內核空間緩衝區到所需的套接字緩衝區
  • 代碼中斷將數據從以太網卡上的緩衝區複製到內核空間中的緩衝區(或通過在以太網上使用DMA控制器發生中斷之前發生,並且由以太網卡啓動?)
+1

你是在談論一個內核驅動程序吧?我無法理解'使用BSD套接字()和使用epoll()解複用'之間的聯繫,以及有關驅動程序實際工作方式的問題。或者一般的關於epoll設施的問題?看起來你已經在你的問題中合併了3個不同的東西。 – Maquefel 2015-01-21 10:13:50

+0

@Maquefel我刪除了有關BSD套接字和epoll的說明。是的,我關於內核驅動程序,以及中斷代碼中發生了什麼。 – Alex 2015-01-21 10:18:53

+0

硬件內核驅動程序或實際協議? – Maquefel 2015-01-21 10:40:09

回答

2

你的問題是硬件,協議棧和用戶空間的混合。中斷的

代碼計算IP數據包的校驗

這部分協議 - 我想這裏的某個地方,從內核中斷拷貝數據網/支持IPv4/ip_input.c

代碼 - 空間緩衝區到所需的套接字緩衝區

混合的原型和用戶空間,例如這裏net/ipv4/tcp_input.c

中斷代碼將數據從以太網卡上的緩衝區複製到內核空間中的緩衝區(或者在中斷產生之前,通過在以太網上使用DMA控制器並由以太網卡啓動?)

這是例如drivers/net中/ 8139cp.c

下一頁硬件 - 我想你是誤會了「中斷」一詞 - 有硬件中斷和軟件中斷。 這裏唯一的硬件中斷是來自以太網控制器的rx/tx中斷。

不是一個完整的回答你的問題:

一切有可能劃分網絡分成兩個部分的第一實際協議(淨利潤/ IPv4的目錄),它實現了各種網絡硬件 和部分(drivers/net中) 。

並非所有的硬件驅動程序都實現中斷驅動技術的一些驅動程序,用於高帶寬適配器使用輪詢技術(NAPI接口 - 我簡要描述)。

  1. 數據包首先被卡接收。當接口收到「數據到達中斷」時,它禁止中斷並通知內核開始輪詢接口。
  2. 然後,當數據包可用時,中斷處理程序將其保留在接口中,並調用netif_rx_schedule方法。這會導致接口驅動程序輪詢方法在將來被調用。
  3. 然後它進入網絡層,最後(但不是我描述的那麼短)進入用戶空間,並且用戶被通知可用於讀取事件的數據,而我不能調用中斷。

我建議你閱讀下面的文章:

Linux網絡內核(http://www.ecsl.cs.sunysb.edu/elibrary/linux/network/LinuxKernel.pdf

+0

謝謝!您能否說,在硬件中斷期間,至少要複製多少次數據以及讀取多少次(例如,用於校驗和)? (當我使用帶有套接字的以太網使用TCP時,如果它很重要) – Alex 2015-01-21 14:14:24

+1

NAPI〜1中斷(正如我在到達時所說的那樣,它被禁用並且輪詢模式被設置),如果不是NAPI中斷可能發生的次數與數據到達,傳輸並且數據在任何地方都被正確地讀取。在硬件中斷期間不計算校驗和(它可以不是IP層校驗和), - 它是協議層的責任,並且在這裏被封爲http://lxr.free-electrons.com/source/net/ipv4/ip_input .c#L376適用於ip層。 – Maquefel 2015-01-22 06:27:14

+0

非常感謝!即對於NAPI,在1個硬件中斷中,數據只複製1次。但是,您是否可以在中斷髮生時澄清此時以太網幀的數據:以太網卡上的硬件緩衝區中還是已經存在於CPU-RAM緩衝區中? – Alex 2015-01-22 13:01:42

相關問題