Received: by 2002:ab2:1149:0:b0:1f3:1f8c:d0c6 with SMTP id z9csp1461673lqz; Mon, 1 Apr 2024 07:11:24 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCVVG18vGRpfmvcUEklci1YvEtcQdV8IJ61MJzElhBmCOqBHnd4MKZLypUzWArya1MeBnn7Vv/XYaoATEHwtTQyEa7BRito+9oKQvBRPKQ== X-Google-Smtp-Source: AGHT+IEU1bxYLWZR/N7cF2irmMHXfk6seTHhZvTaqtPZ/GC213O04SpzK5pglbhAFX6nxV6jHcW8 X-Received: by 2002:a17:906:c788:b0:a4d:fdfc:80f3 with SMTP id cw8-20020a170906c78800b00a4dfdfc80f3mr8572206ejb.27.1711980684779; Mon, 01 Apr 2024 07:11:24 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1711980684; cv=pass; d=google.com; s=arc-20160816; b=lcsaEiENOLxl+dxD4kV9/k9LJ/z9b4UkylWy27kDDiupV7yeu0mssDMMIEby//2+oZ 5aDbGGnOFSOxBcGCMAMzMWVBZqYf3Oe2td1hI+tk6qKznfopF+5pnxWjstoif1YhMCzg gxYMIUH4FredzJJP5VOsOfsZlyXRehc4YcL55G8Z2GNreSrpc+tbxVbF9h3DRvOmskYc vFHgdXWULz+fiYlugSOJPXXHktcUAjU645+w2BxMDGWcR3reODeQd+8C0kRD0zIzrR1i Ad4yfhIiFDDmtxela2MU0cC8HlzYzxkZxOKTxmNgSvKGjcKWaJmkesWre53LvIw0Qeca cQmA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=in-reply-to:references:to:from:subject:cc:message-id:date :content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:dkim-signature; bh=YDB/4gIXsuy/BizOTdPGimhNge3hzdf9+0EkgdNd1NM=; fh=bTBX2mLek7OrEOgJJwQ9/XdiT1XrYyUER0SvhGnl2pc=; b=xGw29gYaK93sWtA/VXP5TVLa+dSnE9KkpmV6obYB0Xy/vuedUFlLbgdkbDeBhNPXGT 1acNAHAMATYwpavDg6A/M2TTxIJcXzYHTphL1bCXf1qqDi6km8i2wVuNhjxRdfKVMUCq Fe7+7dasOuLWCHweyCNe8SJuxrh2jbxwgoGR5gumoUmGV7IwrninCYOu50lpw8qChToa i9UT+OwpT1nyfurIkmGRHD/Rebb/c+k/Vd+pKYMrcL+lUaCEPZaJxRMOFbNGC21x2Wal 9xD5xNmBviFjF7KniXSdW3Uk/LId56WVA/UyJ8iUUtp0oj7u7tSFJ781A4FNU0wevdSd r17Q==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=YVnqzsan; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-126718-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-126718-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id ec22-20020a170906b6d600b00a4e73f9f19dsi646868ejb.716.2024.04.01.07.11.24 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Apr 2024 07:11:24 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-126718-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=YVnqzsan; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-126718-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-126718-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 791C81F213FE for ; Mon, 1 Apr 2024 14:11:24 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6886741232; Mon, 1 Apr 2024 14:10:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="YVnqzsan" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 520944087A; Mon, 1 Apr 2024 14:10:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711980612; cv=none; b=YQS+BHS83/HGICuzBQuYO0bLIN+wwPwD5fNi2q4yWhJ3uW6iHVKs9iU4sUE0IkYkvc+KjKfNbHDPph3cTiGgenIBt91hRVU+BFQnqTPkisoA6FVATXl/M1KWGGpYUegjt8BEuqswRnV5EjnTEBOv6CrQ1rEODaVjTBtUS0lwyFM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711980612; c=relaxed/simple; bh=TtRLHesnz+dcACnoZKKZM/LtsPcxKVCvvbWmluBaCVo=; h=Mime-Version:Content-Type:Date:Message-Id:Cc:Subject:From:To: References:In-Reply-To; b=kLPJ5+iAlkianFaf126+uzZpP78z54FTqxsnFeoRIzR+SD+ZyGO8FBh2ZmjGbLM1t5RLhmGoD9zwnRy5UYFbGq7qHXHT3iOBp3dutBKxgzX7sIGumaeQmDcspjCeDqDotbpJw0evAGK5vsaK7Jjw17DK1DdRMthS+0hi2QJKWRo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=YVnqzsan; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id A1369C433C7; Mon, 1 Apr 2024 14:10:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1711980612; bh=TtRLHesnz+dcACnoZKKZM/LtsPcxKVCvvbWmluBaCVo=; h=Date:Cc:Subject:From:To:References:In-Reply-To:From; b=YVnqzsanqNdD048o1U6G5XqGysgokOHUJcldr8nVQE4OXs/MlEZUkGvhl3QFSxtSn ZxeQsGMS6nnORcMWEwJxDPOB8VUEXAhDHq55PXPAm7qi0K+XqRYoDrhA20mbNDvnJf YO4FtnxL8cNInkb3pfPW3/qtjW7KcfvMyjEj5nPpghsgz6Gzj5LQipXUGMzXY5VEZd 49H8iF3QyTP84qh3grU2Htp+juovX+IHAL+Ysh+MtZe6OD1+EqBctHBckmnpY/sh9f hS4O82dp9l02jgyTbE3grqCTnFRecZWVUHLgh1nQuxhVGPZsalihS//dGk5/vu9c5z Y9+t8pNzquJLw== Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Date: Mon, 01 Apr 2024 17:10:05 +0300 Message-Id: Cc: , , , , , , , Subject: Re: [PATCH v9 15/15] selftests/sgx: Add scripts for EPC cgroup testing From: "Jarkko Sakkinen" To: "Haitao Huang" , , , , , , , , , , , , , X-Mailer: aerc 0.17.0 References: <20240205210638.157741-1-haitao.huang@linux.intel.com> <20240205210638.157741-16-haitao.huang@linux.intel.com> <4be7b291010973c203ed8c7bcd25b626c1290231.camel@kernel.org> In-Reply-To: On Sun Mar 31, 2024 at 8:35 PM EEST, Haitao Huang wrote: > On Sun, 31 Mar 2024 11:19:04 -0500, Jarkko Sakkinen = =20 > wrote: > > > On Sat Mar 30, 2024 at 5:32 PM EET, Haitao Huang wrote: > >> On Sat, 30 Mar 2024 06:15:14 -0500, Jarkko Sakkinen > >> wrote: > >> > >> > On Thu Mar 28, 2024 at 5:54 AM EET, Haitao Huang wrote: > >> >> On Wed, 27 Mar 2024 07:55:34 -0500, Jarkko Sakkinen =20 > >> > >> >> wrote: > >> >> > >> >> > On Mon, 2024-02-05 at 13:06 -0800, Haitao Huang wrote: > >> >> >> The scripts rely on cgroup-tools package from libcgroup [1]. > >> >> >> > >> >> >> To run selftests for epc cgroup: > >> >> >> > >> >> >> sudo ./run_epc_cg_selftests.sh > >> >> >> > >> >> >> To watch misc cgroup 'current' changes during testing, run this = =20 > >> in a > >> >> >> separate terminal: > >> >> >> > >> >> >> ./watch_misc_for_tests.sh current > >> >> >> > >> >> >> With different cgroups, the script starts one or multiple =20 > >> concurrent > >> >> >> SGX > >> >> >> selftests, each to run one unclobbered_vdso_oversubscribed =20 > >> test.Each > >> >> >> of such test tries to load an enclave of EPC size equal to the E= PC > >> >> >> capacity available on the platform. The script checks results = =20 > >> against > >> >> >> the expectation set for each cgroup and reports success or =20 > >> failure. > >> >> >> > >> >> >> The script creates 3 different cgroups at the beginning with > >> >> >> following > >> >> >> expectations: > >> >> >> > >> >> >> 1) SMALL - intentionally small enough to fail the test loading a= n > >> >> >> enclave of size equal to the capacity. > >> >> >> 2) LARGE - large enough to run up to 4 concurrent tests but fail= =20 > >> some > >> >> >> if > >> >> >> more than 4 concurrent tests are run. The script starts 4 =20 > >> expecting > >> >> >> at > >> >> >> least one test to pass, and then starts 5 expecting at least one= =20 > >> test > >> >> >> to fail. > >> >> >> 3) LARGER - limit is the same as the capacity, large enough to r= un > >> >> >> lots of > >> >> >> concurrent tests. The script starts 8 of them and expects all = =20 > >> pass. > >> >> >> Then it reruns the same test with one process randomly killed an= d > >> >> >> usage checked to be zero after all process exit. > >> >> >> > >> >> >> The script also includes a test with low mem_cg limit and LARGE > >> >> >> sgx_epc > >> >> >> limit to verify that the RAM used for per-cgroup reclamation is > >> >> >> charged > >> >> >> to a proper mem_cg. > >> >> >> > >> >> >> [1] https://github.com/libcgroup/libcgroup/blob/main/README > >> >> >> > >> >> >> Signed-off-by: Haitao Huang > >> >> >> --- > >> >> >> V7: > >> >> >> - Added memcontrol test. > >> >> >> > >> >> >> V5: > >> >> >> - Added script with automatic results checking, remove the > >> >> >> interactive > >> >> >> script. > >> >> >> - The script can run independent from the series below. > >> >> >> --- > >> >> >> .../selftests/sgx/run_epc_cg_selftests.sh | 246 > >> >> >> ++++++++++++++++++ > >> >> >> .../selftests/sgx/watch_misc_for_tests.sh | 13 + > >> >> >> 2 files changed, 259 insertions(+) > >> >> >> create mode 100755 > >> >> >> tools/testing/selftests/sgx/run_epc_cg_selftests.sh > >> >> >> create mode 100755 > >> >> >> tools/testing/selftests/sgx/watch_misc_for_tests.sh > >> >> >> > >> >> >> diff --git a/tools/testing/selftests/sgx/run_epc_cg_selftests.sh > >> >> >> b/tools/testing/selftests/sgx/run_epc_cg_selftests.sh > >> >> >> new file mode 100755 > >> >> >> index 000000000000..e027bf39f005 > >> >> >> --- /dev/null > >> >> >> +++ b/tools/testing/selftests/sgx/run_epc_cg_selftests.sh > >> >> >> @@ -0,0 +1,246 @@ > >> >> >> +#!/bin/bash > >> >> > > >> >> > This is not portable and neither does hold in the wild. > >> >> > > >> >> > It does not even often hold as it is not uncommon to place bash > >> >> > to the path /usr/bin/bash. If I recall correctly, e.g. NixOS has > >> >> > a path that is neither of those two. > >> >> > > >> >> > Should be #!/usr/bin/env bash > >> >> > > >> >> > That is POSIX compatible form. > >> >> > > >> >> > >> >> Sure > >> >> > >> >> > Just got around trying to test this in NUC7 so looking into this = in > >> >> > more detail. > >> >> > >> >> Thanks. Could you please check if this version works for you? > >> >> > >> >> =20 > >> https://github.com/haitaohuang/linux/commit/3c424b841cf3cf66b085a424f4= b537fbc3bbff6f > >> >> > >> >> > > >> >> > That said can you make the script work with just "#!/usr/bin/env = =20 > >> sh" > >> >> > and make sure that it is busybox ash compatible? > >> >> > >> >> Yes. > >> >> > >> >> > > >> >> > I don't see any necessity to make this bash only and it adds to t= he > >> >> > compilation time of the image. Otherwise lot of this could be =20 > >> tested > >> >> > just with qemu+bzImage+busybox(inside initramfs). > >> >> > > >> >> > >> >> will still need cgroup-tools as you pointed out later. Compiling fr= om > >> >> its > >> >> upstream code OK? > >> > > >> > Can you explain why you need it? > >> > > >> > What is the thing you cannot do without it? > >> > > >> > BR, Jarkko > >> > > >> I did not find a nice way to start a process in a specified cgroup lik= e > >> cgexec does. I could wrap the test in a shell: move the current shell = =20 > >> to a > >> new cgroup then do exec to run the test app. But that seems cumbersome= =20 > >> as > >> I need to spawn many shells, and check results of them. Another optio= n =20 > >> is > >> create my own cgexec, which I'm sure will be very similar to cgexec = =20 > >> code. > >> Was not sure how far we want to go with this. > >> > >> I can experiment with the shell wrapper idea and see how bad it can be= =20 > >> and > >> fall back to implement cgexec? Open to suggestions. > > > > I guess there's only few variants of how cgexec is invoked right? > > > > The first thing we need to do is what exact steps those variants > > perform. > > > > After that we an decide how to implement exactly those variants. > > > > E.g. without knowing do we need to perform any syscalls or can > > this all done through sysfs affects somewhat how to proceed. > > > > Right now if I want to build e.g. image with BuildRoot I'd need > > to patch the existing recipe to add new dependencies in order to > > execute these tests, and probably do the same for every project > > that can package selftests to image. > > > > BR, Jarkko > > > Can be done through sysfs without syscalls. I implemented the wrapper =20 > shell and it looks not as bad I expected. > Will send an add-on patch with that change and other changes to address = =20 > your comments so far for the test scripts. > If we agree on the approach, I'll squash it with this one later. So think this way. By having these open coded we can check in detail that the feature works exactly how we would like. Those tools add an abstraction layer which makes it harder to evaluate this as a whole. Also, that renders away all possible issues related to different versions of 3rd party tools and their possible incompatibilities. If pure bash for some reason would turn out to be unmanageable nothing prevents to e.g. implement a small tool in C or Python that does the tasks required. E.g. for testing TPM2 chips I implemented custom TPM2 user space just for kselftest, and in SGX we implemented "bare metal" enclave implementation with the same rationale. BR, Jarkko