什么会影响网络接口的时间戳功能?

什么会影响网络接口的时间戳功能?

我有两个 Linux 虚拟机VirtualBox 7.0

  • 机器 1:CentOS 6带有 Linux 内核2.6.32-754
  • 机器2:CentOS 8带有Linux内核4.18.0-448

机器1的所有网络接口不支持TX 时间戳,而机器 2 的所有网络接口都支持此功能。

让我们考虑环回接口。

输出sudo ethtool -T lo

机器1:

Time stamping parameters for lo:
Capabilities:
        software-receive      (SOF_TIMESTAMPING_RX_SOFTWARE)
        software-system-clock (SOF_TIMESTAMPING_SOFTWARE)
PTP Hardware Clock: none
Hardware Transmit Timestamp Modes: none
Hardware Receive Filter Modes: none

机器2:

Time stamping parameters for lo:
Capabilities:
        software-transmit
        software-receive
        software-system-clock
PTP Hardware Clock: none
Hardware Transmit Timestamp Modes: none
Hardware Receive Filter Modes: none

我不清楚为什么机器 1 缺乏 TX 时间戳的支持,因为该功能应该适用于此内核:文档

我故意在这里检查环回接口,因为我期望它不应该依赖于 VirtualBox 实现细节。

有谁知道是否应该在系统中显式配置某些内容以启用 CentOS6 的 TX 时间戳(事实上,对于任何操作系统)?

答案1

我认为这与驱动程序的编写方式有关。例如,内核源代码v4.18包含环回接口的驱动程序,其中有这样的代码:

static int loopback_get_ts_info(struct net_device *netdev,
                struct ethtool_ts_info *ts_info)
{
    ts_info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
                   SOF_TIMESTAMPING_RX_SOFTWARE |
                   SOF_TIMESTAMPING_SOFTWARE;

    ts_info->phc_index = -1;

    return 0;
};

因此,这意味着该版本中的环回接口驱动程序支持 TX 时间戳。

但是如果我们将内核版本切换到eg v3.10,那么很明显环回驱动程序不支持TX时间戳(SOF_TIMESTAMPING_TX_SOFTWARE)。

相关内容