我有两个 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
)。