01/12/2017 09:12, Jerin Jacob: > -----Original Message----- > > Date: Thu, 30 Nov 2017 22:47:20 +0100 > > From: Thomas Monjalon <tho...@monjalon.net> > > To: dev@dpdk.org > > Subject: [dpdk-dev] [PATCH] eal/x86: get hypervisor name > > X-Mailer: git-send-email 2.15.0 > > > > The CPUID instruction is catched by hypervisor which can return > > a flag indicating one is running, and its name. > > > > Suggested-by: Stephen Hemminger <sthem...@microsoft.com> > > Signed-off-by: Thomas Monjalon <tho...@monjalon.net> > > --- > > warning: to be tested > > --- > > lib/librte_eal/common/arch/arm/rte_cpuflags.c | 6 +++++ > > lib/librte_eal/common/arch/ppc_64/rte_cpuflags.c | 6 +++++ > > lib/librte_eal/common/arch/x86/rte_cpuflags.c | 30 > > ++++++++++++++++++++++ > > .../common/include/arch/x86/rte_cpuflags.h | 1 + > > .../common/include/generic/rte_cpuflags.h | 14 ++++++++++ > > lib/librte_eal/rte_eal_version.map | 9 ++++++- > > 6 files changed, 65 insertions(+), 1 deletion(-) > > RTE_CPUFLAG_FPU, /**< FPU */ > > diff --git a/lib/librte_eal/common/include/generic/rte_cpuflags.h > > b/lib/librte_eal/common/include/generic/rte_cpuflags.h > > index c1c5551fc..3832fb851 100644 > > --- a/lib/librte_eal/common/include/generic/rte_cpuflags.h > > +++ b/lib/librte_eal/common/include/generic/rte_cpuflags.h > > @@ -93,4 +93,18 @@ rte_cpu_check_supported(void); > > int > > rte_cpu_is_supported(void); > > > > +enum rte_hypervisor { > > + RTE_HYPERVISOR_NONE, > > + RTE_HYPERVISOR_KVM, > > + RTE_HYPERVISOR_HYPERV, > > + RTE_HYPERVISOR_VMWARE, > > + RTE_HYPERVISOR_UNKNOWN > > +}; > > + > > +/** > > + * Get the type of hypervisor it is running on. > > + */ > > +enum rte_hypervisor > > +rte_hypervisor_get_name(void); > > Cc: chao...@linux.vnet.ibm.com > > IMO, cpu_flag area is the not the correct abstraction to get > the hypervisor name. It is x86 specific. I think, correct > usage will be to call hypervisor specific APIs like KVM_GET_API_VERSION > https://lwn.net/Articles/658511/
I think it is quite logical because the CPU is virtualized by the hypervisor. It is similar to get the CPU model, but for a different ring level. > BTW, What is the need for an DPDK application to know the > hypervisor name? What action an DPDK application should > take based on hypervisor name? if is not interest of data plane > application why it needs to be abstracted in DPDK? I see two usages for now. We can automate the use of the specific VMware TSC (it is an option currently). We can adapt the device management policy on Hyper-V without waiting a device scan.