YANO's digital garage

Copyright ©YANO All rights reserved. https://www.bravotouring.com/~yano/

Last-modified: 2024-05-07 (火)


[一語一絵/IT系]

ThinkPad T60とJumbo Frames / 2007-10-25 (木)

[External]ThinkPad T60には

# lspci
02:00.0 Ethernet controller: Intel Corporation 82573L Gigabit Ethernet Controller
        Subsystem: Lenovo ThinkPad T60
        Flags: bus master, fast devsel, latency 0, IRQ 11
        Memory at ee000000 (32-bit, non-prefetchable) [size=128K]
        I/O ports at 3000 [size=32]
        Capabilities: [c8] Power Management version 2
        Capabilities: [d0] Message Signalled Interrupts: 64bit+ Queue=0/0 Enable-
        Capabilities: [e0] Express Endpoint IRQ 0
        Capabilities: [100] Advanced Error Reporting
        Capabilities: [140] Device Serial Number 24-75-0b-ff-ff-58-15-00
な具合にIntel[External]82573E/V/L Gigabit Ethernet Controllers82573Lが搭載されている。

というわけでGigabit EthernetJumbo Framesにも対応しているハズなのだが、切ない事に

# ifconfig eth0 mtu 7168
SIOCSIFMTU: 無効な引数です
となる。ちなみに/var/log/messagesには
kernel: e1000: eth0: e1000_change_mtu: Jumbo Frames not supported.
と吐き出されており、切ない事この上ない。

drivers/net/e1000/e1000_main.cをチェックしたら、ASPMが無効になっている時以外はJumbo Framesに設定できないような造りになっている事がわかったので、

static int e1000_change_mtu(struct net_device *netdev, int new_mtu)
{
  :
  :

  /* Adapter-specific max frame size limits. */
  switch (adapter->hw.mac.type) {
  case e1000_undefined:
  :
  :
  case e1000_82573:
    /* Jumbo Frames not supported if:
     * - this is not an 82573L device
     * - ASPM is enabled in any way (0x1A bits 3:2) */
#if CUT
    e1000_read_nvm(&adapter->hw, NVM_INIT_3GIO_3, 1, &eeprom_data);
    if ((adapter->hw.device_id != E1000_DEV_ID_82573L) ||
        (eeprom_data & NVM_WORD1A_ASPM_MASK)) {
        if (max_frame > ETH_FRAME_LEN + ETHERNET_FCS_SIZE) {
            DPRINTK(PROBE, ERR,
                    "Jumbo Frames not supported.\n");
            return -EINVAL;
        }
        break;
    }
#endif // CUT
    /* ERT will be enabled later to enable wire speed receives */

    /* fall through to get support */
  case e1000_ich9lan:
てな感じでガードしている箇所をCUTしてみたところ、思惑通り設定できるようになった。

暫く使ってみて「普通に使えるじゃん」と喜んでいたのだが、ASPMが有効だとどんな問題があるのだろうか?と思って調べてみたところ、[External]82573 Family Gigabit Ethernet Controllers Specification Update 「ASPM/Jumbo Frames Disabled Due to Early Receive Threshold Overrun Buffer」というレポートが上がっており、

The Jumbo Frames feature uses the Early Receive Threshold (ERT) in the 82573 when ASPM is enabled. When ERT is enabled, Jumbo Frames may possibly corrupt system memory.
とサラッと書いてあったのだが、要するに「システムメモリを破壊するかもしれない」という深刻な障害じゃないですか!

まぁASPMを無効にすればいいんですね、と思ったものの無効にする方法がわかんないんだよなぁ…

【参照】
●Intel® http://www.intel.com/
Intel® 82573E/V/L Gigabit Ethernet Controllers
82573 Family Gigabit Ethernet Controllers Specification Update
●Xilinx https://japan.xilinx.com/
AR# 36325: PCI Express のデザイン アシスタント - ASPM をオフにする方法
●Fedora ドキュメント https://docs.fedoraproject.org/ja-JP/
3.5. Active-State Power Management
●Wikipedia https://en.wikipedia.org/wiki/
Active State Power Management