在拿到两片X550后,因为工作需要,需要支援2.5G和5G。但是ethtool ethx之后发现,并不支援2.5G和5G,这和事先调查的结果并不一致。查询code后,我发现相关的代码并没有添加进ixgbe的code,即无法从ethtool的角度实现支援。但是经过对代码的研究,我找出了被动实现的方法,代码如下。
1.打开2.5G和5G
在刚拿到X550后,我和手头的8125B相连,发现link的speed是1000M而不是2.5G,发现是在ixgbe code里已经关闭了2.5G和5G。打开的话需要作如下修改:
@@ -6451,11 +6451,11 @@ static int ixgbe_non_sfp_link_config(struct ixgbe_hw *hw)
speed = hw->phy.autoneg_advertised;
if (!speed && hw->mac.ops.get_link_capabilities) {
ret = hw->mac.ops.get_link_capabilities(hw, &speed,
&autoneg);
-- speed &= ~(IXGBE_LINK_SPEED_5GB_FULL |
-- IXGBE_LINK_SPEED_2_5GB_FULL);
}
if (ret)
goto link_cfg_out;
在上述打开2.5G和5G后,我发现两张X550相连,仍然无法达到2.5G和5G。在经过一番探索之后,我找到了一个捷径。即当需要5G时,禁止10G,当需要2.5G时,禁止5G和10G。这样通过被动降速,即可实现2.5G和5G的link。
2.实现5G
@@ -6450,12 +6450,11 @@ static int ixgbe_non_sfp_link_config(struct ixgbe_hw *hw)
speed = hw->phy.autoneg_advertised;
if (!speed && hw->mac.ops.get_link_capabilities) {
ret = hw->mac.ops.get_link_capabilities(hw, &speed,
&autoneg);
-- speed &= ~(IXGBE_LINK_SPEED_5GB_FULL |
-- IXGBE_LINK_SPEED_2_5GB_FULL);
++ speed &= ~(IXGBE_LINK_SPEED_10GB_FULL);
}
if (ret)
goto link_cfg_out;
3.实现2.5G
@@ -6451,11 +6451,11 @@ static int ixgbe_non_sfp_link_config(struct ixgbe_hw *hw)
speed = hw->phy.autoneg_advertised;
if (!speed && hw->mac.ops.get_link_capabilities) {
ret = hw->mac.ops.get_link_capabilities(hw, &speed,
&autoneg);
speed &= ~(IXGBE_LINK_SPEED_5GB_FULL |
-- IXGBE_LINK_SPEED_2_5GB_FULL);
++ IXGBE_LINK_SPEED_10GB_FULL);
}
if (ret)
goto link_cfg_out;
当然,可以通过修改ethtool.c文件来修改,进而通过ethtool命令来实现,不过我尝试了一下并没有成功,走了捷径。
如果觉得这篇文章有用的话,可以点赞、评论或者收藏,万分感谢,goodbye~