Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。
想要改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
3年前关闭。
Improve this question
我想在任何给定的Linux机器上验证是否支持PCI直通。经过一番谷歌搜索后,我发现我宁愿检查是否支持IOMMU,我通过运行以下命令进行了检查:
如果它支持IOMMU(而不是IOMMUv2),我将得到:
...在哪里寻找
现在,如果机器已经运行了好几天而没有重新引导,那么使用先前的命令,该第一条消息
当该消息从日志中消失时,是否有任何方法可以检查IOMMU支持?
仅对已启用的IOMMU进行注册。 DMAR:
AMD IOMMU:
英特尔:
使用4.11 linux内核版本时,
想要改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
3年前关闭。
Improve this question
我想在任何给定的Linux机器上验证是否支持PCI直通。经过一番谷歌搜索后,我发现我宁愿检查是否支持IOMMU,我通过运行以下命令进行了检查:
dmesg | grep IOMMU
如果它支持IOMMU(而不是IOMMUv2),我将得到:
IOMMU
[ 0.000000] DMAR: IOMMU enabled
[ 0.049734] DMAR-IR: IOAPIC id 8 under DRHD base 0xfbffc000 IOMMU 0
[ 0.049735] DMAR-IR: IOAPIC id 9 under DRHD base 0xfbffc000 IOMMU 0
[ 1.286567] AMD IOMMUv2 driver by Joerg Roedel <[email protected]>
[ 1.286568] AMD IOMMUv2 functionality not available on this system
...在哪里寻找
DMAR: IOMMU enabled
。现在,如果机器已经运行了好几天而没有重新引导,那么使用先前的命令,该第一条消息
[ 0.000000] DMAR: IOMMU enabled
可能不再显示在日志中。当该消息从日志中消失时,是否有任何方法可以检查IOMMU支持?
最佳答案
自2014年以来,启用的iommu在/sys(sysfs)特殊文件系统中注册为iommu
类(记录在ABI/testing/sysfs-class-iommu上):
https://patchwork.kernel.org/patch/4345491/“[2/3] iommu/intel:利用IOMMU sysfs支持”-2014年6月12日
在较新的内核中,代码是iommu_device_create
(约为4.5的http://elixir.free-electrons.com/linux/v4.5/ident/iommu_device_create)或http://elixir.free-electrons.com/linux/v4.11/ident/iommu_device_sysfs_add(约为referenced in many IOMMU drivers)。
/*
* Create an IOMMU device and return a pointer to it. IOMMU specific
* attributes can be provided as an attribute group, allowing a unique
* namespace per IOMMU type.
*/
struct device *iommu_device_create(struct device *parent, void *drvdata,
const struct attribute_group **groups,
const char *fmt, ...)
仅对已启用的IOMMU进行注册。 DMAR:
if (intel_iommu_enabled) {
iommu->iommu_dev = iommu_device_create(NULL, iommu,
intel_iommu_groups,
"%s", iommu->name);
AMD IOMMU:
static int iommu_init_pci(struct amd_iommu *iommu)
{ ...
if (!iommu->dev)
return -ENODEV;
...
iommu->iommu_dev = iommu_device_create(&iommu->dev->dev, iommu,
amd_iommu_groups, "ivhd%d",
iommu->index);
英特尔:
int __init intel_iommu_init(void)
{ ...
pr_info("Intel(R) Virtualization Technology for Directed I/O\n");
...
for_each_active_iommu(iommu, drhd)
iommu->iommu_dev = iommu_device_create(NULL, iommu,
intel_iommu_groups,
"%s", iommu->name);
使用4.11 linux内核版本时,
iommu_device_sysfs_add
是ojit_a,因此检查/sys/class/iommu比通过解析iommu_device_sysfs_add
输出或在dmesg
或/var/log/kern.log
中搜索特定于驱动程序的启用消息更好(更通用)以编程方式检测已启用的IOMMU:10-06 14:56