[DTrace-devel] [PATCH 2/2] test: Skip pid-0 tests on oversubscribed systems

Kris Van Hees kris.van.hees at oracle.com
Tue Apr 15 15:32:38 UTC 2025


On Mon, Apr 14, 2025 at 04:19:59PM -0400, eugene.loh--- via DTrace-devel wrote:
> From: Eugene Loh <eugene.loh at oracle.com>
> 
> A number of tests check "tick-n /pid==0/" probes.  The problem
> with this is that a tick-n probe runs on a specific CPU.  If that
> CPU is fully subscribed, then pid 0 (swapper) will not run.  Thus,
> the test will take a long time, only to time out.
> 
> Change these tests to use profile-n instead of tick-n probes,
> improving chances that the test probe will fire on a less subscribed
> CPU.
> 
> Therefore, also change the .r.p post-processing file so that it uses
> only one output line (in case two CPUs manage to write output).
> 
> Finally, add skip files in case pid 0 does not fire on any CPU.
> 
> Signed-off-by: Eugene Loh <eugene.loh at oracle.com>

Reviewed-by: Kris Van Hees <kris.van.hees at oracle.com>

... although I think it would be best to have a single .x file and then
create symbolic links for its copies under different names.

> ---
>  test/unittest/ustack/tst.kthread.d      | 4 ++--
>  test/unittest/ustack/tst.kthread.x      | 5 +++++
>  test/unittest/ustack/tst.uaddr-pid0.d   | 4 ++--
>  test/unittest/ustack/tst.uaddr-pid0.r.p | 4 ++--
>  test/unittest/ustack/tst.uaddr-pid0.x   | 5 +++++
>  test/unittest/ustack/tst.ufunc-pid0.d   | 4 ++--
>  test/unittest/ustack/tst.ufunc-pid0.r.p | 4 ++--
>  test/unittest/ustack/tst.ufunc-pid0.x   | 5 +++++
>  test/unittest/ustack/tst.usym-pid0.d    | 4 ++--
>  test/unittest/ustack/tst.usym-pid0.r.p  | 4 ++--
>  test/unittest/ustack/tst.usym-pid0.x    | 5 +++++
>  11 files changed, 34 insertions(+), 14 deletions(-)
>  create mode 100755 test/unittest/ustack/tst.kthread.x
>  create mode 100755 test/unittest/ustack/tst.uaddr-pid0.x
>  create mode 100755 test/unittest/ustack/tst.ufunc-pid0.x
>  create mode 100755 test/unittest/ustack/tst.usym-pid0.x
> 
> diff --git a/test/unittest/ustack/tst.kthread.d b/test/unittest/ustack/tst.kthread.d
> index c6252b742..83ae6f7c6 100644
> --- a/test/unittest/ustack/tst.kthread.d
> +++ b/test/unittest/ustack/tst.kthread.d
> @@ -1,6 +1,6 @@
>  /*
>   * Oracle Linux DTrace.
> - * Copyright (c) 2013, 2020, Oracle and/or its affiliates. All rights reserved.
> + * Copyright (c) 2013, 2025, Oracle and/or its affiliates. All rights reserved.
>   * Licensed under the Universal Permissive License v 1.0 as shown at
>   * http://oss.oracle.com/licenses/upl.
>   */
> @@ -16,4 +16,4 @@
>  
>  #pragma D option quiet
>  
> -tick-100msec / pid == 0 / { ustack(); exit(0); }
> +profile-100msec / pid == 0 / { ustack(); exit(0); }
> diff --git a/test/unittest/ustack/tst.kthread.x b/test/unittest/ustack/tst.kthread.x
> new file mode 100755
> index 000000000..b5fe7177a
> --- /dev/null
> +++ b/test/unittest/ustack/tst.kthread.x
> @@ -0,0 +1,5 @@
> +#!/bin/sh
> +
> +$dtrace -qn 'profile-100ms /pid == 0/ { exit(0) }
> +             tick-1s { trace("cannot profile pid 0; oversubscribed system?"); exit(2) }'
> +exit $?
> diff --git a/test/unittest/ustack/tst.uaddr-pid0.d b/test/unittest/ustack/tst.uaddr-pid0.d
> index 263a7ca94..ab54eea40 100644
> --- a/test/unittest/ustack/tst.uaddr-pid0.d
> +++ b/test/unittest/ustack/tst.uaddr-pid0.d
> @@ -1,6 +1,6 @@
>  /*
>   * Oracle Linux DTrace.
> - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.
> + * Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
>   * Licensed under the Universal Permissive License v 1.0 as shown at
>   * http://oss.oracle.com/licenses/upl.
>   */
> @@ -9,7 +9,7 @@
>  
>  #pragma D option quiet
>  
> -tick-1
> +profile-1
>  /pid == $target/
>  {
>      uaddr(ucaller);
> diff --git a/test/unittest/ustack/tst.uaddr-pid0.r.p b/test/unittest/ustack/tst.uaddr-pid0.r.p
> index 9203dc824..78ab8e59d 100755
> --- a/test/unittest/ustack/tst.uaddr-pid0.r.p
> +++ b/test/unittest/ustack/tst.uaddr-pid0.r.p
> @@ -1,4 +1,4 @@
>  #!/usr/bin/gawk -f
>  
> -# remove trailing blanks
> -{ sub(" *$", ""); print }
> +# remove trailing blanks, use only one line
> +{ sub(" *$", ""); print; exit }
> diff --git a/test/unittest/ustack/tst.uaddr-pid0.x b/test/unittest/ustack/tst.uaddr-pid0.x
> new file mode 100755
> index 000000000..b5fe7177a
> --- /dev/null
> +++ b/test/unittest/ustack/tst.uaddr-pid0.x
> @@ -0,0 +1,5 @@
> +#!/bin/sh
> +
> +$dtrace -qn 'profile-100ms /pid == 0/ { exit(0) }
> +             tick-1s { trace("cannot profile pid 0; oversubscribed system?"); exit(2) }'
> +exit $?
> diff --git a/test/unittest/ustack/tst.ufunc-pid0.d b/test/unittest/ustack/tst.ufunc-pid0.d
> index f076782aa..cd34275f1 100644
> --- a/test/unittest/ustack/tst.ufunc-pid0.d
> +++ b/test/unittest/ustack/tst.ufunc-pid0.d
> @@ -1,6 +1,6 @@
>  /*
>   * Oracle Linux DTrace.
> - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.
> + * Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
>   * Licensed under the Universal Permissive License v 1.0 as shown at
>   * http://oss.oracle.com/licenses/upl.
>   */
> @@ -9,7 +9,7 @@
>  
>  #pragma D option quiet
>  
> -tick-1
> +profile-1
>  /pid == $target/
>  {
>      ufunc(ucaller);
> diff --git a/test/unittest/ustack/tst.ufunc-pid0.r.p b/test/unittest/ustack/tst.ufunc-pid0.r.p
> index 9203dc824..78ab8e59d 100755
> --- a/test/unittest/ustack/tst.ufunc-pid0.r.p
> +++ b/test/unittest/ustack/tst.ufunc-pid0.r.p
> @@ -1,4 +1,4 @@
>  #!/usr/bin/gawk -f
>  
> -# remove trailing blanks
> -{ sub(" *$", ""); print }
> +# remove trailing blanks, use only one line
> +{ sub(" *$", ""); print; exit }
> diff --git a/test/unittest/ustack/tst.ufunc-pid0.x b/test/unittest/ustack/tst.ufunc-pid0.x
> new file mode 100755
> index 000000000..b5fe7177a
> --- /dev/null
> +++ b/test/unittest/ustack/tst.ufunc-pid0.x
> @@ -0,0 +1,5 @@
> +#!/bin/sh
> +
> +$dtrace -qn 'profile-100ms /pid == 0/ { exit(0) }
> +             tick-1s { trace("cannot profile pid 0; oversubscribed system?"); exit(2) }'
> +exit $?
> diff --git a/test/unittest/ustack/tst.usym-pid0.d b/test/unittest/ustack/tst.usym-pid0.d
> index d2f5ec5de..9aceab355 100644
> --- a/test/unittest/ustack/tst.usym-pid0.d
> +++ b/test/unittest/ustack/tst.usym-pid0.d
> @@ -1,6 +1,6 @@
>  /*
>   * Oracle Linux DTrace.
> - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.
> + * Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
>   * Licensed under the Universal Permissive License v 1.0 as shown at
>   * http://oss.oracle.com/licenses/upl.
>   */
> @@ -9,7 +9,7 @@
>  
>  #pragma D option quiet
>  
> -tick-1
> +profile-1
>  /pid == $target/
>  {
>      usym(ucaller);
> diff --git a/test/unittest/ustack/tst.usym-pid0.r.p b/test/unittest/ustack/tst.usym-pid0.r.p
> index 9203dc824..78ab8e59d 100755
> --- a/test/unittest/ustack/tst.usym-pid0.r.p
> +++ b/test/unittest/ustack/tst.usym-pid0.r.p
> @@ -1,4 +1,4 @@
>  #!/usr/bin/gawk -f
>  
> -# remove trailing blanks
> -{ sub(" *$", ""); print }
> +# remove trailing blanks, use only one line
> +{ sub(" *$", ""); print; exit }
> diff --git a/test/unittest/ustack/tst.usym-pid0.x b/test/unittest/ustack/tst.usym-pid0.x
> new file mode 100755
> index 000000000..b5fe7177a
> --- /dev/null
> +++ b/test/unittest/ustack/tst.usym-pid0.x
> @@ -0,0 +1,5 @@
> +#!/bin/sh
> +
> +$dtrace -qn 'profile-100ms /pid == 0/ { exit(0) }
> +             tick-1s { trace("cannot profile pid 0; oversubscribed system?"); exit(2) }'
> +exit $?
> -- 
> 2.43.5
> 
> 
> _______________________________________________
> DTrace-devel mailing list
> DTrace-devel at oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/dtrace-devel



More information about the DTrace-devel mailing list