diff mbox series

[v3,06/10] selftests/mm: Don't fail uffd-stress if too many CPUs

Message ID 20250228-mm-selftests-v3-6-958e3b6f0203@google.com (mailing list archive)
State New
Headers show
Series selftests/mm: Some cleanups from trying to run them | expand

Commit Message

Brendan Jackman Feb. 28, 2025, 4:54 p.m. UTC
This calculation divides a fixed parameter by an environment-dependent
parameter i.e. the number of CPUs.

The simple way to avoid machine-specific failures here is to just put a
cap on the max value of the latter.

Suggested-by: Mateusz Guzik <mjguzik@gmail.com>
Signed-off-by: Brendan Jackman <jackmanb@google.com>
---
 tools/testing/selftests/mm/uffd-stress.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

Comments

Dev Jain Feb. 28, 2025, 5:37 p.m. UTC | #1
On 28/02/25 10:24 pm, Brendan Jackman wrote:
> This calculation divides a fixed parameter by an environment-dependent
> parameter i.e. the number of CPUs.
> 
> The simple way to avoid machine-specific failures here is to just put a
> cap on the max value of the latter.
> 
> Suggested-by: Mateusz Guzik <mjguzik@gmail.com>
> Signed-off-by: Brendan Jackman <jackmanb@google.com>
> ---

Reviewed-by: Dev Jain <dev.jain@arm.com>
Brendan Jackman March 5, 2025, 11:07 a.m. UTC | #2
On Fri, 28 Feb 2025 at 17:55, Brendan Jackman <jackmanb@google.com> wrote:
>
> This calculation divides a fixed parameter by an environment-dependent
> parameter i.e. the number of CPUs.
>
> The simple way to avoid machine-specific failures here is to just put a
> cap on the max value of the latter.
>
> Suggested-by: Mateusz Guzik <mjguzik@gmail.com>
> Signed-off-by: Brendan Jackman <jackmanb@google.com>
> ---
>  tools/testing/selftests/mm/uffd-stress.c | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/tools/testing/selftests/mm/uffd-stress.c b/tools/testing/selftests/mm/uffd-stress.c
> index efe2051c393096e237d942c04a264b6611a6e127..5656128590373ed376b3b5d9259e5ca3867a4099 100644
> --- a/tools/testing/selftests/mm/uffd-stress.c
> +++ b/tools/testing/selftests/mm/uffd-stress.c
> @@ -434,6 +434,7 @@ static void sigalrm(int sig)
>
>  int main(int argc, char **argv)
>  {
> +       unsigned long nr_cpus;
>         size_t bytes;
>
>         if (argc < 4)
> @@ -452,7 +453,15 @@ int main(int argc, char **argv)
>                 return KSFT_SKIP;
>         }
>
> -       nr_threads = sysconf(_SC_NPROCESSORS_ONLN);
> +       nr_cpus = sysconf(_SC_NPROCESSORS_ONLN);
> +       if (nr_cpus > 32) {
> +               /* Don't let calculation below go to zero. */
> +               ksft_print_msg("_SC_NPROCESSORS_ONLN (%lu) too large, capping nr_threads to 32\n",
> +                              nr_cpus);
> +               nr_threads = 32;
> +       } else {
> +               nr_cpus = nr_threads;

Won't have time to send v4 for a few days so I'll just note here: this
shoudl be nr_thread = nr_cpus. This causes a division by zero on
machines with less than 30 CPUs.
diff mbox series

Patch

diff --git a/tools/testing/selftests/mm/uffd-stress.c b/tools/testing/selftests/mm/uffd-stress.c
index efe2051c393096e237d942c04a264b6611a6e127..5656128590373ed376b3b5d9259e5ca3867a4099 100644
--- a/tools/testing/selftests/mm/uffd-stress.c
+++ b/tools/testing/selftests/mm/uffd-stress.c
@@ -434,6 +434,7 @@  static void sigalrm(int sig)
 
 int main(int argc, char **argv)
 {
+	unsigned long nr_cpus;
 	size_t bytes;
 
 	if (argc < 4)
@@ -452,7 +453,15 @@  int main(int argc, char **argv)
 		return KSFT_SKIP;
 	}
 
-	nr_threads = sysconf(_SC_NPROCESSORS_ONLN);
+	nr_cpus = sysconf(_SC_NPROCESSORS_ONLN);
+	if (nr_cpus > 32) {
+		/* Don't let calculation below go to zero. */
+		ksft_print_msg("_SC_NPROCESSORS_ONLN (%lu) too large, capping nr_threads to 32\n",
+			       nr_cpus);
+		nr_threads = 32;
+	} else {
+		nr_cpus = nr_threads;
+	}
 
 	nr_pages_per_cpu = bytes / page_size / nr_threads;
 	if (!nr_pages_per_cpu) {