2017-03-16 151 views
1

我嘗試從我的程序通過ETHTOOL API和 命令ETHTOOL_GCHANNELS獲得NIC RX環的計數,但程序返回錯誤:「操作不受支持」。 示例代碼:如何獲得Linux中的NIC RX環的數量

echannels.cmd = ETHTOOL_GCHANNELS; 
req.ifr_data = (void*)&echannels; 

    if (ioctl(sock, SIOCETHTOOL, &req) != 0) 
     ERR("Can't get %s channels info! %s", nic, strerror(errno)); 
    else 
     rx_no = echannels.rx_count; 

而且我已經嘗試使用相同的結果,從的ethtool 「的ethtool eth0的-l」 得到它:

#ethtool -l eth0 
Channel parameters for eth0: 
Cannot get device channel parameters 
: Operation not supported 

,但在/ proc /中斷我看到NIC有多個RX環綁定到不同的CPU核心。 任何人都可以告訴我正確的方法來從C代碼中獲取RX環的數量?

回答

0

我正在尋找獲得我的NIC的戒指數。在和一個比我更熟悉的人交談之後(我們也沒有搞清楚),我們達成了協議,你可能需要檢查你的網卡的規格;它似乎不是通過ethtool直接可用的東西。

然而,this post也表明,通過檢查間接表,它可以顯示RX環(但不TX環)數:

$ sudo ethtool -x eth0 
RX flow hash indirection table for eth3 with 2 RX ring(s): 
0: 0 1 0 1 0 1 0 1 
8: 0 1 0 1 0 1 0 1 
16: 0 1 0 1 0 1 0 1 
24: 0 1 0 1 0 1 0 1 

然而,在我的機器之一,我看到:

$ sudo ethtool -x enp9s0 
Cannot get RX ring count: Operation not supported 

這是儘管documentation for the NIC的說法都:

  • 「的82574L suppo rts兩個傳輸描述符環「
  • 」圖26顯示了兩個接收描述符環的結構。「

希望-x選項或檢查您的NIC的文檔將有所幫助。它似乎並不一致,可直接通過ethtool訪問。

相關問題