From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dario Faggioli Subject: [PATCH 2 of 3] libxl: allow for specifying the CPU affinity in the config file. Date: Wed, 11 Jan 2012 18:00:31 +0000 Message-ID: <1326304831.12973.3.camel@Abyss> References: <1326304198.2401.6.camel@Abyss> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============9085282458491062159==" Return-path: In-Reply-To: <1326304198.2401.6.camel@Abyss> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel Cc: "Ian.Campbell" , Ian Jackson List-Id: xen-devel@lists.xenproject.org --===============9085282458491062159== Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-b6KUWioMSlndeAHaI1gC" --=-b6KUWioMSlndeAHaI1gC Content-Type: multipart/mixed; boundary="=-bOAc/zXSoQcOhM1YSutG" --=-bOAc/zXSoQcOhM1YSutG Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Enable CPU affinity specification in a VM's config file with the exact syntax `xl vcpu-pin' provides. Signed-off-by: Dario Faggioli diff -r 9ce68a4036b1 tools/libxl/libxl_create.c --- a/tools/libxl/libxl_create.c Wed Jan 11 17:38:04 2012 +0000 +++ b/tools/libxl/libxl_create.c Wed Jan 11 17:40:45 2012 +0000 @@ -78,6 +78,8 @@ int libxl_init_build_info(libxl_ctx *ctx memset(b_info, '\0', sizeof(*b_info)); b_info->max_vcpus =3D 1; b_info->cur_vcpus =3D 1; + if (libxl_cpumap_alloc(ctx, &b_info->cpumap)) + return ERROR_NOMEM; b_info->max_memkb =3D 32 * 1024; b_info->target_memkb =3D b_info->max_memkb; b_info->disable_migrate =3D 0; diff -r 9ce68a4036b1 tools/libxl/libxl_dom.c --- a/tools/libxl/libxl_dom.c Wed Jan 11 17:38:04 2012 +0000 +++ b/tools/libxl/libxl_dom.c Wed Jan 11 17:40:45 2012 +0000 @@ -72,8 +72,14 @@ int libxl__build_pre(libxl__gc *gc, uint libxl_domain_build_info *info, libxl__domain_build_state *st= ate) { libxl_ctx *ctx =3D libxl__gc_owner(gc); - int tsc_mode; + int i, tsc_mode; xc_domain_max_vcpus(ctx->xch, domid, info->max_vcpus); + for (i =3D 0; i < info->max_vcpus; i++) { + if (libxl_set_vcpuaffinity(ctx, domid, i, &info->cpumap) =3D=3D -1= ) { + LIBXL__LOG(ctx, LIBXL__LOG_WARNING, "libxl_set_vcpuaffinit= y failed. " + "Going ahead without setting affinity for cpu %= d.\n", i); + } + } xc_domain_setmaxmem(ctx->xch, domid, info->target_memkb + LIBXL_MAXMEM= _CONSTANT); if (info->type =3D=3D LIBXL_DOMAIN_TYPE_PV) xc_domain_set_memmap_limit(ctx->xch, domid, diff -r 9ce68a4036b1 tools/libxl/libxl_types.idl --- a/tools/libxl/libxl_types.idl Wed Jan 11 17:38:04 2012 +0000 +++ b/tools/libxl/libxl_types.idl Wed Jan 11 17:40:45 2012 +0000 @@ -162,6 +162,7 @@ libxl_domain_create_info =3D Struct("domai libxl_domain_build_info =3D Struct("domain_build_info",[ ("max_vcpus", integer), ("cur_vcpus", integer), + ("cpumap", libxl_cpumap), ("tsc_mode", libxl_tsc_mode), ("max_memkb", uint32), ("target_memkb", uint32), diff -r 9ce68a4036b1 tools/libxl/xl_cmdimpl.c --- a/tools/libxl/xl_cmdimpl.c Wed Jan 11 17:38:04 2012 +0000 +++ b/tools/libxl/xl_cmdimpl.c Wed Jan 11 17:40:45 2012 +0000 @@ -288,16 +288,24 @@ static void dolog(const char *file, int=20 libxl_write_exactly(NULL, logfile, s, rc, NULL, NULL); } =20 +static void print_bitmap(uint8_t *map, int maplen, FILE *stream); + static void printf_info(int domid, libxl_domain_config *d_config, libxl_device_model_info *dm_info) { - int i; + int i, nr_cpus =3D -1; libxl_dominfo info; + libxl_physinfo physinfo; =20 libxl_domain_create_info *c_info =3D &d_config->c_info; libxl_domain_build_info *b_info =3D &d_config->b_info; =20 + if (libxl_get_physinfo(ctx, &physinfo) =3D=3D 0) + nr_cpus =3D physinfo.nr_cpus; + else + fprintf(stderr, "libxl_physinfo failed.\n"); + printf("(domain\n\t(domid %d)\n", domid); printf("\t(create_info)\n"); printf("\t(hvm %d)\n", c_info->type =3D=3D LIBXL_DOMAIN_TYPE_HVM); @@ -328,6 +336,9 @@ static void printf_info(int domid, =20 printf("\t(build_info)\n"); printf("\t(max_vcpus %d)\n", b_info->max_vcpus); + printf("\t(CPU affinity "); + print_bitmap(b_info->cpumap.map, nr_cpus, stdout); + printf(")\n"); printf("\t(tsc_mode %s)\n", libxl_tsc_mode_to_string(b_info->tsc_mode)= ); printf("\t(max_memkb %d)\n", b_info->max_memkb); printf("\t(target_memkb %d)\n", b_info->target_memkb); @@ -569,6 +580,8 @@ static void split_string_into_string_lis free(s); } =20 +static int vcpupin_parse(char *cpu, libxl_cpumap *cpumap); + static void parse_config_data(const char *configfile_filename_report, const char *configfile_data, int configfile_len, @@ -661,6 +674,13 @@ static void parse_config_data(const char if (!xlu_cfg_get_long (config, "maxvcpus", &l, 0)) b_info->max_vcpus =3D l; =20 + if (!xlu_cfg_get_string (config, "cpus", &buf, 0)) { + char *buf2 =3D strdup(buf); + vcpupin_parse(buf2, &b_info->cpumap); + } else { + memset(b_info->cpumap.map, -1, b_info->cpumap.size); + } + if (!xlu_cfg_get_long (config, "memory", &l, 0)) { b_info->max_memkb =3D l * 1024; b_info->target_memkb =3D b_info->max_memkb; --=20 <> (Raistlin Majere) ------------------------------------------------------------------- Dario Faggioli, http://retis.sssup.it/people/faggioli Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK) PhD Candidate, ReTiS Lab, Scuola Superiore Sant'Anna, Pisa (Italy) --=-bOAc/zXSoQcOhM1YSutG Content-Disposition: attachment; filename="support-cpus-par-in-config-file.patch" Content-Type: text/x-patch; name="support-cpus-par-in-config-file.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 IyBIRyBjaGFuZ2VzZXQgcGF0Y2gNCiMgUGFyZW50IDljZTY4YTQwMzZiMWEwMWIxN2VjZjVkYjBi ZGU1YzExNDY1NWVjMGINCmxpYnhsOiBhbGxvdyBmb3Igc3BlY2lmeWluZyB0aGUgQ1BVIGFmZmlu aXR5IGluIHRoZSBjb25maWcgZmlsZS4NCg0KRW5hYmxlIENQVSBhZmZpbml0eSBzcGVjaWZpY2F0 aW9uIGluIGEgVk0ncyBjb25maWcgZmlsZSB3aXRoIHRoZQ0KZXhhY3Qgc3ludGF4IGB4bCB2Y3B1 LXBpbicgcHJvdmlkZXMuDQoNClNpZ25lZC1vZmYtYnk6IERhcmlvIEZhZ2dpb2xpIDxkYXJpby5m YWdnaW9saUBjaXRyaXguY29tPg0KDQpkaWZmIC1yIDljZTY4YTQwMzZiMSB0b29scy9saWJ4bC9s aWJ4bF9jcmVhdGUuYw0KLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMJV2VkIEphbiAx MSAxNzozODowNCAyMDEyICswMDAwDQorKysgYi90b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYwlX ZWQgSmFuIDExIDE3OjQwOjQ1IDIwMTIgKzAwMDANCkBAIC03OCw2ICs3OCw4IEBAIGludCBsaWJ4 bF9pbml0X2J1aWxkX2luZm8obGlieGxfY3R4ICpjdHgNCiAgICAgbWVtc2V0KGJfaW5mbywgJ1ww Jywgc2l6ZW9mKCpiX2luZm8pKTsNCiAgICAgYl9pbmZvLT5tYXhfdmNwdXMgPSAxOw0KICAgICBi X2luZm8tPmN1cl92Y3B1cyA9IDE7DQorICAgIGlmIChsaWJ4bF9jcHVtYXBfYWxsb2MoY3R4LCAm Yl9pbmZvLT5jcHVtYXApKQ0KKyAgICAgICAgcmV0dXJuIEVSUk9SX05PTUVNOw0KICAgICBiX2lu Zm8tPm1heF9tZW1rYiA9IDMyICogMTAyNDsNCiAgICAgYl9pbmZvLT50YXJnZXRfbWVta2IgPSBi X2luZm8tPm1heF9tZW1rYjsNCiAgICAgYl9pbmZvLT5kaXNhYmxlX21pZ3JhdGUgPSAwOw0KZGlm ZiAtciA5Y2U2OGE0MDM2YjEgdG9vbHMvbGlieGwvbGlieGxfZG9tLmMNCi0tLSBhL3Rvb2xzL2xp YnhsL2xpYnhsX2RvbS5jCVdlZCBKYW4gMTEgMTc6Mzg6MDQgMjAxMiArMDAwMA0KKysrIGIvdG9v bHMvbGlieGwvbGlieGxfZG9tLmMJV2VkIEphbiAxMSAxNzo0MDo0NSAyMDEyICswMDAwDQpAQCAt NzIsOCArNzIsMTQgQEAgaW50IGxpYnhsX19idWlsZF9wcmUobGlieGxfX2djICpnYywgdWludA0K ICAgICAgICAgICAgICAgbGlieGxfZG9tYWluX2J1aWxkX2luZm8gKmluZm8sIGxpYnhsX19kb21h aW5fYnVpbGRfc3RhdGUgKnN0YXRlKQ0KIHsNCiAgICAgbGlieGxfY3R4ICpjdHggPSBsaWJ4bF9f Z2Nfb3duZXIoZ2MpOw0KLSAgICBpbnQgdHNjX21vZGU7DQorICAgIGludCBpLCB0c2NfbW9kZTsN CiAgICAgeGNfZG9tYWluX21heF92Y3B1cyhjdHgtPnhjaCwgZG9taWQsIGluZm8tPm1heF92Y3B1 cyk7DQorICAgIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5tYXhfdmNwdXM7IGkrKykgew0KKyAgICAg ICAgaWYgKGxpYnhsX3NldF92Y3B1YWZmaW5pdHkoY3R4LCBkb21pZCwgaSwgJmluZm8tPmNwdW1h cCkgPT0gLTEpIHsNCisgICAgICAgICAgICAgICAgTElCWExfX0xPRyhjdHgsIExJQlhMX19MT0df V0FSTklORywgImxpYnhsX3NldF92Y3B1YWZmaW5pdHkgZmFpbGVkLiAiDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIkdvaW5nIGFoZWFkIHdpdGhvdXQgc2V0dGluZyBhZmZpbml0eSBmb3Ig Y3B1ICVkLlxuIiwgaSk7DQorICAgICAgICB9DQorICAgIH0NCiAgICAgeGNfZG9tYWluX3NldG1h eG1lbShjdHgtPnhjaCwgZG9taWQsIGluZm8tPnRhcmdldF9tZW1rYiArIExJQlhMX01BWE1FTV9D T05TVEFOVCk7DQogICAgIGlmIChpbmZvLT50eXBlID09IExJQlhMX0RPTUFJTl9UWVBFX1BWKQ0K ICAgICAgICAgeGNfZG9tYWluX3NldF9tZW1tYXBfbGltaXQoY3R4LT54Y2gsIGRvbWlkLA0KZGlm ZiAtciA5Y2U2OGE0MDM2YjEgdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsDQotLS0gYS90b29s cy9saWJ4bC9saWJ4bF90eXBlcy5pZGwJV2VkIEphbiAxMSAxNzozODowNCAyMDEyICswMDAwDQor KysgYi90b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwJV2VkIEphbiAxMSAxNzo0MDo0NSAyMDEy ICswMDAwDQpAQCAtMTYyLDYgKzE2Miw3IEBAIGxpYnhsX2RvbWFpbl9jcmVhdGVfaW5mbyA9IFN0 cnVjdCgiZG9tYWkNCiBsaWJ4bF9kb21haW5fYnVpbGRfaW5mbyA9IFN0cnVjdCgiZG9tYWluX2J1 aWxkX2luZm8iLFsNCiAgICAgKCJtYXhfdmNwdXMiLCAgICAgICBpbnRlZ2VyKSwNCiAgICAgKCJj dXJfdmNwdXMiLCAgICAgICBpbnRlZ2VyKSwNCisgICAgKCJjcHVtYXAiLCAgICAgICAgICBsaWJ4 bF9jcHVtYXApLA0KICAgICAoInRzY19tb2RlIiwgICAgICAgIGxpYnhsX3RzY19tb2RlKSwNCiAg ICAgKCJtYXhfbWVta2IiLCAgICAgICB1aW50MzIpLA0KICAgICAoInRhcmdldF9tZW1rYiIsICAg IHVpbnQzMiksDQpkaWZmIC1yIDljZTY4YTQwMzZiMSB0b29scy9saWJ4bC94bF9jbWRpbXBsLmMN Ci0tLSBhL3Rvb2xzL2xpYnhsL3hsX2NtZGltcGwuYwlXZWQgSmFuIDExIDE3OjM4OjA0IDIwMTIg KzAwMDANCisrKyBiL3Rvb2xzL2xpYnhsL3hsX2NtZGltcGwuYwlXZWQgSmFuIDExIDE3OjQwOjQ1 IDIwMTIgKzAwMDANCkBAIC0yODgsMTYgKzI4OCwyNCBAQCBzdGF0aWMgdm9pZCBkb2xvZyhjb25z dCBjaGFyICpmaWxlLCBpbnQgDQogICAgICAgICBsaWJ4bF93cml0ZV9leGFjdGx5KE5VTEwsIGxv Z2ZpbGUsIHMsIHJjLCBOVUxMLCBOVUxMKTsNCiB9DQogDQorc3RhdGljIHZvaWQgcHJpbnRfYml0 bWFwKHVpbnQ4X3QgKm1hcCwgaW50IG1hcGxlbiwgRklMRSAqc3RyZWFtKTsNCisNCiBzdGF0aWMg dm9pZCBwcmludGZfaW5mbyhpbnQgZG9taWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfZG9tYWluX2NvbmZpZyAqZF9jb25maWcsDQogICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfZGV2aWNlX21vZGVsX2luZm8gKmRtX2luZm8pDQogew0KLSAgICBpbnQgaTsNCisgICAgaW50 IGksIG5yX2NwdXMgPSAtMTsNCiAgICAgbGlieGxfZG9taW5mbyBpbmZvOw0KKyAgICBsaWJ4bF9w aHlzaW5mbyBwaHlzaW5mbzsNCiANCiAgICAgbGlieGxfZG9tYWluX2NyZWF0ZV9pbmZvICpjX2lu Zm8gPSAmZF9jb25maWctPmNfaW5mbzsNCiAgICAgbGlieGxfZG9tYWluX2J1aWxkX2luZm8gKmJf aW5mbyA9ICZkX2NvbmZpZy0+Yl9pbmZvOw0KIA0KKyAgICBpZiAobGlieGxfZ2V0X3BoeXNpbmZv KGN0eCwgJnBoeXNpbmZvKSA9PSAwKQ0KKyAgICAgICAgbnJfY3B1cyA9IHBoeXNpbmZvLm5yX2Nw dXM7DQorICAgIGVsc2UNCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfcGh5c2luZm8g ZmFpbGVkLlxuIik7DQorDQogICAgIHByaW50ZigiKGRvbWFpblxuXHQoZG9taWQgJWQpXG4iLCBk b21pZCk7DQogICAgIHByaW50ZigiXHQoY3JlYXRlX2luZm8pXG4iKTsNCiAgICAgcHJpbnRmKCJc dChodm0gJWQpXG4iLCBjX2luZm8tPnR5cGUgPT0gTElCWExfRE9NQUlOX1RZUEVfSFZNKTsNCkBA IC0zMjgsNiArMzM2LDkgQEAgc3RhdGljIHZvaWQgcHJpbnRmX2luZm8oaW50IGRvbWlkLA0KIA0K ICAgICBwcmludGYoIlx0KGJ1aWxkX2luZm8pXG4iKTsNCiAgICAgcHJpbnRmKCJcdChtYXhfdmNw dXMgJWQpXG4iLCBiX2luZm8tPm1heF92Y3B1cyk7DQorICAgIHByaW50ZigiXHQoQ1BVIGFmZmlu aXR5ICIpOw0KKyAgICBwcmludF9iaXRtYXAoYl9pbmZvLT5jcHVtYXAubWFwLCBucl9jcHVzLCBz dGRvdXQpOw0KKyAgICBwcmludGYoIilcbiIpOw0KICAgICBwcmludGYoIlx0KHRzY19tb2RlICVz KVxuIiwgbGlieGxfdHNjX21vZGVfdG9fc3RyaW5nKGJfaW5mby0+dHNjX21vZGUpKTsNCiAgICAg cHJpbnRmKCJcdChtYXhfbWVta2IgJWQpXG4iLCBiX2luZm8tPm1heF9tZW1rYik7DQogICAgIHBy aW50ZigiXHQodGFyZ2V0X21lbWtiICVkKVxuIiwgYl9pbmZvLT50YXJnZXRfbWVta2IpOw0KQEAg LTU2OSw2ICs1ODAsOCBAQCBzdGF0aWMgdm9pZCBzcGxpdF9zdHJpbmdfaW50b19zdHJpbmdfbGlz DQogICAgIGZyZWUocyk7DQogfQ0KIA0KK3N0YXRpYyBpbnQgdmNwdXBpbl9wYXJzZShjaGFyICpj cHUsIGxpYnhsX2NwdW1hcCAqY3B1bWFwKTsNCisNCiBzdGF0aWMgdm9pZCBwYXJzZV9jb25maWdf ZGF0YShjb25zdCBjaGFyICpjb25maWdmaWxlX2ZpbGVuYW1lX3JlcG9ydCwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb25maWdmaWxlX2RhdGEsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbmZpZ2ZpbGVfbGVuLA0KQEAgLTY2MSw2ICs2 NzQsMTMgQEAgc3RhdGljIHZvaWQgcGFyc2VfY29uZmlnX2RhdGEoY29uc3QgY2hhcg0KICAgICBp ZiAoIXhsdV9jZmdfZ2V0X2xvbmcgKGNvbmZpZywgIm1heHZjcHVzIiwgJmwsIDApKQ0KICAgICAg ICAgYl9pbmZvLT5tYXhfdmNwdXMgPSBsOw0KIA0KKyAgICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmlu ZyAoY29uZmlnLCAiY3B1cyIsICZidWYsIDApKSB7DQorICAgICAgICBjaGFyICpidWYyID0gc3Ry ZHVwKGJ1Zik7DQorICAgICAgICB2Y3B1cGluX3BhcnNlKGJ1ZjIsICZiX2luZm8tPmNwdW1hcCk7 DQorICAgIH0gZWxzZSB7DQorICAgICAgICBtZW1zZXQoYl9pbmZvLT5jcHVtYXAubWFwLCAtMSwg Yl9pbmZvLT5jcHVtYXAuc2l6ZSk7DQorICAgIH0NCisNCiAgICAgaWYgKCF4bHVfY2ZnX2dldF9s b25nIChjb25maWcsICJtZW1vcnkiLCAmbCwgMCkpIHsNCiAgICAgICAgIGJfaW5mby0+bWF4X21l bWtiID0gbCAqIDEwMjQ7DQogICAgICAgICBiX2luZm8tPnRhcmdldF9tZW1rYiA9IGJfaW5mby0+ bWF4X21lbWtiOw0K --=-bOAc/zXSoQcOhM1YSutG-- --=-b6KUWioMSlndeAHaI1gC Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iEYEABECAAYFAk8Nzj8ACgkQk4XaBE3IOsTSbwCfUyzQmlmhn9nFmsAmgl1k6qNc VdoAoJTbwE6cpBROZAEZ0aftyuWw90Jb =UPPu -----END PGP SIGNATURE----- --=-b6KUWioMSlndeAHaI1gC-- --===============9085282458491062159== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --===============9085282458491062159==--