public inbox for dtrace@lists.linux.dev
 help / color / mirror / Atom feed
From: Kris Van Hees <kris.van.hees@oracle.com>
To: Kris Van Hees <kris.van.hees@oracle.com>
Cc: eugene.loh@oracle.com, dtrace@lists.linux.dev,
	dtrace-devel@oss.oracle.com
Subject: Re: [DTrace-devel] [PATCH v2] test: stack_fbt
Date: Wed, 20 Nov 2024 14:38:41 -0500	[thread overview]
Message-ID: <Zz46wQyI22cZMdFU@oracle.com> (raw)
In-Reply-To: <Zz43EAAB87FOttWG@oracle.com>

On Wed, Nov 20, 2024 at 02:22:56PM -0500, Kris Van Hees wrote:
> On Thu, Nov 07, 2024 at 06:28:41PM -0500, eugene.loh--- via DTrace-devel wrote:
> > From: Eugene Loh <eugene.loh@oracle.com>
> > 
> > The test was being skipped on UEKR7 systems because __vfs_write
> > was no longer traceable.  The expected stack on UEKR6 x86_64 was
> > out of date.
> > 
> > Switch to fbt::vfs_write:entry.  Convert to a .sh test, so that
> > different stacks can be expected depending both on machine type
> > and release number.
> > 
> > Signed-off-by: Eugene Loh <eugene.loh@oracle.com>
> 
> Reviewed-by: Kris Van Hees <kris.van.hees@oracle.com>
> 
> ... with small changes as shown below.

Also...  the full stack output comparison is riddled with issues because the
low level entry point handling for syscalls is an atrea that has changed a
lot and still changes.  E.g. this test fails now on a 6.8.8 upstream kernel
because of the following difference:

<               vmlinux`entry_SYSCALL_64+{ptr}
---
>               vmlinux`entry_SYSCALL_64_after_hwframe+{ptr}

Maybe it would be better to not bother trying to test the full stack trace
because it is bound to keep changing and we'll keep needing to update the
test to deal with various kernel versions.  After all, we do need to be able
to pass tests with upstream kernels also.

> > ---
> >  test/unittest/stack/tst.stack3_fbt.aarch64.r |  11 --
> >  test/unittest/stack/tst.stack3_fbt.d         |  25 ----
> >  test/unittest/stack/tst.stack3_fbt.x         |   1 -
> >  test/unittest/stack/tst.stack3_fbt.x86_64.r  |  11 --
> >  test/unittest/stack/tst.stack_fbt.aarch64.r  |  14 ---
> >  test/unittest/stack/tst.stack_fbt.d          |  25 ----
> >  test/unittest/stack/tst.stack_fbt.sh         | 122 +++++++++++++++++++
> >  test/unittest/stack/tst.stack_fbt.x          |  10 --
> >  test/unittest/stack/tst.stack_fbt.x86_64.r   |  13 --
> >  9 files changed, 122 insertions(+), 110 deletions(-)
> >  delete mode 100644 test/unittest/stack/tst.stack3_fbt.aarch64.r
> >  delete mode 100644 test/unittest/stack/tst.stack3_fbt.d
> >  delete mode 120000 test/unittest/stack/tst.stack3_fbt.x
> >  delete mode 100644 test/unittest/stack/tst.stack3_fbt.x86_64.r
> >  delete mode 100644 test/unittest/stack/tst.stack_fbt.aarch64.r
> >  delete mode 100644 test/unittest/stack/tst.stack_fbt.d
> >  create mode 100755 test/unittest/stack/tst.stack_fbt.sh
> >  delete mode 100755 test/unittest/stack/tst.stack_fbt.x
> >  delete mode 100644 test/unittest/stack/tst.stack_fbt.x86_64.r
> > 
> > diff --git a/test/unittest/stack/tst.stack3_fbt.aarch64.r b/test/unittest/stack/tst.stack3_fbt.aarch64.r
> > deleted file mode 100644
> > index 5c8bfaed2..000000000
> > --- a/test/unittest/stack/tst.stack3_fbt.aarch64.r
> > +++ /dev/null
> > @@ -1,11 +0,0 @@
> > -                   FUNCTION:NAME
> > -                          :BEGIN 
> > -               __vfs_write:entry 
> > -              vmlinux`__vfs_write
> > -              vmlinux`ksys_write+{ptr}
> > -              vmlinux`__arm64_sys_write+{ptr}
> > -
> > -
> > --- @@stderr --
> > -dtrace: script 'test/unittest/stack/tst.stack3_fbt.d' matched 2 probes
> > -dtrace: allowing destructive actions
> > diff --git a/test/unittest/stack/tst.stack3_fbt.d b/test/unittest/stack/tst.stack3_fbt.d
> > deleted file mode 100644
> > index 1a2eaf582..000000000
> > --- a/test/unittest/stack/tst.stack3_fbt.d
> > +++ /dev/null
> > @@ -1,25 +0,0 @@
> > -/*
> > - * Oracle Linux DTrace.
> > - * Copyright (c) 2021, 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.
> > - */
> > -
> > -/*
> > - * ASSERTION: Test the stack action with depth 3.
> > - *
> > - * SECTION: Output Formatting/printf()
> > - */
> > -
> > -#pragma D option destructive
> > -
> > -BEGIN
> > -{
> > -	system("echo write something > /dev/null");
> > -}
> > -
> > -fbt::__vfs_write:entry
> > -{
> > -	stack(3);
> > -	exit(0);
> > -}
> > diff --git a/test/unittest/stack/tst.stack3_fbt.x b/test/unittest/stack/tst.stack3_fbt.x
> > deleted file mode 120000
> > index fe0d493c5..000000000
> > --- a/test/unittest/stack/tst.stack3_fbt.x
> > +++ /dev/null
> > @@ -1 +0,0 @@
> > -tst.stack_fbt.x
> > \ No newline at end of file
> > diff --git a/test/unittest/stack/tst.stack3_fbt.x86_64.r b/test/unittest/stack/tst.stack3_fbt.x86_64.r
> > deleted file mode 100644
> > index f24c8cba5..000000000
> > --- a/test/unittest/stack/tst.stack3_fbt.x86_64.r
> > +++ /dev/null
> > @@ -1,11 +0,0 @@
> > -                   FUNCTION:NAME
> > -                          :BEGIN 
> > -               __vfs_write:entry 
> > -              vmlinux`__vfs_write+{ptr}
> > -              vmlinux`ksys_write+{ptr}
> > -              vmlinux`__x64_sys_write+{ptr}
> > -
> > -
> > --- @@stderr --
> > -dtrace: script 'test/unittest/stack/tst.stack3_fbt.d' matched 2 probes
> > -dtrace: allowing destructive actions
> > diff --git a/test/unittest/stack/tst.stack_fbt.aarch64.r b/test/unittest/stack/tst.stack_fbt.aarch64.r
> > deleted file mode 100644
> > index 3a2896c48..000000000
> > --- a/test/unittest/stack/tst.stack_fbt.aarch64.r
> > +++ /dev/null
> > @@ -1,14 +0,0 @@
> > -                   FUNCTION:NAME
> > -                          :BEGIN 
> > -               __vfs_write:entry 
> > -              vmlinux`__vfs_write
> > -              vmlinux`ksys_write+{ptr}
> > -              vmlinux`__arm64_sys_write+{ptr}
> > -              vmlinux`el0_svc_common+{ptr}
> > -              vmlinux`el0_svc_handler+{ptr}
> > -              vmlinux`el0_svc+{ptr}
> > -
> > -
> > --- @@stderr --
> > -dtrace: script 'test/unittest/stack/tst.stack_fbt.d' matched 2 probes
> > -dtrace: allowing destructive actions
> > diff --git a/test/unittest/stack/tst.stack_fbt.d b/test/unittest/stack/tst.stack_fbt.d
> > deleted file mode 100644
> > index 27db21164..000000000
> > --- a/test/unittest/stack/tst.stack_fbt.d
> > +++ /dev/null
> > @@ -1,25 +0,0 @@
> > -/*
> > - * Oracle Linux DTrace.
> > - * Copyright (c) 2021, 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.
> > - */
> > -
> > -/*
> > - * ASSERTION: Test the stack action with the default stack depth.
> > - *
> > - * SECTION: Output Formatting/printf()
> > - */
> > -
> > -#pragma D option destructive
> > -
> > -BEGIN
> > -{
> > -	system("echo write something > /dev/null");
> > -}
> > -
> > -fbt::__vfs_write:entry
> > -{
> > -	stack();
> > -	exit(0);
> > -}
> > diff --git a/test/unittest/stack/tst.stack_fbt.sh b/test/unittest/stack/tst.stack_fbt.sh
> > new file mode 100755
> > index 000000000..e60c519c8
> > --- /dev/null
> > +++ b/test/unittest/stack/tst.stack_fbt.sh
> > @@ -0,0 +1,122 @@
> > +#!/bin/bash
> > +#
> > +# Oracle Linux DTrace.
> > +# Copyright (c) 2024, 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.
> > +#
> > +# This test verifies the nusdtprobes option.
> 
> Surely this is a copy'n'paste error and should be removed?  Or rather, it 
> should be replaced with a message that actually states what this test
> exercises/verifies?
> 
> Shall I make it:
> 
> 	Test the stack action with default stack depth and depth 3.
> 
> > +
> > +dtrace=$1
> > +
> > +# Set up test directory.
> > +
> > +DIRNAME=$tmpdir/stack_fbt.$$.$RANDOM
> > +mkdir -p $DIRNAME
> > +cd $DIRNAME
> > +
> > +# Use DTrace to capture stack() at vfs_write:entry.
> > +
> > +$dtrace $dt_flags $nusdt -wqn '
> 
> I assume $nusdt should not be used here.
> 
> > +BEGIN
> > +{
> > +	system("echo write something > /dev/null");
> > +}
> > +
> > +fbt::vfs_write:entry
> > +{
> > +	stack();
> > +	printf("first 3 frames\n");
> > +	stack(3);
> > +	exit(0);
> > +}' >& dtrace.out
> > +
> > +if [ $? -ne 0 ]; then
> > +	echo ERROR: dtrace failed
> > +	cat dtrace.out
> > +	exit 1
> > +fi
> > +
> > +# Strip out blank lines and pointer values.
> > +
> > +awk 'NF != 0 { sub(/+0x[0-9a-f]*$/, "+{ptr}"); print }' dtrace.out > dtrace.post
> > +if [ $? -ne 0 ]; then
> > +	echo ERROR: awk failed
> > +	cat dtrace.out
> > +	exit 1
> > +fi
> > +
> > +# Figure out what stack to expect.
> > +
> > +read MAJOR MINOR <<< `uname -r | grep -Eo '^[0-9]+\.[0-9]+' | tr '.' ' '`
> > +
> > +if [ $MAJOR -eq 5 -a $MINOR -lt 8 ]; then
> > +	# up to 5.8
> > +	KERVER="A"
> > +else
> > +	# starting at 5.8
> > +	KERVER="B"
> > +fi
> > +
> > +if [ $(uname -m) == "x86_64" -a $KERVER == "A" ]; then
> > +cat << EOF > dtrace.cmp
> > +              vmlinux\`vfs_write+{ptr}
> > +              vmlinux\`__x64_sys_write+{ptr}
> > +              vmlinux\`x64_sys_call+{ptr}
> > +              vmlinux\`do_syscall_64+{ptr}
> > +              vmlinux\`entry_SYSCALL_64+{ptr}
> > +EOF
> > +elif [ $(uname -m) == "aarch64" -a $KERVER == "A" ]; then
> > +cat << EOF > dtrace.cmp
> > +              vmlinux\`vfs_write
> > +              vmlinux\`__arm64_sys_write+{ptr}
> > +              vmlinux\`el0_svc_common+{ptr}
> > +              vmlinux\`el0_svc_handler+{ptr}
> > +              vmlinux\`el0_svc+{ptr}
> > +EOF
> > +elif [ $(uname -m) == "x86_64" -a $KERVER == "B" ]; then
> > +cat << EOF > dtrace.cmp
> > +              vmlinux\`vfs_write+{ptr}
> > +              vmlinux\`ksys_write+{ptr}
> > +              vmlinux\`do_syscall_64+{ptr}
> > +              vmlinux\`entry_SYSCALL_64+{ptr}
> > +EOF
> > +elif [ $(uname -m) == "aarch64" -a $KERVER == "B" ]; then
> > +cat << EOF > dtrace.cmp
> > +              vmlinux\`vfs_write
> > +              vmlinux\`__arm64_sys_write+{ptr}
> > +              vmlinux\`invoke_syscall+{ptr}
> > +              vmlinux\`el0_svc_common+{ptr}
> > +              vmlinux\`do_el0_svc+{ptr}
> > +              vmlinux\`el0_svc+{ptr}
> > +              vmlinux\`el0t_64_sync_handler+{ptr}
> > +              vmlinux\`el0t_64_sync+{ptr}
> > +EOF
> > +else
> > +	echo ERROR: unrecognized platform
> > +	uname -r
> > +	uname -m
> > +	exit 1
> > +fi
> > +
> > +# Add the first 3 frames a second time.
> > +
> > +head -3 dtrace.cmp > dtrace.tmp
> > +echo first 3 frames >> dtrace.cmp
> > +cat dtrace.tmp >> dtrace.cmp
> > +
> > +# Compare results.
> > +
> > +if ! diff -q dtrace.cmp dtrace.post; then
> > +	echo ERROR: results do not match
> > +	diff dtrace.cmp dtrace.post
> > +	echo "==== expect"
> > +	cat dtrace.cmp
> > +	echo "==== actual"
> > +	cat dtrace.out
> > +	exit 1
> > +fi
> > +
> > +echo success
> > +
> > +exit 0
> > diff --git a/test/unittest/stack/tst.stack_fbt.x b/test/unittest/stack/tst.stack_fbt.x
> > deleted file mode 100755
> > index 4561df8bb..000000000
> > --- a/test/unittest/stack/tst.stack_fbt.x
> > +++ /dev/null
> > @@ -1,10 +0,0 @@
> > -#!/bin/bash
> > -
> > -read MAJOR MINOR <<< `uname -r | grep -Eo '^[0-9]+\.[0-9]+' | tr '.' ' '`
> > -
> > -if [ $MAJOR -eq 5 -a $MINOR -lt 8 ]; then
> > -	exit 0
> > -else
> > -	echo "Function __vfs_write no longer exists starting in 5.8"
> > -	exit 2
> > -fi
> > diff --git a/test/unittest/stack/tst.stack_fbt.x86_64.r b/test/unittest/stack/tst.stack_fbt.x86_64.r
> > deleted file mode 100644
> > index 792ce80ad..000000000
> > --- a/test/unittest/stack/tst.stack_fbt.x86_64.r
> > +++ /dev/null
> > @@ -1,13 +0,0 @@
> > -                   FUNCTION:NAME
> > -                          :BEGIN 
> > -               __vfs_write:entry 
> > -              vmlinux`__vfs_write+{ptr}
> > -              vmlinux`ksys_write+{ptr}
> > -              vmlinux`__x64_sys_write+{ptr}
> > -              vmlinux`do_syscall_64+{ptr}
> > -              vmlinux`entry_SYSCALL_64+{ptr}
> > -
> > -
> > --- @@stderr --
> > -dtrace: script 'test/unittest/stack/tst.stack_fbt.d' matched 2 probes
> > -dtrace: allowing destructive actions
> > -- 
> > 2.43.5
> > 
> > 
> > _______________________________________________
> > DTrace-devel mailing list
> > DTrace-devel@oss.oracle.com
> > https://oss.oracle.com/mailman/listinfo/dtrace-devel

  reply	other threads:[~2024-11-20 19:38 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-07 23:28 [PATCH v2] test: stack_fbt eugene.loh
2024-11-20 19:22 ` [DTrace-devel] " Kris Van Hees
2024-11-20 19:38   ` Kris Van Hees [this message]
2024-11-20 20:39     ` Eugene Loh
2024-11-20 20:53       ` Kris Van Hees
2024-11-20 20:28   ` Eugene Loh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Zz46wQyI22cZMdFU@oracle.com \
    --to=kris.van.hees@oracle.com \
    --cc=dtrace-devel@oss.oracle.com \
    --cc=dtrace@lists.linux.dev \
    --cc=eugene.loh@oracle.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox