diff mbox series

acct02: relax ac_btime checks

Message ID 95d94fede00533a07fc604de3252636b094fc8f8.1573550061.git.jstancek@redhat.com
State Accepted
Headers show
Series acct02: relax ac_btime checks | expand

Commit Message

Jan Stancek Nov. 12, 2019, 9:15 a.m. UTC
ac_btime is calculated back from current time and isn't accurate.
Problems include nanoseconds accumulation (lags behind gettimeofday),
suspend/resume isn't taken into account and any adjtime() (like DST
change) will cause ac_btime to jump as well.

Relax the condition to ~2h around gettimeofday value at start of
the test. That should be enough to cover usual DST time jumps.

Signed-off-by: Jan Stancek <jstancek@redhat.com>
---
 testcases/kernel/syscalls/acct/acct02.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

Comments

Petr Vorel Nov. 12, 2019, 12:37 p.m. UTC | #1
Hi Jan,

> ac_btime is calculated back from current time and isn't accurate.
> Problems include nanoseconds accumulation (lags behind gettimeofday),
> suspend/resume isn't taken into account and any adjtime() (like DST
> change) will cause ac_btime to jump as well.

> Relax the condition to ~2h around gettimeofday value at start of
> the test. That should be enough to cover usual DST time jumps.

> Signed-off-by: Jan Stancek <jstancek@redhat.com>
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Tested-by: Petr Vorel <pvorel@suse.cz>
on both 390x and intel.

LGTM, although on in intel I got quite a lot of entries:

acct02.c:202: INFO: Number of accounting file entries tested: 159

> ---
>  testcases/kernel/syscalls/acct/acct02.c | 17 ++++++++---------
>  1 file changed, 8 insertions(+), 9 deletions(-)

> diff --git a/testcases/kernel/syscalls/acct/acct02.c b/testcases/kernel/syscalls/acct/acct02.c
> index 890568b08774..2f1290fa287f 100644
> --- a/testcases/kernel/syscalls/acct/acct02.c
> +++ b/testcases/kernel/syscalls/acct/acct02.c
> @@ -74,7 +74,8 @@ static int verify_acct(void *acc, int elap_time)
>  {
>  	int sys_time  = UNPACK(ACCT_MEMBER(ac_stime));
>  	int user_time = UNPACK(ACCT_MEMBER(ac_stime));
> -	int ret = 0, tmp;
> +	unsigned int btime_diff;
> +	int ret = 0;
>  	float tmp2;
We could rename tmp2 to tmp (but understand if you don't want to bother
with it).

>  	if (strcmp(ACCT_MEMBER(ac_comm), COMMAND)) {
> @@ -83,15 +84,13 @@ static int verify_acct(void *acc, int elap_time)
>  		ret = 1;
>  	}

> -	if (ACCT_MEMBER(ac_btime) < start_time) {
> -		tst_res(TINFO, "ac_btime < %d (%d)", start_time,
> -			ACCT_MEMBER(ac_btime));
> -		ret = 1;
> -	}
> +	if (start_time > ACCT_MEMBER(ac_btime))
> +		btime_diff = start_time - ACCT_MEMBER(ac_btime);
> +	else
> +		btime_diff = ACCT_MEMBER(ac_btime) - start_time;

> -	tmp = ACCT_MEMBER(ac_btime) - start_time;
> -	if (tmp > 1) {
> -		tst_res(TINFO, "ac_btime - %d > 1 (%d)", start_time, tmp);
> +	if (btime_diff > 7200) {
IMHO It's probably obvious that it's time in seconds without digging in git, so
we don't have to bother with a constant definition.

> +		tst_res(TINFO, "ac_btime_diff %u", btime_diff);
>  		ret = 1;
>  	}

Kind regards,
Petr
Jan Stancek Nov. 12, 2019, 12:52 p.m. UTC | #2
----- Original Message -----
> Hi Jan,
> 
> > ac_btime is calculated back from current time and isn't accurate.
> > Problems include nanoseconds accumulation (lags behind gettimeofday),
> > suspend/resume isn't taken into account and any adjtime() (like DST
> > change) will cause ac_btime to jump as well.
> 
> > Relax the condition to ~2h around gettimeofday value at start of
> > the test. That should be enough to cover usual DST time jumps.
> 
> > Signed-off-by: Jan Stancek <jstancek@redhat.com>
> Reviewed-by: Petr Vorel <pvorel@suse.cz>
> Tested-by: Petr Vorel <pvorel@suse.cz>
> on both 390x and intel.
> 
> LGTM, although on in intel I got quite a lot of entries:
> 
> acct02.c:202: INFO: Number of accounting file entries tested: 159

That could be normal if there was something running in the background.
Do you have full output? What was the ac_comm string in those entries?
Petr Vorel Nov. 12, 2019, 1:30 p.m. UTC | #3
Hi Jan,

> > > ac_btime is calculated back from current time and isn't accurate.
> > > Problems include nanoseconds accumulation (lags behind gettimeofday),
> > > suspend/resume isn't taken into account and any adjtime() (like DST
> > > change) will cause ac_btime to jump as well.

> > > Relax the condition to ~2h around gettimeofday value at start of
> > > the test. That should be enough to cover usual DST time jumps.

> > > Signed-off-by: Jan Stancek <jstancek@redhat.com>
> > Reviewed-by: Petr Vorel <pvorel@suse.cz>
> > Tested-by: Petr Vorel <pvorel@suse.cz>
> > on both 390x and intel.

> > LGTM, although on in intel I got quite a lot of entries:

> > acct02.c:202: INFO: Number of accounting file entries tested: 159

> That could be normal if there was something running in the background.
> Do you have full output? What was the ac_comm string in those entries?

OK, this is caused only by compiling LTP on background.
Thus not relevant to us.

Just if you're curious, sending part of output with 530 entries.

Kind regards,
Petr

tst_kconfig.c:62: INFO: Parsing kernel config '/proc/config.gz'
tst_test.c:1215: INFO: Timeout per run is 0h 05m 00s
tst_kconfig.c:62: INFO: Parsing kernel config '/proc/config.gz'
acct02.c:238: INFO: Verifying using 'struct acct_v3'
acct02.c:191: INFO: == entry 1 ==
acct02.c:82: INFO: ac_comm != 'acct02_helper' ('cc1')
acct02.c:98: INFO: ac_uid != 0 (1000)
acct02.c:104: INFO: ac_gid != 0 (100)
acct02.c:131: INFO: ac_exitcode != 32768 (256)
acct02.c:139: INFO: ac_ppid != 755 (760)
acct02.c:191: INFO: == entry 2 ==
acct02.c:82: INFO: ac_comm != 'acct02_helper' ('gcc')
acct02.c:98: INFO: ac_uid != 0 (1000)
acct02.c:104: INFO: ac_gid != 0 (100)
acct02.c:131: INFO: ac_exitcode != 32768 (256)
acct02.c:139: INFO: ac_ppid != 755 (759)
acct02.c:191: INFO: == entry 3 ==
acct02.c:82: INFO: ac_comm != 'acct02_helper' ('configure')
acct02.c:98: INFO: ac_uid != 0 (1000)
acct02.c:104: INFO: ac_gid != 0 (100)
acct02.c:131: INFO: ac_exitcode != 32768 (256)
acct02.c:139: INFO: ac_ppid != 755 (393)
acct02.c:191: INFO: == entry 4 ==
acct02.c:82: INFO: ac_comm != 'acct02_helper' ('grep')
acct02.c:98: INFO: ac_uid != 0 (1000)
acct02.c:104: INFO: ac_gid != 0 (100)
acct02.c:131: INFO: ac_exitcode != 32768 (0)
acct02.c:139: INFO: ac_ppid != 755 (393)
acct02.c:191: INFO: == entry 5 ==
acct02.c:82: INFO: ac_comm != 'acct02_helper' ('cat')
acct02.c:98: INFO: ac_uid != 0 (1000)
acct02.c:104: INFO: ac_gid != 0 (100)
acct02.c:131: INFO: ac_exitcode != 32768 (0)
acct02.c:139: INFO: ac_ppid != 755 (393)
acct02.c:191: INFO: == entry 6 ==
acct02.c:82: INFO: ac_comm != 'acct02_helper' ('mv')
acct02.c:98: INFO: ac_uid != 0 (1000)
acct02.c:104: INFO: ac_gid != 0 (100)
acct02.c:131: INFO: ac_exitcode != 32768 (0)
acct02.c:139: INFO: ac_ppid != 755 (393)
acct02.c:191: INFO: == entry 7 ==
acct02.c:82: INFO: ac_comm != 'acct02_helper' ('sed')
acct02.c:98: INFO: ac_uid != 0 (1000)
acct02.c:104: INFO: ac_gid != 0 (100)
acct02.c:131: INFO: ac_exitcode != 32768 (0)
acct02.c:139: INFO: ac_ppid != 755 (393)
acct02.c:191: INFO: == entry 8 ==
acct02.c:82: INFO: ac_comm != 'acct02_helper' ('rm')
acct02.c:98: INFO: ac_uid != 0 (1000)
acct02.c:104: INFO: ac_gid != 0 (100)
acct02.c:131: INFO: ac_exitcode != 32768 (0)
acct02.c:139: INFO: ac_ppid != 755 (393)
acct02.c:191: INFO: == entry 9 ==
acct02.c:82: INFO: ac_comm != 'acct02_helper' ('grep')
acct02.c:98: INFO: ac_uid != 0 (1000)
acct02.c:104: INFO: ac_gid != 0 (100)
acct02.c:131: INFO: ac_exitcode != 32768 (0)
acct02.c:139: INFO: ac_ppid != 755 (768)
acct02.c:191: INFO: == entry 10 ==
acct02.c:82: INFO: ac_comm != 'acct02_helper' ('configure')
acct02.c:98: INFO: ac_uid != 0 (1000)
acct02.c:104: INFO: ac_gid != 0 (100)
acct02.c:131: INFO: ac_exitcode != 32768 (0)
acct02.c:139: INFO: ac_ppid != 755 (393)
acct02.c:191: INFO: == entry 11 ==
acct02.c:82: INFO: ac_comm != 'acct02_helper' ('configure')
acct02.c:98: INFO: ac_uid != 0 (1000)
acct02.c:104: INFO: ac_gid != 0 (100)
acct02.c:131: INFO: ac_exitcode != 32768 (0)
acct02.c:139: INFO: ac_ppid != 755 (393)

...
acct02.c:191: INFO: == entry 522 ==
acct02.c:82: INFO: ac_comm != 'acct02_helper' ('configure')
acct02.c:98: INFO: ac_uid != 0 (1000)
acct02.c:104: INFO: ac_gid != 0 (100)
acct02.c:131: INFO: ac_exitcode != 32768 (0)
acct02.c:139: INFO: ac_ppid != 755 (1285)
acct02.c:191: INFO: == entry 523 ==
acct02.c:82: INFO: ac_comm != 'acct02_helper' ('cat')
acct02.c:98: INFO: ac_uid != 0 (1000)
acct02.c:104: INFO: ac_gid != 0 (100)
acct02.c:131: INFO: ac_exitcode != 32768 (0)
acct02.c:139: INFO: ac_ppid != 755 (393)
acct02.c:191: INFO: == entry 524 ==
acct02.c:82: INFO: ac_comm != 'acct02_helper' ('configure')
acct02.c:98: INFO: ac_uid != 0 (1000)
acct02.c:104: INFO: ac_gid != 0 (100)
acct02.c:131: INFO: ac_exitcode != 32768 (0)
acct02.c:139: INFO: ac_ppid != 755 (1290)
acct02.c:191: INFO: == entry 525 ==
acct02.c:82: INFO: ac_comm != 'acct02_helper' ('sed')
acct02.c:98: INFO: ac_uid != 0 (1000)
acct02.c:104: INFO: ac_gid != 0 (100)
acct02.c:131: INFO: ac_exitcode != 32768 (0)
acct02.c:139: INFO: ac_ppid != 755 (1292)
acct02.c:191: INFO: == entry 526 ==
acct02.c:82: INFO: ac_comm != 'acct02_helper' ('configure')
acct02.c:98: INFO: ac_uid != 0 (1000)
acct02.c:104: INFO: ac_gid != 0 (100)
acct02.c:131: INFO: ac_exitcode != 32768 (0)
acct02.c:139: INFO: ac_ppid != 755 (1290)
acct02.c:191: INFO: == entry 527 ==
acct02.c:82: INFO: ac_comm != 'acct02_helper' ('configure')
acct02.c:98: INFO: ac_uid != 0 (1000)
acct02.c:104: INFO: ac_gid != 0 (100)
acct02.c:131: INFO: ac_exitcode != 32768 (0)
acct02.c:139: INFO: ac_ppid != 755 (393)
acct02.c:191: INFO: == entry 528 ==
acct02.c:82: INFO: ac_comm != 'acct02_helper' ('cat')
acct02.c:98: INFO: ac_uid != 0 (1000)
acct02.c:104: INFO: ac_gid != 0 (100)
acct02.c:131: INFO: ac_exitcode != 32768 (0)
acct02.c:139: INFO: ac_ppid != 755 (393)
acct02.c:191: INFO: == entry 529 ==
acct02.c:82: INFO: ac_comm != 'acct02_helper' ('rm')
acct02.c:98: INFO: ac_uid != 0 (1000)
acct02.c:104: INFO: ac_gid != 0 (100)
acct02.c:131: INFO: ac_exitcode != 32768 (0)
acct02.c:139: INFO: ac_ppid != 755 (393)
acct02.c:191: INFO: == entry 530 ==
acct02.c:202: INFO: Number of accounting file entries tested: 530
acct02.c:208: PASS: acct() wrote correct file contents!

Summary:
passed   1
failed   0
skipped  0
warnings 0
Cyril Hrubis Nov. 13, 2019, 9:25 a.m. UTC | #4
Hi!
Looks good, acked as well.
Jan Stancek Nov. 13, 2019, 8:08 p.m. UTC | #5
----- Original Message -----
> Hi!
> Looks good, acked as well.

Pushed.
diff mbox series

Patch

diff --git a/testcases/kernel/syscalls/acct/acct02.c b/testcases/kernel/syscalls/acct/acct02.c
index 890568b08774..2f1290fa287f 100644
--- a/testcases/kernel/syscalls/acct/acct02.c
+++ b/testcases/kernel/syscalls/acct/acct02.c
@@ -74,7 +74,8 @@  static int verify_acct(void *acc, int elap_time)
 {
 	int sys_time  = UNPACK(ACCT_MEMBER(ac_stime));
 	int user_time = UNPACK(ACCT_MEMBER(ac_stime));
-	int ret = 0, tmp;
+	unsigned int btime_diff;
+	int ret = 0;
 	float tmp2;
 
 	if (strcmp(ACCT_MEMBER(ac_comm), COMMAND)) {
@@ -83,15 +84,13 @@  static int verify_acct(void *acc, int elap_time)
 		ret = 1;
 	}
 
-	if (ACCT_MEMBER(ac_btime) < start_time) {
-		tst_res(TINFO, "ac_btime < %d (%d)", start_time,
-			ACCT_MEMBER(ac_btime));
-		ret = 1;
-	}
+	if (start_time > ACCT_MEMBER(ac_btime))
+		btime_diff = start_time - ACCT_MEMBER(ac_btime);
+	else
+		btime_diff = ACCT_MEMBER(ac_btime) - start_time;
 
-	tmp = ACCT_MEMBER(ac_btime) - start_time;
-	if (tmp > 1) {
-		tst_res(TINFO, "ac_btime - %d > 1 (%d)", start_time, tmp);
+	if (btime_diff > 7200) {
+		tst_res(TINFO, "ac_btime_diff %u", btime_diff);
 		ret = 1;
 	}