diff mbox series

[v4] fzsync: limit sampling time

Message ID 8361c9b264ceb4c212319fcb366d85a854495ffe.1543912963.git.jstancek@redhat.com
State Accepted
Headers show
Series [v4] fzsync: limit sampling time | expand

Commit Message

Jan Stancek Dec. 4, 2018, 8:46 a.m. UTC
Fixes: #429

Sampling can take considerably longer time on single CPU
and very slow systems. This patch limits sampling time to
1/2 of fuzzing runtime. If we don't have enough samples by
that time, stop sampling and use stats we gathered so far.

Signed-off-by: Jan Stancek <jstancek@redhat.com>
---
 include/tst_fuzzy_sync.h | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

Changes in v4:
 - drop comment
 - tweak info message when timeout is reached

Comments

Li Wang Dec. 4, 2018, 9:08 a.m. UTC | #1
On Tue, Dec 4, 2018 at 4:46 PM Jan Stancek <jstancek@redhat.com> wrote:

> +       float rem_p = 1 - tst_timeout_remaining() / pair->exec_time_start;
> +
> +       if ((pair->exec_time_p * SAMPLING_SLICE < rem_p)
> +               && (pair->sampling > 0)) {
> +               tst_res(TINFO, "Stopped sampling at %d (out of %d) samples, "
> +                       "sampling time reached 50% of the total time limit",
> +                       pair->exec_loop, pair->min_samples);

'50%' can not be quoted correctly here, since it makes compiler regard
it as print symbol. Beside this tiny typo issue, I have no more
comment for V4.  LGTM.

../../include/tst_fuzzy_sync.h:592:3: warning: ' ' flag used with ‘%o’
gnu_printf format [-Wformat=]
   tst_res(TINFO, "Stopped sampling at %d (out of %d) samples, "
   ^
../../include/tst_fuzzy_sync.h:592:3: warning: format ‘%o’ expects a
matching ‘unsigned int’ argument [-Wformat=]

# ./shmctl05
tst_test.c:1085: INFO: Timeout per run is 0h 00m 20s
../../../../../include/tst_fuzzy_sync.h:594: INFO: Stopped sampling at
166 (out of 1024) samples, sampling time reached 5036122336437f the
total time limit
Jan Stancek Dec. 4, 2018, 9:14 a.m. UTC | #2
----- Original Message -----
> On Tue, Dec 4, 2018 at 4:46 PM Jan Stancek <jstancek@redhat.com> wrote:
> 
> > +       float rem_p = 1 - tst_timeout_remaining() / pair->exec_time_start;
> > +
> > +       if ((pair->exec_time_p * SAMPLING_SLICE < rem_p)
> > +               && (pair->sampling > 0)) {
> > +               tst_res(TINFO, "Stopped sampling at %d (out of %d) samples,
> > "
> > +                       "sampling time reached 50% of the total time
> > limit",
> > +                       pair->exec_loop, pair->min_samples);
> 
> '50%' can not be quoted correctly here, since it makes compiler regard
> it as print symbol. Beside this tiny typo issue, I have no more
> comment for V4.  LGTM.

*facepalm*, thanks for catching that.

> 
> ../../include/tst_fuzzy_sync.h:592:3: warning: ' ' flag used with ‘%o’
> gnu_printf format [-Wformat=]
>    tst_res(TINFO, "Stopped sampling at %d (out of %d) samples, "
>    ^
> ../../include/tst_fuzzy_sync.h:592:3: warning: format ‘%o’ expects a
> matching ‘unsigned int’ argument [-Wformat=]
> 
> # ./shmctl05
> tst_test.c:1085: INFO: Timeout per run is 0h 00m 20s
> ../../../../../include/tst_fuzzy_sync.h:594: INFO: Stopped sampling at
> 166 (out of 1024) samples, sampling time reached 5036122336437f the
> total time limit
> 
> --
> Regards,
> Li Wang
>
Jan Stancek Dec. 10, 2018, 1:40 p.m. UTC | #3
----- Original Message -----
> Fixes: #429
> 
> Sampling can take considerably longer time on single CPU
> and very slow systems. This patch limits sampling time to
> 1/2 of fuzzing runtime. If we don't have enough samples by
> that time, stop sampling and use stats we gathered so far.

@Richard: Are you OK with v4 (with %% typo fixed)?

> 
> Signed-off-by: Jan Stancek <jstancek@redhat.com>
> ---
>  include/tst_fuzzy_sync.h | 21 ++++++++++++++-------
>  1 file changed, 14 insertions(+), 7 deletions(-)
> 
> Changes in v4:
>  - drop comment
>  - tweak info message when timeout is reached
> 
> diff --git a/include/tst_fuzzy_sync.h b/include/tst_fuzzy_sync.h
> index 03f69b78bc82..0e534bb041f8 100644
> --- a/include/tst_fuzzy_sync.h
> +++ b/include/tst_fuzzy_sync.h
> @@ -70,6 +70,9 @@
>  #ifndef TST_FUZZY_SYNC_H__
>  #define TST_FUZZY_SYNC_H__
>  
> +/* how much of exec time is sampling allowed to take */
> +#define SAMPLING_SLICE 0.5f
> +
>  /** Some statistics for a variable */
>  struct tst_fzsync_stat {
>  	float avg;
> @@ -582,17 +585,21 @@ static inline void tst_fzsync_wait_b(struct
> tst_fzsync_pair *pair)
>  static inline int tst_fzsync_run_a(struct tst_fzsync_pair *pair)
>  {
>  	int exit = 0;
> +	float rem_p = 1 - tst_timeout_remaining() / pair->exec_time_start;
> +
> +	if ((pair->exec_time_p * SAMPLING_SLICE < rem_p)
> +		&& (pair->sampling > 0)) {
> +		tst_res(TINFO, "Stopped sampling at %d (out of %d) samples, "
> +			"sampling time reached 50% of the total time limit",
> +			pair->exec_loop, pair->min_samples);
> +		pair->sampling = 0;
> +		tst_fzsync_pair_info(pair);
> +	}
>  
> -	if (pair->exec_time_p
> -	    < 1 - tst_timeout_remaining() / pair->exec_time_start) {
> +	if (pair->exec_time_p < rem_p) {
>  		tst_res(TINFO,
>  			"Exceeded execution time, requesting exit");
>  		exit = 1;
> -
> -		if (pair->sampling > 0) {
> -			tst_res(TWARN,
> -				"Still sampling, consider increasing LTP_TIMEOUT_MUL");
> -		}
>  	}
>  
>  	if (++pair->exec_loop > pair->exec_loops) {
> --
> 1.8.3.1
> 
> 
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
>
Richard Palethorpe Dec. 10, 2018, 3:10 p.m. UTC | #4
Hell Jan,

Jan Stancek <jstancek@redhat.com> writes:

> ----- Original Message -----
>> Fixes: #429
>> 
>> Sampling can take considerably longer time on single CPU
>> and very slow systems. This patch limits sampling time to
>> 1/2 of fuzzing runtime. If we don't have enough samples by
>> that time, stop sampling and use stats we gathered so far.
>
> @Richard: Are you OK with v4 (with %% typo fixed)?

Yes, thanks.

>
>> 
>> Signed-off-by: Jan Stancek <jstancek@redhat.com>
>> ---
>>  include/tst_fuzzy_sync.h | 21 ++++++++++++++-------
>>  1 file changed, 14 insertions(+), 7 deletions(-)
>> 
>> Changes in v4:
>>  - drop comment
>>  - tweak info message when timeout is reached
>> 
>> diff --git a/include/tst_fuzzy_sync.h b/include/tst_fuzzy_sync.h
>> index 03f69b78bc82..0e534bb041f8 100644
>> --- a/include/tst_fuzzy_sync.h
>> +++ b/include/tst_fuzzy_sync.h
>> @@ -70,6 +70,9 @@
>>  #ifndef TST_FUZZY_SYNC_H__
>>  #define TST_FUZZY_SYNC_H__
>>  
>> +/* how much of exec time is sampling allowed to take */
>> +#define SAMPLING_SLICE 0.5f
>> +
>>  /** Some statistics for a variable */
>>  struct tst_fzsync_stat {
>>  	float avg;
>> @@ -582,17 +585,21 @@ static inline void tst_fzsync_wait_b(struct
>> tst_fzsync_pair *pair)
>>  static inline int tst_fzsync_run_a(struct tst_fzsync_pair *pair)
>>  {
>>  	int exit = 0;
>> +	float rem_p = 1 - tst_timeout_remaining() / pair->exec_time_start;
>> +
>> +	if ((pair->exec_time_p * SAMPLING_SLICE < rem_p)
>> +		&& (pair->sampling > 0)) {
>> +		tst_res(TINFO, "Stopped sampling at %d (out of %d) samples, "
>> +			"sampling time reached 50% of the total time limit",
>> +			pair->exec_loop, pair->min_samples);
>> +		pair->sampling = 0;
>> +		tst_fzsync_pair_info(pair);
>> +	}
>>  
>> -	if (pair->exec_time_p
>> -	    < 1 - tst_timeout_remaining() / pair->exec_time_start) {
>> +	if (pair->exec_time_p < rem_p) {
>>  		tst_res(TINFO,
>>  			"Exceeded execution time, requesting exit");
>>  		exit = 1;
>> -
>> -		if (pair->sampling > 0) {
>> -			tst_res(TWARN,
>> -				"Still sampling, consider increasing LTP_TIMEOUT_MUL");
>> -		}
>>  	}
>>  
>>  	if (++pair->exec_loop > pair->exec_loops) {
>> --
>> 1.8.3.1
>> 
>> 
>> --
>> Mailing list info: https://lists.linux.it/listinfo/ltp
>>
Jan Stancek Dec. 11, 2018, 8:26 a.m. UTC | #5
----- Original Message -----
> Hell Jan,
> 
> Jan Stancek <jstancek@redhat.com> writes:
> 
> > ----- Original Message -----
> >> Fixes: #429
> >> 
> >> Sampling can take considerably longer time on single CPU
> >> and very slow systems. This patch limits sampling time to
> >> 1/2 of fuzzing runtime. If we don't have enough samples by
> >> that time, stop sampling and use stats we gathered so far.
> >
> > @Richard: Are you OK with v4 (with %% typo fixed)?
> 
> Yes, thanks.

Pushed.

Regards,
Jan
diff mbox series

Patch

diff --git a/include/tst_fuzzy_sync.h b/include/tst_fuzzy_sync.h
index 03f69b78bc82..0e534bb041f8 100644
--- a/include/tst_fuzzy_sync.h
+++ b/include/tst_fuzzy_sync.h
@@ -70,6 +70,9 @@ 
 #ifndef TST_FUZZY_SYNC_H__
 #define TST_FUZZY_SYNC_H__
 
+/* how much of exec time is sampling allowed to take */
+#define SAMPLING_SLICE 0.5f
+
 /** Some statistics for a variable */
 struct tst_fzsync_stat {
 	float avg;
@@ -582,17 +585,21 @@  static inline void tst_fzsync_wait_b(struct tst_fzsync_pair *pair)
 static inline int tst_fzsync_run_a(struct tst_fzsync_pair *pair)
 {
 	int exit = 0;
+	float rem_p = 1 - tst_timeout_remaining() / pair->exec_time_start;
+
+	if ((pair->exec_time_p * SAMPLING_SLICE < rem_p)
+		&& (pair->sampling > 0)) {
+		tst_res(TINFO, "Stopped sampling at %d (out of %d) samples, "
+			"sampling time reached 50% of the total time limit",
+			pair->exec_loop, pair->min_samples);
+		pair->sampling = 0;
+		tst_fzsync_pair_info(pair);
+	}
 
-	if (pair->exec_time_p
-	    < 1 - tst_timeout_remaining() / pair->exec_time_start) {
+	if (pair->exec_time_p < rem_p) {
 		tst_res(TINFO,
 			"Exceeded execution time, requesting exit");
 		exit = 1;
-
-		if (pair->sampling > 0) {
-			tst_res(TWARN,
-				"Still sampling, consider increasing LTP_TIMEOUT_MUL");
-		}
 	}
 
 	if (++pair->exec_loop > pair->exec_loops) {