2017-03-16 6 views
1

自分のプログラムからNIC RXリングの数をETHTOOL API経由で取得しようとしました。 コマンドETHTOOL_GCHANNELSが返されますが、プログラムはエラーを返します。 サンプルコード: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の-lはeth0" からそれを取得しようとしました:

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

が、/ procの中で/私はNICいることがわかり中断異なるCPUコアに複数のRXリングをバインドする必要があります。 誰かが私に正しい方法でCコードからRXリングの数を得ることを教えることができますか?

答えて

0

NICのリングカウントも取得したいと考えていました。私よりも知識のある人と話した後、私たちはあなたのNICの仕様を確認しなければならないという合意に至りました。それはethtoolによって直接入手可能なものではないようです。

$ 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 

しかし、私のマシンのいずれかに、私は以下を参照してください:

しかし、this postも間接テーブルをチェックして、それはRXリング(ただし、TXリング)カウントを表示することができ、ことを示してい

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

これは両方言っdocumentation for the NICにもかかわらず、である:「

  • 82574Lスッポrts 2つの送信ディスクリプタリング "
  • "図26は、2つの受信ディスクリプタリングの構造を示しています。

-xオプションを使用するか、NICのドキュメントを確認してください。 ethtoolで一貫して直接アクセスすることはできません。

関連する問題