-----Original Message----- > Date: Fri, 01 Dec 2017 09:52:26 +0100 > From: Thomas Monjalon <tho...@monjalon.net> > To: Jerin Jacob <jerin.ja...@caviumnetworks.com> > Cc: dev@dpdk.org, chao...@linux.vnet.ibm.com > Subject: Re: [dpdk-dev] [PATCH] eal/x86: get hypervisor name > > 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.
At least on non x86, it is not exposed as CPU flags. IMO, *hypervisor*.h file makes more sense rather than rte_cpuflags.h. > > > 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). In my view this use case needed by the DPDK "implementation" not the "application". So internal API makes more sense to me. > We can adapt the device management policy on Hyper-V without waiting a device > scan. I am not sure about this? Looks like a candidate for library implementation not for the "application"