Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp404391pxb; Wed, 3 Mar 2021 06:19:30 -0800 (PST) X-Google-Smtp-Source: ABdhPJwJWJpQGRuJAjo1VLotaf7ZJ7fvSMIMaTLYRsOcue1gzvCAus1yWRTLBcEgxSQxmI+gSnos X-Received: by 2002:a17:906:e119:: with SMTP id gj25mr26103554ejb.509.1614781169937; Wed, 03 Mar 2021 06:19:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614781169; cv=none; d=google.com; s=arc-20160816; b=AYx+3wQO6MUHA7ugkEaUt9ztC4bBp2TFLlvpUFHqqgUH9KShZlVFmBkYGefrr6d3ja ApKrpgDCTz5DAJtW8Th3posO0vT/YIuh53ilWL1x1eznOuJ7f3SlEVSGRi5jPkddM1JI /T9gr1pthdtBlIo86qTxESb/sb0Pt7kmz64g5N0ox/aqoHiXbX/55ZGp/QLKhSy3aKCr a9XFXr1k3DtdC50xo5/gYNq0fXXfgJo6PDnQxEppU+ixP/bE5pcvFO1nQt5yfkTujBlF /jXGDJjNlhORS/0hYSKYa3KX1BRg7Q844OiXCv3iXb0uDVu4MF9CDzoJ69LeheiW54Hb v9ZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=bQgYIg4zhdvSpGnEowkoL04hHhHEJOWJMqg5awL7BDY=; b=mxvDpOUkqFdrp81gVVJ2waqGLIVlCyZdzorr13jBFG+VycLFDqOslkn4dcx+2MeN4m 7Z4K8oH14NozINiuXt/bJ3Zg6HmPN6OSlibwZL0hbnql9rJzO2pASnvQdmtYcJUFEeuW hEn9Va3crzda3Rc5HqYaYfluOxb4CAaomdcRpKRwRClOOBsOgK/E346eNbG0wBfhbXsb gC/Ku7CNc2BQvd2i/3hO3m2xTtFLJObqjnr/WGo4Jzz1UmgdVYFsyTGGTXpegtTInBwU yHXIjagZJXdtpjT3vgyxp4pNCXwHSZJTVuN/JLyCCSNH51vxdchxz/nvzIsL182xaDEf mTtA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="d9A/gfZa"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l11si1461690ejq.118.2021.03.03.06.19.03; Wed, 03 Mar 2021 06:19:29 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="d9A/gfZa"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244037AbhCAUyS (ORCPT + 99 others); Mon, 1 Mar 2021 15:54:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45686 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237228AbhCARKo (ORCPT ); Mon, 1 Mar 2021 12:10:44 -0500 Received: from mail-il1-x12c.google.com (mail-il1-x12c.google.com [IPv6:2607:f8b0:4864:20::12c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1BDCDC061756 for ; Mon, 1 Mar 2021 09:10:03 -0800 (PST) Received: by mail-il1-x12c.google.com with SMTP id e2so15317212ilu.0 for ; Mon, 01 Mar 2021 09:10:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=bQgYIg4zhdvSpGnEowkoL04hHhHEJOWJMqg5awL7BDY=; b=d9A/gfZarMTVNipXu9nwbk447hKb3TB5K+Ut7F6XcapVYXKyr73IAWrR0nixbPfKXp 7eQTdbFasIJg53ECMUhHPO+vF2BOIme5lNjjjzi9GzAFanlm/eF2n5YNa0fp2/ham944 6lhwukyxGDfNNj4E4w6WahKKQMMdWw5mq9a0v94Tjz8bONJti70oLnCwEkB3UAnWXWTh FQ82texUehuhQv9PzOGwfNwBEVAM9wOIoagaXvV6MnmPcjKIJ7KttblCsrZdAU0KdGbX XoL9sMUJupzCA6p4TZfoqj+LHWZZuQbu3F9NW6la/c5LzVGh1uNyd84r5q+JduCud3Hm Mudw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=bQgYIg4zhdvSpGnEowkoL04hHhHEJOWJMqg5awL7BDY=; b=RJbw6jzhwVaDlX5DgpW0WXxkKg12sRCEzsoRstEu7heZqc4v4Q6hl18goX4trDZnvD lJFCgcKez5V/K2yZkPUQsU5t4UQruPzdzogVa40ZLixQ77VSoKrF+uFmySMp8LxZxns3 kCk4NStpfqTtWtHcc4l9ioUrLaGBJ3beq9gvlExr4/Nb8PZ4KJ/FAdRGCcxE01qpBr5J ZpITUHbeXgqG+zPSYsG8FtYEDd8jKrzBbCHOz4t8ujFt/WyaxMubJy1GPth+LdbsDRQQ /B8BLeD7F5Hxz5hXhNHZyS1pjGeuOnBTzxkhHxHOnNnNelcnCccOBQRoNPHF9vx8i4MX XNHg== X-Gm-Message-State: AOAM532qwlOpq0TlmqZpB5Ze3f9vZQGSV2pP7tBi21IkvkSoIDnnL2TG zKI45Fit3nSJx2qMgumudkYErEA9r9vkJhia9RQDNw== X-Received: by 2002:a92:6408:: with SMTP id y8mr13854048ilb.203.1614618602337; Mon, 01 Mar 2021 09:10:02 -0800 (PST) MIME-Version: 1.0 References: <20210301065916.11484-1-wangyanan55@huawei.com> <20210301065916.11484-7-wangyanan55@huawei.com> In-Reply-To: <20210301065916.11484-7-wangyanan55@huawei.com> From: Ben Gardon Date: Mon, 1 Mar 2021 09:09:51 -0800 Message-ID: Subject: Re: [RFC PATCH v3 6/8] KVM: selftests: List all hugetlb src types specified with page sizes To: Yanan Wang Cc: kvm , linux-kselftest@vger.kernel.org, LKML , Paolo Bonzini , Sean Christopherson , Vitaly Kuznetsov , Andrew Jones , Peter Xu , Marc Zyngier , Ingo Molnar , Adrian Hunter , Jiri Olsa , Arnaldo Carvalho de Melo , Arnd Bergmann , Michael Kerrisk , Thomas Gleixner , wanghaibin.wang@huawei.com, yezengruan@huawei.com, yuzenghui@huawei.com Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, Feb 28, 2021 at 11:00 PM Yanan Wang wrote: > > With VM_MEM_SRC_ANONYMOUS_HUGETLB, we currently can only use system > default hugetlb pages to back the testing guest memory. In order to > add flexibility, now list all the known hugetlb backing src types with > different page sizes, so that we can specify use of hugetlb pages of the > exact granularity that we want. And as all the known hugetlb page sizes > are listed, it's appropriate for all architectures. > > Besides, the helper get_backing_src_pagesz() is added to get the > granularity of different backing src types(anonumous, thp, hugetlb). > > Suggested-by: Ben Gardon > Signed-off-by: Yanan Wang > --- > .../testing/selftests/kvm/include/test_util.h | 19 ++++++- > tools/testing/selftests/kvm/lib/kvm_util.c | 2 +- > tools/testing/selftests/kvm/lib/test_util.c | 56 +++++++++++++++---- > 3 files changed, 63 insertions(+), 14 deletions(-) > > diff --git a/tools/testing/selftests/kvm/include/test_util.h b/tools/testing/selftests/kvm/include/test_util.h > index ef24c76ba89a..be5d08bcdca7 100644 > --- a/tools/testing/selftests/kvm/include/test_util.h > +++ b/tools/testing/selftests/kvm/include/test_util.h > @@ -70,16 +70,31 @@ struct timespec timespec_div(struct timespec ts, int divisor); > enum vm_mem_backing_src_type { > VM_MEM_SRC_ANONYMOUS, > VM_MEM_SRC_ANONYMOUS_THP, > - VM_MEM_SRC_ANONYMOUS_HUGETLB, I apologize I didn't catch this in v2, but it looks like this patch removes a default hugetlb size option. I could see this being intentional if we want to force developers to think about there being multiple page sizes, but it might also be nice for folks to have an option to use the system default hugepage size. Otherwise, this series looks good to me. Please feel free to add Reviewed-by: Ben Gardon . > + VM_MEM_SRC_ANONYMOUS_HUGETLB_16KB, > + VM_MEM_SRC_ANONYMOUS_HUGETLB_64KB, > + VM_MEM_SRC_ANONYMOUS_HUGETLB_512KB, > + VM_MEM_SRC_ANONYMOUS_HUGETLB_1MB, > + VM_MEM_SRC_ANONYMOUS_HUGETLB_2MB, > + VM_MEM_SRC_ANONYMOUS_HUGETLB_8MB, > + VM_MEM_SRC_ANONYMOUS_HUGETLB_16MB, > + VM_MEM_SRC_ANONYMOUS_HUGETLB_32MB, > + VM_MEM_SRC_ANONYMOUS_HUGETLB_256MB, > + VM_MEM_SRC_ANONYMOUS_HUGETLB_512MB, > + VM_MEM_SRC_ANONYMOUS_HUGETLB_1GB, > + VM_MEM_SRC_ANONYMOUS_HUGETLB_2GB, > + VM_MEM_SRC_ANONYMOUS_HUGETLB_16GB, > + NUM_SRC_TYPES, > }; > > struct vm_mem_backing_src_alias { > const char *name; > - enum vm_mem_backing_src_type type; > + uint32_t flag; > }; > > bool thp_configured(void); > size_t get_trans_hugepagesz(void); > +const struct vm_mem_backing_src_alias *vm_mem_backing_src_alias(uint32_t i); > +size_t get_backing_src_pagesz(uint32_t i); > void backing_src_help(void); > enum vm_mem_backing_src_type parse_backing_src_type(const char *type_name); > > diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c > index cc22c4ab7d67..b91c8e3a7ee1 100644 > --- a/tools/testing/selftests/kvm/lib/kvm_util.c > +++ b/tools/testing/selftests/kvm/lib/kvm_util.c > @@ -757,7 +757,7 @@ void vm_userspace_mem_region_add(struct kvm_vm *vm, > region->mmap_start = mmap(NULL, region->mmap_size, > PROT_READ | PROT_WRITE, > MAP_PRIVATE | MAP_ANONYMOUS > - | (src_type == VM_MEM_SRC_ANONYMOUS_HUGETLB ? MAP_HUGETLB : 0), > + | vm_mem_backing_src_alias(src_type)->flag, > -1, 0); > TEST_ASSERT(region->mmap_start != MAP_FAILED, > "test_malloc failed, mmap_start: %p errno: %i", > diff --git a/tools/testing/selftests/kvm/lib/test_util.c b/tools/testing/selftests/kvm/lib/test_util.c > index f2d133f76c67..1f5e7241c80e 100644 > --- a/tools/testing/selftests/kvm/lib/test_util.c > +++ b/tools/testing/selftests/kvm/lib/test_util.c > @@ -11,6 +11,7 @@ > #include > #include > #include > +#include > #include "linux/kernel.h" > > #include "test_util.h" > @@ -112,12 +113,6 @@ void print_skip(const char *fmt, ...) > puts(", skipping test"); > } > > -const struct vm_mem_backing_src_alias backing_src_aliases[] = { > - {"anonymous", VM_MEM_SRC_ANONYMOUS,}, > - {"anonymous_thp", VM_MEM_SRC_ANONYMOUS_THP,}, > - {"anonymous_hugetlb", VM_MEM_SRC_ANONYMOUS_HUGETLB,}, > -}; > - > bool thp_configured(void) > { > int ret; > @@ -153,22 +148,61 @@ size_t get_trans_hugepagesz(void) > return size; > } > > +const struct vm_mem_backing_src_alias *vm_mem_backing_src_alias(uint32_t i) > +{ > + static const struct vm_mem_backing_src_alias aliases[] = { > + { "anonymous", 0 }, > + { "anonymous_thp", 0 }, > + { "anonymous_hugetlb_16kb", MAP_HUGETLB | MAP_HUGE_16KB }, > + { "anonymous_hugetlb_64kb", MAP_HUGETLB | MAP_HUGE_64KB }, > + { "anonymous_hugetlb_512kb", MAP_HUGETLB | MAP_HUGE_512KB }, > + { "anonymous_hugetlb_1mb", MAP_HUGETLB | MAP_HUGE_1MB }, > + { "anonymous_hugetlb_2mb", MAP_HUGETLB | MAP_HUGE_2MB }, > + { "anonymous_hugetlb_8mb", MAP_HUGETLB | MAP_HUGE_8MB }, > + { "anonymous_hugetlb_16mb", MAP_HUGETLB | MAP_HUGE_16MB }, > + { "anonymous_hugetlb_32mb", MAP_HUGETLB | MAP_HUGE_32MB }, > + { "anonymous_hugetlb_256mb", MAP_HUGETLB | MAP_HUGE_256MB }, > + { "anonymous_hugetlb_512mb", MAP_HUGETLB | MAP_HUGE_512MB }, > + { "anonymous_hugetlb_1gb", MAP_HUGETLB | MAP_HUGE_1GB }, > + { "anonymous_hugetlb_2gb", MAP_HUGETLB | MAP_HUGE_2GB }, > + { "anonymous_hugetlb_16gb", MAP_HUGETLB | MAP_HUGE_16GB }, > + }; > + _Static_assert(ARRAY_SIZE(aliases) == NUM_SRC_TYPES, > + "Missing new backing src types?"); > + > + TEST_ASSERT(i < NUM_SRC_TYPES, "Backing src type ID %d too big", i); > + > + return &aliases[i]; > +} > + > +size_t get_backing_src_pagesz(uint32_t i) > +{ > + uint32_t flag = vm_mem_backing_src_alias(i)->flag; > + > + if (i == VM_MEM_SRC_ANONYMOUS) > + return getpagesize(); > + if (i == VM_MEM_SRC_ANONYMOUS_THP) > + return get_trans_hugepagesz(); > + > + return MAP_HUGE_PAGE_SIZE(flag); > +} > + > void backing_src_help(void) > { > int i; > > printf("Available backing src types:\n"); > - for (i = 0; i < ARRAY_SIZE(backing_src_aliases); i++) > - printf("\t%s\n", backing_src_aliases[i].name); > + for (i = 0; i < NUM_SRC_TYPES; i++) > + printf("\t%s\n", vm_mem_backing_src_alias(i)->name); > } > > enum vm_mem_backing_src_type parse_backing_src_type(const char *type_name) > { > int i; > > - for (i = 0; i < ARRAY_SIZE(backing_src_aliases); i++) > - if (!strcmp(type_name, backing_src_aliases[i].name)) > - return backing_src_aliases[i].type; > + for (i = 0; i < NUM_SRC_TYPES; i++) > + if (!strcmp(type_name, vm_mem_backing_src_alias(i)->name)) > + return i; > > backing_src_help(); > TEST_FAIL("Unknown backing src type: %s", type_name); > -- > 2.23.0 >