在虚拟化场景下,SR-IOV(Single Root I/O Virtualization)是一个很常用的功能,通过SR-IOV,一个物理的设备(Physical Function),可以派生出很多虚拟设备(Virtual Function),这些虚拟设备具有简单的PCIe功能。以网卡为例,通过SR-IOV,我们可以将一块网卡,虚拟化成很多块网卡,这些虚拟出来的网卡,有自己独立的PCIe地址,中断,配置空间等,这些虚拟出来的网卡,可以作为单独的PCIe设备被attach到虚拟机中,实现网络功能,当然,场景并不局限于VM。
这里先不关注SR-IOV的应用场景,或者其实现原理,而是关心一个简单的问题:如何设置SR-IOV,并且能稳定的实现开机启动时就设置好呢?
这里以网卡为例,假设要开启SR-IOV的网卡名字为eth0,文档里会提示你echo 7 > /sys/class/net/eth0/device/sriov_numvfs。在系统启动完成之后,这么做肯定是没有问题。问题是,在系统启动阶段,这么做是不是可以呢?红帽的文档第 8 章 配置 SR-IOV 网络通过rc.local来实现:
但是呢,文档里也提示了:
注意
因为额外的 systemd,Red Hat Enterprise Linux 将会并行启动服务,而不是依次启动它们。这意味着,rc.local 在引导过程中被执行的位置是不固定的。因此,一些不可预见的情况可能会出现,我们不推荐使用这个方法。
也就是说,因为syste