ThinkPad T60とJumbo Frames
# 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の82573E/V/L Gigabit Ethernet Controllersの82573Lが搭載されている。
というわけでGigabit EthernetのJumbo 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が有効だとどんな問題があるのだろうか?と思って調べてみたところ、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/
Fedora ドキュメント https://docs.fedoraproject.org/ja-JP/
Wikipedia https://en.wikipedia.org/wiki/