From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by dpdk.org (Postfix) with ESMTP id E33921B1A1 for ; Thu, 5 Oct 2017 10:44:35 +0200 (CEST) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga105.jf.intel.com with ESMTP; 05 Oct 2017 01:44:34 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.42,480,1500966000"; d="scan'208";a="906988607" Received: from dhunt5-mobl1.ger.corp.intel.com (HELO [10.237.220.44]) ([10.237.220.44]) by FMSMGA003.fm.intel.com with ESMTP; 05 Oct 2017 01:44:33 -0700 To: santosh , dev@dpdk.org Cc: konstantin.ananyev@intel.com, jingjing.wu@intel.com, Nemanja Marjanovic , Rory Sexton References: <1507108515-186477-1-git-send-email-david.hunt@intel.com> <1507130720-48891-1-git-send-email-david.hunt@intel.com> <1507130720-48891-4-git-send-email-david.hunt@intel.com> From: "Hunt, David" Message-ID: Date: Thu, 5 Oct 2017 09:44:32 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US Subject: Re: [dpdk-dev] [PATCH v5 3/9] examples/vm_power_mgr: add vcpu to pcpu mapping X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 05 Oct 2017 08:44:36 -0000 Hi Santosh, On 4/10/2017 4:58 PM, santosh wrote: > Hi David, > > > On Wednesday 04 October 2017 08:55 PM, David Hunt wrote: >> Signed-off-by: Nemanja Marjanovic >> Signed-off-by: Rory Sexton >> Signed-off-by: David Hunt >> --- >> examples/vm_power_manager/channel_manager.c | 62 +++++++++++++++++++++++++++++ >> examples/vm_power_manager/channel_manager.h | 25 ++++++++++++ >> 2 files changed, 87 insertions(+) >> >> diff --git a/examples/vm_power_manager/channel_manager.c b/examples/vm_power_manager/channel_manager.c >> index e068ae2..03fa626 100644 >> --- a/examples/vm_power_manager/channel_manager.c >> +++ b/examples/vm_power_manager/channel_manager.c >> @@ -574,6 +574,68 @@ set_channel_status(const char *vm_name, unsigned *channel_list, >> return num_channels_changed; >> } >> >> +void >> +get_all_vm(int *num_vm, int *num_cpu) >> +{ > nits: > s/*num_cpu/*num_vcpu Sure. Makes it more readable. >> + >> + virNodeInfo node_info; >> + virDomainPtr *domptr; >> + uint64_t mask; >> + int i, ii, numVcpus[MAX_VCPUS], cpu, n_vcpus; >> + unsigned int jj; >> + const char *vm_name; >> + unsigned int flags = VIR_CONNECT_LIST_DOMAINS_RUNNING | >> + VIR_CONNECT_LIST_DOMAINS_PERSISTENT; >> + unsigned int flag = VIR_DOMAIN_VCPU_CONFIG; >> + > nits: > Perhaps add more clear name example: > s/flags/conn_flags > s/flag/domain_flags domain_flags sounds good to me. >> + >> + memset(global_cpumaps, 0, CHANNEL_CMDS_MAX_CPUS*global_maplen); >> + if (virNodeGetInfo(global_vir_conn_ptr, &node_info)) >> + RTE_LOG(ERR, CHANNEL_MANAGER, "Unable to retrieve node Info\n"); >> + > Should return from here.. since node info not retrieve ops errored out. Sure. >> + /* Returns number of pcpus */ >> + global_n_host_cpus = (unsigned int)node_info.cpus; >> + >> + /* Returns number of active domains */ >> + *num_vm = virConnectListAllDomains(global_vir_conn_ptr, &domptr, flags); >> + if (*num_vm <= 0) >> + RTE_LOG(ERR, CHANNEL_MANAGER, "No Active Domains Running\n"); >> + > ditto.. Sure. >> + for (i = 0; i < *num_vm; i++) { >> + >> + /* Get Domain Names */ >> + vm_name = virDomainGetName(domptr[i]); >> + lvm_info[i].vm_name = vm_name; >> + >> + /* Get Number of Vcpus */ >> + numVcpus[i] = virDomainGetVcpusFlags(domptr[i], flag); >> + >> + /* Get Number of VCpus & VcpuPinInfo */ >> + n_vcpus = virDomainGetVcpuPinInfo(domptr[i], >> + numVcpus[i], global_cpumaps, >> + global_maplen, flag); >> + >> + if ((int)n_vcpus > 0) { >> + *num_cpu = n_vcpus; >> + lvm_info[i].num_cpus = n_vcpus; >> + } >> + >> + /* Save pcpu in use by libvirt VMs */ >> + for (ii = 0; ii < n_vcpus; ii++) { >> + mask = 0; >> + for (jj = 0; jj < global_n_host_cpus; jj++) { >> + if (VIR_CPU_USABLE(global_cpumaps, >> + global_maplen, ii, jj) > 0) { >> + mask |= 1ULL << jj; >> + } >> + } >> + ITERATIVE_BITMASK_CHECK_64(mask, cpu) { >> + lvm_info[i].pcpus[ii] = cpu; >> + } >> + } >> + } >> +} >> + >> int >> get_info_vm(const char *vm_name, struct vm_info *info) >> { >> diff --git a/examples/vm_power_manager/channel_manager.h b/examples/vm_power_manager/channel_manager.h >> index 47c3b9c..788c1e6 100644 >> --- a/examples/vm_power_manager/channel_manager.h >> +++ b/examples/vm_power_manager/channel_manager.h >> @@ -66,6 +66,17 @@ struct sockaddr_un _sockaddr_un; >> #define UNIX_PATH_MAX sizeof(_sockaddr_un.sun_path) >> #endif >> >> +#define MAX_VMS 4 >> +#define MAX_VCPUS 20 >> + >> + >> +struct libvirt_vm_info { >> + const char *vm_name; >> + unsigned int pcpus[MAX_VCPUS]; >> + uint8_t num_cpus; >> +}; >> + >> +struct libvirt_vm_info lvm_info[MAX_VMS]; >> /* Communication Channel Status */ >> enum channel_status { CHANNEL_MGR_CHANNEL_DISCONNECTED = 0, >> CHANNEL_MGR_CHANNEL_CONNECTED, >> @@ -319,6 +330,20 @@ int set_channel_status(const char *vm_name, unsigned *channel_list, >> */ >> int get_info_vm(const char *vm_name, struct vm_info *info); >> >> +/** >> + * Populates a table with all domains running and their physical cpu. >> + * All information is gathered through libvirt api. >> + * >> + * @param noVms >> + * modified to store number of active VMs >> + * >> + * @param noVcpus >> + modified to store number of vcpus active >> + * >> + * @return >> + * void >> + */ >> +void get_all_vm(int *noVms, int *noVcpus); > nits: perhaps, > void > get_all_vm(int *num_vm, int *num_vcpu) > Thanks. Agreed, what you suggest is a more common naming convention. Thanks, Dave. >> #ifdef __cplusplus >> } >> #endif