Re: [PATCH] selftests/sgx: Improve cgroup test scripts

2024-04-02 Thread Jarkko Sakkinen
On Tue Apr 2, 2024 at 1:55 AM EEST, Haitao Huang wrote:
> On Mon, 01 Apr 2024 09:22:21 -0500, Jarkko Sakkinen   
> wrote:
>
> > On Sun Mar 31, 2024 at 8:44 PM EEST, Haitao Huang wrote:
> >> Make cgroup test scripts ash compatible.
> >> Remove cg-tools dependency.
> >> Add documentation for functions.
> >>
> >> Tested with busybox on Ubuntu.
> >>
> >> Signed-off-by: Haitao Huang 
> >
> > I'll run this next week on good old NUC7. Thank you.
> >
> > I really wish that either (hopefully both) Intel or AMD would bring up
> > for developers home use meant platform to develop on TDX and SNP. It is
> > a shame that the latest and greatest is from 2018.
> >
> > BR, Jarkko
> >
>
> Argh, missed a few changes for v2 cgroup:
>
> --- a/tools/testing/selftests/sgx/run_epc_cg_selftests.sh
> +++ b/tools/testing/selftests/sgx/run_epc_cg_selftests.sh
> @@ -15,6 +15,8 @@ CG_MEM_ROOT=/sys/fs/cgroup
>   CG_V1=0
>   if [ ! -d "/sys/fs/cgroup/misc" ]; then
>   echo "# cgroup V2 is in use."
> +echo "+misc" >  $CG_MISC_ROOT/cgroup.subtree_control
> +echo "+memory" > $CG_MEM_ROOT/cgroup.subtree_control
>   else
>   echo "# cgroup V1 is in use."
>   CG_MISC_ROOT=/sys/fs/cgroup/misc
> @@ -26,6 +28,11 @@ mkdir -p $CG_MISC_ROOT/$TEST_CG_SUB2
>   mkdir -p $CG_MISC_ROOT/$TEST_CG_SUB3
>   mkdir -p $CG_MISC_ROOT/$TEST_CG_SUB4
>
> +if [ $CG_V1 -eq 0 ]; then
> +echo "+misc" >  $CG_MISC_ROOT/$TEST_ROOT_CG/cgroup.subtree_control
> +echo "+misc" >  $CG_MISC_ROOT/$TEST_CG_SUB1/cgroup.subtree_control
> +fi

Maybe it would be most convenient just to +1 the kselftest patch?

Alternatively you could point out to a Git branch with the series
and the updated patch.

BR, Jarkko



Re: [PATCH] selftests/sgx: Improve cgroup test scripts

2024-04-01 Thread Haitao Huang
On Mon, 01 Apr 2024 09:22:21 -0500, Jarkko Sakkinen   
wrote:



On Sun Mar 31, 2024 at 8:44 PM EEST, Haitao Huang wrote:

Make cgroup test scripts ash compatible.
Remove cg-tools dependency.
Add documentation for functions.

Tested with busybox on Ubuntu.

Signed-off-by: Haitao Huang 


I'll run this next week on good old NUC7. Thank you.

I really wish that either (hopefully both) Intel or AMD would bring up
for developers home use meant platform to develop on TDX and SNP. It is
a shame that the latest and greatest is from 2018.

BR, Jarkko



Argh, missed a few changes for v2 cgroup:

--- a/tools/testing/selftests/sgx/run_epc_cg_selftests.sh
+++ b/tools/testing/selftests/sgx/run_epc_cg_selftests.sh
@@ -15,6 +15,8 @@ CG_MEM_ROOT=/sys/fs/cgroup
 CG_V1=0
 if [ ! -d "/sys/fs/cgroup/misc" ]; then
 echo "# cgroup V2 is in use."
+echo "+misc" >  $CG_MISC_ROOT/cgroup.subtree_control
+echo "+memory" > $CG_MEM_ROOT/cgroup.subtree_control
 else
 echo "# cgroup V1 is in use."
 CG_MISC_ROOT=/sys/fs/cgroup/misc
@@ -26,6 +28,11 @@ mkdir -p $CG_MISC_ROOT/$TEST_CG_SUB2
 mkdir -p $CG_MISC_ROOT/$TEST_CG_SUB3
 mkdir -p $CG_MISC_ROOT/$TEST_CG_SUB4

+if [ $CG_V1 -eq 0 ]; then
+echo "+misc" >  $CG_MISC_ROOT/$TEST_ROOT_CG/cgroup.subtree_control
+echo "+misc" >  $CG_MISC_ROOT/$TEST_CG_SUB1/cgroup.subtree_control
+fi



Re: [PATCH] selftests/sgx: Improve cgroup test scripts

2024-04-01 Thread Jarkko Sakkinen
On Sun Mar 31, 2024 at 8:44 PM EEST, Haitao Huang wrote:
> Make cgroup test scripts ash compatible.
> Remove cg-tools dependency.
> Add documentation for functions.
>
> Tested with busybox on Ubuntu.
>
> Signed-off-by: Haitao Huang 

I'll run this next week on good old NUC7. Thank you.

I really wish that either (hopefully both) Intel or AMD would bring up
for developers home use meant platform to develop on TDX and SNP. It is
a shame that the latest and greatest is from 2018.

BR, Jarkko



[PATCH] selftests/sgx: Improve cgroup test scripts

2024-03-31 Thread Haitao Huang
Make cgroup test scripts ash compatible.
Remove cg-tools dependency.
Add documentation for functions.

Tested with busybox on Ubuntu.

Signed-off-by: Haitao Huang 
---
 tools/testing/selftests/sgx/ash_cgexec.sh |  58 ++
 .../selftests/sgx/run_epc_cg_selftests.sh | 171 +++---
 .../selftests/sgx/watch_misc_for_tests.sh |  13 +-
 3 files changed, 165 insertions(+), 77 deletions(-)
 create mode 100755 tools/testing/selftests/sgx/ash_cgexec.sh

diff --git a/tools/testing/selftests/sgx/ash_cgexec.sh 
b/tools/testing/selftests/sgx/ash_cgexec.sh
new file mode 100755
index ..51232d6452a8
--- /dev/null
+++ b/tools/testing/selftests/sgx/ash_cgexec.sh
@@ -0,0 +1,58 @@
+#!/usr/bin/env sh
+# SPDX-License-Identifier: GPL-2.0
+# Copyright(c) 2024 Intel Corporation.
+
+# Move the current shell process to the specified cgroup
+# Arguments:
+#  $1 - The cgroup controller name, e.g., misc, memory.
+#  $2 - The path of the cgroup,
+#  relative to /sys/fs/cgroup for cgroup v2,
+#  relative to /sys/fs/cgroup/$1 for v1.
+move_to_cgroup() {
+controllers="$1"
+path="$2"
+
+# Check if cgroup v2 is in use
+if [ ! -d "/sys/fs/cgroup/misc" ]; then
+# Cgroup v2 logic
+cgroup_full_path="/sys/fs/cgroup/${path}"
+echo $$ > "${cgroup_full_path}/cgroup.procs"
+else
+# Cgroup v1 logic
+OLD_IFS="$IFS"
+IFS=','
+for controller in $controllers; do
+cgroup_full_path="/sys/fs/cgroup/${controller}/${path}"
+echo $$ > "${cgroup_full_path}/tasks"
+done
+IFS="$OLD_IFS"
+fi
+}
+
+if [ "$#" -lt 3 ] || [ "$1" != "-g" ]; then
+echo "Usage: $0 -g  [-g  
...]  [args...]"
+exit 1
+fi
+
+while [ "$#" -gt 0 ]; do
+case "$1" in
+-g)
+# Ensure that a controller:path pair is provided after -g
+if [ -z "$2" ]; then
+echo "Error: Missing controller:path argument after -g"
+exit 1
+fi
+IFS=':' read CONTROLLERS CGROUP_PATH < $CG_MISC_ROOT/$TEST_CG_SUB1/misc.max
 echo "sgx_epc $LARGE" >  $CG_MISC_ROOT/$TEST_CG_SUB2/misc.max
 echo "sgx_epc $LARGER" > $CG_MISC_ROOT/$TEST_CG_SUB4/misc.max
 
+if [ $? -ne 0 ]; then
+echo "# Failed setting up misc limits, make sure misc cgroup is mounted."
+exit 1
+fi
+
+clean_up_misc()
+{
+rmdir $CG_MISC_ROOT/$TEST_CG_SUB2
+rmdir $CG_MISC_ROOT/$TEST_CG_SUB3
+rmdir $CG_MISC_ROOT/$TEST_CG_SUB4
+rmdir $CG_MISC_ROOT/$TEST_CG_SUB1
+rmdir $CG_MISC_ROOT/$TEST_ROOT_CG
+}
+
 timestamp=$(date +%Y%m%d_%H%M%S)
 
 test_cmd="./test_sgx -t unclobbered_vdso_oversubscribed"
 
+# Wait for a process and check for expected exit status.
+#
+# Arguments:
+#  $1 - the pid of the process to wait and check.
+#  $2 - 1 if expecting success, 0 for failure.
+#
+# Return:
+#  0 if the exit status of the process matches the expectation.
+#  1 otherwise.
 wait_check_process_status() {
-local pid=$1
-local check_for_success=$2  # If 1, check for success;
-# If 0, check for failure
+pid=$1
+check_for_success=$2  # If 1, check for success;
+  # If 0, check for failure
 wait "$pid"
-local status=$?
+status=$?
 
-if [[ $check_for_success -eq 1 && $status -eq 0 ]]; then
+if [ $check_for_success -eq 1 ] && [ $status -eq 0 ]; then
 echo "# Process $pid succeeded."
 return 0
-elif [[ $check_for_success -eq 0 && $status -ne 0 ]]; then
+elif [ $check_for_success -eq 0 ] && [ $status -ne 0 ]; then
 echo "# Process $pid returned failure."
 return 0
 fi
 return 1
 }
 
+# Wait for a set of processes and check for expected exit status
+#
+# Arguments:
+#  $1 - 1 if expecting success, 0 for failure.
+#  remaining args - The pids of the processes
+#
+# Return:
+#  0 if exit status of any process matches the expectation.
+#  1 otherwise.
 wait_and_detect_for_any() {
-local pids=("$@")
-local check_for_success=$1  # If 1, check for success;
-# If 0, check for failure
-local detected=1 # 0 for success detection
+check_for_success=$1  # If 1, check for success;
+  # If 0, check for failure
+shift
+detected=1 # 0 for success detection
 
-for pid in "${pids[@]:1}"; do
+for pid in $@; do
 if wait_check_process_status "$pid" "$check_for_success"; then
 detected=0
 # Wait for other processes to exit
@@ -88,10 +114,10 @@ wait_and_detect_for_any() {
 echo "# Start unclobbered_vdso_oversubscribed with SMALL limit, expecting 
failure..."
 # Always use leaf node of misc cgroups so it works for both v1 and v2
 # these may fail on OOM
-cgexec -g misc:$TEST_CG_SUB3 $test_cmd >cgtest_small_$timestamp.log 2>&1
-if [[ $? -eq 0 ]]; then
+./ash_cgexec.sh -g misc:$TEST_CG_SUB3 $test_cmd >cgtest_small_$timestamp.log 
2>&1
+if [