From nobody Tue May 7 06:26:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1498921370617628.6312907424393; Sat, 1 Jul 2017 08:02:50 -0700 (PDT) Received: from localhost ([::1]:54829 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dRJv7-0004m4-1a for importer@patchew.org; Sat, 01 Jul 2017 11:02:49 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35615) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dRJtT-0003s3-D7 for qemu-devel@nongnu.org; Sat, 01 Jul 2017 11:01:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dRJtP-0003pX-9V for qemu-devel@nongnu.org; Sat, 01 Jul 2017 11:01:07 -0400 Received: from mga05.intel.com ([192.55.52.43]:46592) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dRJtO-0003nX-Uz for qemu-devel@nongnu.org; Sat, 01 Jul 2017 11:01:03 -0400 Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga105.fm.intel.com with ESMTP; 01 Jul 2017 08:00:58 -0700 Received: from unknown (HELO localhost.localdomain.sh.intel.com) ([10.239.48.64]) by fmsmga001.fm.intel.com with ESMTP; 01 Jul 2017 08:00:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,291,1496127600"; d="scan'208";a="1167015451" From: Benyu Xu To: qemu-devel@nongnu.org Date: Sat, 1 Jul 2017 22:57:08 +0800 Message-Id: <1498921030-23255-2-git-send-email-benyux.xu@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1498921030-23255-1-git-send-email-benyux.xu@intel.com> References: <1498921030-23255-1-git-send-email-benyux.xu@intel.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 192.55.52.43 Subject: [Qemu-devel] [PATCH 1/3] add some vcpu-pin related functions. X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: tianyu.lan@intel.com, haozhong.zhang@intel.com, kevin.tian@intel.com, crosthwaite.peter@gmail.com, xudong.hao@intel.com, eddie.dong@intel.com, binx.wu@intel.com, gordon.jin@intel.com, benyux.xu@intel.com, pbonzini@redhat.com, hao.l.li@intel.com, benjamin_xby@163.com, hongbo.wang@intel.com, rth@twiddle.net Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Benyu Xu --- cpus.c | 126 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ include/qom/cpu.h | 9 ++++ include/sysemu/cpus.h | 2 + 3 files changed, 137 insertions(+) diff --git a/cpus.c b/cpus.c index 14bb8d5..40c3abf 100644 --- a/cpus.c +++ b/cpus.c @@ -1648,6 +1648,132 @@ void cpu_remove(CPUState *cpu) qemu_cpu_kick(cpu); } =20 +int get_pcpu_num(bool pin_auto, int *pcpu_id_array) +{ + int pcpu_num =3D 0; +#ifdef _GNU_SOURCE + int pcpu_range =3D 1024; + int pcpu_id =3D 0; + int ret; + cpu_set_t *pcpu_set; + size_t setsize; + + pcpu_set =3D CPU_ALLOC(pcpu_range); + if (pcpu_set =3D=3D NULL) { + pcpu_num =3D -1; + return pcpu_num; + } + + setsize =3D CPU_ALLOC_SIZE(pcpu_range); + + for ( ; ; ) { + CPU_ZERO_S(setsize, pcpu_set); + ret =3D sched_getaffinity(0, setsize, pcpu_set); + if (ret < 0 && errno =3D=3D EINVAL && pcpu_range < 131072) { + CPU_FREE(pcpu_set); + pcpu_range *=3D 2; + pcpu_set =3D CPU_ALLOC(pcpu_range); + if (pcpu_set =3D=3D NULL) { + pcpu_num =3D -1; + return pcpu_num; + } + setsize =3D CPU_ALLOC_SIZE(pcpu_range); + continue; + } + + if (ret =3D=3D 0) { + for ( ; pcpu_id < 131072; pcpu_id++) { + if (CPU_ISSET_S(pcpu_id, setsize, pcpu_set)) { + pcpu_num++; + if (pin_auto =3D=3D true) { + pcpu_id_array[0] =3D pcpu_num; + pcpu_id_array[pcpu_num] =3D pcpu_id; + } + } + } + CPU_FREE(pcpu_set); + return pcpu_num; + } + CPU_FREE(pcpu_set); + } +#else + pcpu_num =3D -2; + return pcpu_num; +#endif +} + +void cpu_pin(CPUState *cpu, int pcpu_id) +{ + cpu_set_t *pcpu_id_mask; + size_t masksize; + pid_t vcpu_pid; + int num_cpus; + + if (pcpu_id =3D=3D 0) { + num_cpus =3D pcpu_id + 1; + } else { + num_cpus =3D pcpu_id; + } + + pcpu_id_mask =3D CPU_ALLOC(num_cpus); + if (pcpu_id_mask =3D=3D NULL) { + error_report("warning: can not alloc cpu set! pcpu #%d", + pcpu_id); + return ; + } + masksize =3D CPU_ALLOC_SIZE(num_cpus); + CPU_ZERO_S(masksize, pcpu_id_mask); + CPU_SET_S(pcpu_id, masksize, pcpu_id_mask); + + vcpu_pid =3D cpu->thread_id; + + if (sched_setaffinity(vcpu_pid, masksize, pcpu_id_mask) !=3D 0) { + error_report("warning: set affinity failed! vcpu pid=3D%d, pcpu #%= d", + vcpu_pid, pcpu_id); + CPU_FREE(pcpu_id_mask); + return ; + } + + if (sched_getaffinity(vcpu_pid, masksize, pcpu_id_mask) !=3D 0) { + error_report("warning: get affinity failed! vcpu pid=3D%d, pcpu #%= d", + vcpu_pid, pcpu_id); + CPU_FREE(pcpu_id_mask); + return ; + } + + CPU_FREE(pcpu_id_mask); +} + +/* * + * pcpu_id_array: content the host processor's id array to pin + * pcpu_id_array[0]: the processor count + * pcpu_id_array[1...]: the processor id to pin + * */ +void pin_all_vcpus(int smp_cpus_num, const int *pcpu_id_array, Error **err= p) +{ + int pcpu_id =3D 0; + int pcpu_num =3D pcpu_id_array[0]; + int vcpu_id =3D 0; + CPUState *cpu; + + if (pcpu_num <=3D 0) { + return; + } + + if (smp_cpus_num > pcpu_num) { + error_setg(errp, + "pcpu id list only has %d pcpu(s), less than smp_cpus_num = %d", + pcpu_num, smp_cpus_num); + return; + } + + CPU_FOREACH(cpu) { + pcpu_id =3D pcpu_id_array[vcpu_id + 1]; + cpu_pin(cpu, pcpu_id); + vcpu_id++; + } +} + void cpu_remove_sync(CPUState *cpu) { cpu_remove(cpu); diff --git a/include/qom/cpu.h b/include/qom/cpu.h index 89ddb68..8f14295 100644 --- a/include/qom/cpu.h +++ b/include/qom/cpu.h @@ -869,6 +869,15 @@ void cpu_exit(CPUState *cpu); void cpu_resume(CPUState *cpu); =20 /** + * cpu_pin: + * @cpu: The vitual CPU to pin. + * @pcpu_id: The host's physical or logical processor's id. + * + * pin CPU, i.e. set the CPU's affinity. + */ +void cpu_pin(CPUState *cpu, int pcpu_id); + +/** * cpu_remove: * @cpu: The CPU to remove. * diff --git a/include/sysemu/cpus.h b/include/sysemu/cpus.h index 731756d..513a0c6 100644 --- a/include/sysemu/cpus.h +++ b/include/sysemu/cpus.h @@ -7,6 +7,8 @@ bool qemu_in_vcpu_thread(void); void qemu_init_cpu_loop(void); void resume_all_vcpus(void); +int get_pcpu_num(bool pin_default, int *pcpu_id_array); +void pin_all_vcpus(int smp_cpu_num, const int *pcpu_id_array, Error **errp= ); void pause_all_vcpus(void); void cpu_stop_current(void); void cpu_ticks_init(void); --=20 1.8.3.1 From nobody Tue May 7 06:26:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1498921367802504.3226867643218; Sat, 1 Jul 2017 08:02:47 -0700 (PDT) Received: from localhost ([::1]:54828 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dRJv1-0004jB-8d for importer@patchew.org; Sat, 01 Jul 2017 11:02:43 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35609) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dRJtT-0003s0-Bz for qemu-devel@nongnu.org; Sat, 01 Jul 2017 11:01:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dRJtO-0003oq-UX for qemu-devel@nongnu.org; Sat, 01 Jul 2017 11:01:07 -0400 Received: from mga05.intel.com ([192.55.52.43]:57356) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dRJtO-0003hL-Mq for qemu-devel@nongnu.org; Sat, 01 Jul 2017 11:01:02 -0400 Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga105.fm.intel.com with ESMTP; 01 Jul 2017 08:01:01 -0700 Received: from unknown (HELO localhost.localdomain.sh.intel.com) ([10.239.48.64]) by fmsmga001.fm.intel.com with ESMTP; 01 Jul 2017 08:00:58 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,291,1496127600"; d="scan'208";a="1167015471" From: Benyu Xu To: qemu-devel@nongnu.org Date: Sat, 1 Jul 2017 22:57:09 +0800 Message-Id: <1498921030-23255-3-git-send-email-benyux.xu@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1498921030-23255-1-git-send-email-benyux.xu@intel.com> References: <1498921030-23255-1-git-send-email-benyux.xu@intel.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 192.55.52.43 Subject: [Qemu-devel] [PATCH 2/3] vcpu pin: parameters parse and execution. X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: tianyu.lan@intel.com, haozhong.zhang@intel.com, kevin.tian@intel.com, crosthwaite.peter@gmail.com, xudong.hao@intel.com, eddie.dong@intel.com, binx.wu@intel.com, gordon.jin@intel.com, benyux.xu@intel.com, pbonzini@redhat.com, hao.l.li@intel.com, benjamin_xby@163.com, hongbo.wang@intel.com, rth@twiddle.net Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Benyu Xu --- vl.c | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 115 insertions(+) diff --git a/vl.c b/vl.c index 36ff3f4..8c5dd25 100644 --- a/vl.c +++ b/vl.c @@ -167,6 +167,7 @@ int smp_cpus =3D 1; int max_cpus =3D 1; int smp_cores =3D 1; int smp_threads =3D 1; +int pcpu_id_array[131072 + 2] =3D {0}; /* 131072 =3D 1024 * 128 */ int acpi_enabled =3D 1; int no_hpet =3D 0; int fd_bootchk =3D 1; @@ -1270,6 +1271,106 @@ static void smp_parse(QemuOpts *opts) } } =20 +static void vcpupin_parse(const char *pcpu_id_list, const int smp_cpus_num) +{ + long pcpu_id; + int pcpu_num =3D 0; + bool pin_auto =3D false; + bool id_is_range =3D false; + long id_range_left; + long id_range_right; + int host_cpu_num; + const char *tmp_id_list =3D pcpu_id_list; + int ret =3D 0; + + if (!pcpu_id_list) { + return; + } + + if (strcmp(pcpu_id_list, "auto") =3D=3D 0) { + pin_auto =3D true; + } + + host_cpu_num =3D get_pcpu_num(pin_auto, pcpu_id_array); + if (host_cpu_num <=3D 0) { + error_report("cannot determine host cpu number"); + exit(1); + } + + if (smp_cpus_num > host_cpu_num) { + error_report("host can serve only %d cpus, less than smp_cpus_num = %d", + host_cpu_num, smp_cpus_num); + exit(1); + } + + if (pin_auto =3D=3D true) { + return; + } + + if (isdigit(tmp_id_list[0]) =3D=3D 0) { + error_report("invalid pcpu id list %s", pcpu_id_list); + error_report("pcpu id list should be \"auto\" or begin by digit"); + exit(1); + } + + while (tmp_id_list[0] !=3D '\0') { + if (isdigit(tmp_id_list[0]) =3D=3D 0 && tmp_id_list[0] !=3D ',' && + tmp_id_list[0] !=3D '-') { + error_report("invalid pcpu id list %s", pcpu_id_list); + error_report("pcpu id list only accept digit or ',' or '-'"); + exit(1); + } + tmp_id_list++; + } + tmp_id_list =3D pcpu_id_list; + + while (tmp_id_list) { + ret =3D qemu_strtol(tmp_id_list, &tmp_id_list, 10, &pcpu_id); + if (ret =3D=3D ERANGE || pcpu_id < 0 || pcpu_id >=3D host_cpu_num)= { + error_report("pcpu id %ld is out of range", pcpu_id); + exit(1); + } + + if (id_is_range =3D=3D true) { + id_range_right =3D pcpu_id; + if (id_range_right <=3D id_range_left) { + error_report("invalid pcpu id list [%ld-%ld]", + id_range_left, id_range_right); + exit(1); + } + for (; id_range_left <=3D id_range_right; id_range_left++) { + pcpu_id_array[0] =3D pcpu_num; + pcpu_id_array[pcpu_num] =3D id_range_left; + pcpu_num++; + } + pcpu_num--; + } else { + pcpu_num++; + pcpu_id_array[0] =3D pcpu_num; + pcpu_id_array[pcpu_num] =3D pcpu_id; + } + + if (tmp_id_list[0] =3D=3D '\0') { + break; + } else if (tmp_id_list[0] =3D=3D '-') { + id_is_range =3D true; + id_range_left =3D pcpu_id; + } else { + id_is_range =3D false; + } + tmp_id_list++; + + if (tmp_id_list[0] =3D=3D '\0') { + error_report("invalid pcpu id list %s", pcpu_id_list); + error_report("pcpu id list should be end by digit"); + exit(1); + } else if (isdigit(tmp_id_list[0]) =3D=3D 0) { + error_report("invalid pcpu id list %s", pcpu_id_list); + exit(1); + } + } +} + static void realtime_init(void) { if (enable_mlock) { @@ -3024,6 +3125,9 @@ int main(int argc, char **argv, char **envp) Error *main_loop_err =3D NULL; Error *err =3D NULL; bool list_data_dirs =3D false; + + const char *pcpu_id_list =3D NULL; + typedef struct BlockdevOptions_queue { BlockdevOptions *bdo; Location loc; @@ -3810,6 +3914,9 @@ int main(int argc, char **argv, char **envp) exit(1); } break; + case QEMU_OPTION_vcpupin: + pcpu_id_list =3D optarg; + break; case QEMU_OPTION_vnc: vnc_parse(optarg, &error_fatal); break; @@ -4222,6 +4329,8 @@ int main(int argc, char **argv, char **envp) =20 smp_parse(qemu_opts_find(qemu_find_opts("smp-opts"), NULL)); =20 + vcpupin_parse(pcpu_id_list, smp_cpus); + machine_class->max_cpus =3D machine_class->max_cpus ?: 1; /* Default t= o UP */ if (max_cpus > machine_class->max_cpus) { error_report("Number of SMP CPUs requested (%d) exceeds max CPUs " @@ -4621,6 +4730,12 @@ int main(int argc, char **argv, char **envp) =20 machine_run_board_init(current_machine); =20 + pin_all_vcpus(smp_cpus, pcpu_id_array, &err); + if (err) { + error_report_err(err); + exit(1); + } + realtime_init(); =20 soundhw_init(); --=20 1.8.3.1 From nobody Tue May 7 06:26:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1498921483255630.0460140178955; Sat, 1 Jul 2017 08:04:43 -0700 (PDT) Received: from localhost ([::1]:54839 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dRJwu-0006Ym-2D for importer@patchew.org; Sat, 01 Jul 2017 11:04:40 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35611) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dRJtT-0003s2-CJ for qemu-devel@nongnu.org; Sat, 01 Jul 2017 11:01:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dRJtR-0003sN-K9 for qemu-devel@nongnu.org; Sat, 01 Jul 2017 11:01:07 -0400 Received: from mga05.intel.com ([192.55.52.43]:57206) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dRJtR-0003rM-AT for qemu-devel@nongnu.org; Sat, 01 Jul 2017 11:01:05 -0400 Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga105.fm.intel.com with ESMTP; 01 Jul 2017 08:01:04 -0700 Received: from unknown (HELO localhost.localdomain.sh.intel.com) ([10.239.48.64]) by fmsmga001.fm.intel.com with ESMTP; 01 Jul 2017 08:01:01 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,291,1496127600"; d="scan'208";a="1167015492" From: Benyu Xu To: qemu-devel@nongnu.org Date: Sat, 1 Jul 2017 22:57:10 +0800 Message-Id: <1498921030-23255-4-git-send-email-benyux.xu@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1498921030-23255-1-git-send-email-benyux.xu@intel.com> References: <1498921030-23255-1-git-send-email-benyux.xu@intel.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 192.55.52.43 Subject: [Qemu-devel] [PATCH 3/3] add option -vcpupin into qemu-options. X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: tianyu.lan@intel.com, haozhong.zhang@intel.com, kevin.tian@intel.com, crosthwaite.peter@gmail.com, xudong.hao@intel.com, eddie.dong@intel.com, binx.wu@intel.com, gordon.jin@intel.com, benyux.xu@intel.com, pbonzini@redhat.com, hao.l.li@intel.com, benjamin_xby@163.com, hongbo.wang@intel.com, rth@twiddle.net Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Benyu Xu --- qemu-options.hx | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/qemu-options.hx b/qemu-options.hx index 297bd8a..0c2cec3 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -141,6 +141,25 @@ given, the total number of CPUs @var{n} can be omitted= . @var{maxcpus} specifies the maximum number of hotpluggable CPUs. ETEXI =20 +DEF("vcpupin", HAS_ARG, QEMU_OPTION_vcpupin, + "-vcpupin [pcpu_id_list]\n" + " use the host's physical or logical processor(pcpu) id= \n" + " to made a pcpu id list to set cpu affinity.\n" + " here use ',' to seperate the single id or id sequence= ,\n" + " use '-' as a id sequence's connector,\n" + " eg. qemu ... -smp 8 -vcpupin 0,2,4,6-10 ... \n" + " this means qemu will pin 8 vcpus one by one and 1:1 t= o\n" + " pcpu 0,2,4,6,7,8,9,10\n" + " if pcpu_id_list=3D\"auto\", it means the pcpu id list= is\n" + " 0,1,...,[smp_cpu_num-1]\n", QEMU_ARCH_ALL) +STEXI +@item -vcpupin @var{pcpu_id_list} +@findex -vcpupin +Pin the vcpus to pcpus(set CPU affinity). Use pcpus' id 0,1,2,3...etc. to +make a valid pcpu id list, the vcpus will sequentially pin to the pcpus of +this list 1:1 , this means we should use the @option{-smp} to allocate vcp= us. +ETEXI + DEF("numa", HAS_ARG, QEMU_OPTION_numa, "-numa node[,mem=3Dsize][,cpus=3Dfirstcpu[-lastcpu]][,nodeid=3Dnode]\n" "-numa node[,memdev=3Did][,cpus=3Dfirstcpu[-lastcpu]][,nodeid=3Dnode]\= n" --=20 1.8.3.1