On Thu, Feb 23, 2012 at 4:23 PM, Filippo ARCIDIACONO
<[email protected]> wrote:
> From: Filippo Arcidiacono <[email protected]>
>
> On slow systems it could be needed to increase the max value [us]time
> increment beetween two getrusage calls.
>
> Signed-off-by: Filippo Arcidiacono <[email protected]>
> Signed-off-by: Salvatore Cro <[email protected]>
> ---
>  testcases/kernel/syscalls/getrusage/getrusage04.c |   42 +++++++++++++++++---
>  1 files changed, 35 insertions(+), 7 deletions(-)
>
> diff --git a/testcases/kernel/syscalls/getrusage/getrusage04.c 
> b/testcases/kernel/syscalls/getrusage/getrusage04.c
> index 3bdd3b0..92f8361 100644
> --- a/testcases/kernel/syscalls/getrusage/getrusage04.c
> +++ b/testcases/kernel/syscalls/getrusage/getrusage04.c
> @@ -54,11 +54,22 @@ int TST_TOTAL = 1;
>
>  #define BIAS_MAX      1000
>  #define RECORD_MAX    20
> +#define FACTOR_MAX    10
>
>  #ifndef RUSAGE_THREAD
>  #define RUSAGE_THREAD 1
>  #endif
>
> +static int opt_factor;
> +static char *factor_str;
> +static long factor_nr = 1;
> +
> +option_t child_options[] = {
> +       { "m:", &opt_factor, &factor_str },
> +       { NULL, NULL,         NULL }
> +};
> +
> +static void fusage(void);
>  static void busyloop(long wait);
>  static void setup(void);
>  static void cleanup(void);
> @@ -69,8 +80,9 @@ int main(int argc, char *argv[])
>        unsigned long ulast, udelta, slast, sdelta;
>        int i, lc;
>        char *msg;
> +       char msg_string[BUFSIZ];
>
> -       msg = parse_opts(argc, argv, NULL, NULL);
> +       msg = parse_opts(argc, argv, child_options, fusage);
>        if (msg != NULL)
>                tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
>
> @@ -80,6 +92,11 @@ int main(int argc, char *argv[])
>
>        setup();
>
> +       if (opt_factor)
> +               factor_nr = SAFE_STRTOL(cleanup, factor_str, 0, FACTOR_MAX);
> +
> +       tst_resm(TINFO, "Using %ld as multiply factor for max [us]time 
> increment (1000+%ldus)!", factor_nr, BIAS_MAX * factor_nr);
> +
>        for (lc = 0; TEST_LOOPING(lc); lc++) {
>                Tst_count = 0; i = 0;
>                ulast = 0, slast = 0;
> @@ -95,14 +112,20 @@ int main(int argc, char *argv[])
>                                tst_resm(TINFO, "utime:%12luus; stime:%12luus",
>                                            usage.ru_utime.tv_usec,
>                                            usage.ru_stime.tv_usec);
> -                               if (udelta > 1000+BIAS_MAX)
> -                                       tst_brkm(TFAIL, cleanup,
> -                                                   "utime increased > 
> 1000us:"
> +                               if (udelta > 1000+(BIAS_MAX * factor_nr)) {
> +                                       sprintf(msg_string,
> +                                               "utime increased > %ldus:",
> +                                               1000 + BIAS_MAX * factor_nr);
> +                                       tst_brkm(TFAIL, cleanup, msg_string,
>                                                    " delta = %luus", udelta);
> -                               if (sdelta > 1000+BIAS_MAX)
> -                                       tst_brkm(TFAIL, cleanup,
> -                                                   "stime increased > 
> 1000us:"
> +                               }
> +                               if (sdelta > 1000+(BIAS_MAX * factor_nr)) {
> +                                       sprintf(msg_string,
> +                                               "stime increased > %ldus:",
> +                                               1000 + BIAS_MAX * factor_nr);
> +                                       tst_brkm(TFAIL, cleanup, msg_string,
>                                                    " delta = %luus", sdelta);
> +                               }
>                        }
>                        ulast = usage.ru_utime.tv_usec;
>                        slast = usage.ru_stime.tv_usec;
> @@ -113,6 +136,11 @@ int main(int argc, char *argv[])
>        tst_exit();
>  }
>
> +static void fusage(void)
> +{
> +       printf("  -m n    use n as multiply factor for max [us]time increment 
> (1000+(1000*n)us), default value is 1\n");
> +}
> +
>  static void busyloop(long wait)
>  {
>        while (wait--)
> --
> 1.5.5.6
>
>
> ------------------------------------------------------------------------------
> Virtualization & Cloud Management Using Capacity Planning
> Cloud computing makes use of virtualization - but cloud computing
> also focuses on allowing computing to be delivered as a service.
> http://www.accelacomm.com/jaw/sfnl/114/51521223/
> _______________________________________________
> Ltp-list mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ltp-list

Hi folks,

How to determine the value of factor_nr?
We are running the test on a very slow system (ARMv5, 33MHz)
Even factor_nr is set to 10, the test still get failed with the
following message:

getrusage04    0  TINFO  :  utime:       60000us; stime:      360000us
getrusage04    0  TINFO  :  utime:       60000us; stime:      370000us
getrusage04    0  TINFO  :  utime:       60000us; stime:      390000us
getrusage04    1  TFAIL  :  stime increased > 11000us:

BTW, how can we guarantee that s/udelta is always less than
1000+(BIAS_MAX * factor_nr)us?
What if the kernel is busy handling interrupts?

Thanks.

--
Regards,
Andrew

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to