Speedup nptl/tst-rwlock19.

Message ID 63377b64-9da9-0588-e3d5-92a4f1a1e6d0@linux.ibm.com
State Superseded
Headers

Commit Message

Stefan Liebler Sept. 12, 2019, 12:16 p.m. UTC
  Hi,

the test creates 15 threads which are trying 5000x to pthread_rwlock_rdlock
a modified lock where the number of readers is set to max - 5.  If locked
successfully, it sleeps for 1ms.

The test succeeds if the lock was rdlock'ed successfully for at least
one time and it has failed at least once with EAGAIN and the
number of readers needs to be max - 5 again after all threads have joined.

The test is currently running for 5 seconds.  Thus this patch reduces
the READTRIES from 5000 to 100 and is increasing the DELAY from 1ms to 5ms.
Then the test runs for roughly 0.5 seconds.

Bye,
Stefan

ChangeLog:

	* nptl/tst-rwlock19.c (READTRIES): Reduce to 100.
	(DELAY) Increase to 5000000.
  

Comments

Carlos O'Donell Sept. 12, 2019, 2:14 p.m. UTC | #1
On 9/12/19 8:16 AM, Stefan Liebler wrote:
> Hi,
> 
> the test creates 15 threads which are trying 5000x to pthread_rwlock_rdlock
> a modified lock where the number of readers is set to max - 5.  If locked
> successfully, it sleeps for 1ms.
> 
> The test succeeds if the lock was rdlock'ed successfully for at least
> one time and it has failed at least once with EAGAIN and the
> number of readers needs to be max - 5 again after all threads have joined.
> 
> The test is currently running for 5 seconds.  Thus this patch reduces
> the READTRIES from 5000 to 100 and is increasing the DELAY from 1ms to 5ms.
> Then the test runs for roughly 0.5 seconds.

Why do we need to limit the retries?

The point of the test is to run until we see a successful lock, and a failed
lock with EAGAIN.

It should be possible to make this test robust and so that when we run it
on slower i686 it should jus run until it sees the events it needs to see,
or fail from timeout (indicating a problem).

I'm worried that by limiting the retires we'll see failures on slower or
loaded hardware in the lab, and then we'll have to go back and bump up the
retries again.

The optimal test in my mind is:

- Run forever.
- Look for events of interest.
- Exit success when those events are seen.
- Fail if we timeout.
  

Patch

commit 2792fbbc18473026b2552cc8c2664146233760c4
Author: Stefan Liebler <stli@linux.ibm.com>
Date:   Thu Sep 12 09:19:01 2019 +0200

    Speedup nptl/tst-rwlock19.
    
    The test creates 15 threads which are trying 5000x to pthread_rwlock_rdlock
    a modified lock where the number of readers is set to max - 5.  If locked
    successfully, it sleeps for 1ms.
    
    The test succeeds if the lock was rdlock'ed successfully for at least
    one time and it has failed at least once with EAGAIN and the
    number of readers needs to be max - 5 again after all threads have joined.
    
    The test is currently running for 5 seconds.  Thus this patch reduces
    the READTRIES from 5000 to 100 and is increasing the DELAY from 1ms to 5ms.
    Then the test runs for roughly 0.5 seconds.
    
    ChangeLog:
    
            * nptl/tst-rwlock19.c (READTRIES): Reduce to 100.
            (DELAY) Increase to 5000000.

diff --git a/nptl/tst-rwlock19.c b/nptl/tst-rwlock19.c
index 19d40c11ca..3f98ef69f6 100644
--- a/nptl/tst-rwlock19.c
+++ b/nptl/tst-rwlock19.c
@@ -26,9 +26,9 @@ 
 
 
 #define NREADERS 15
-#define READTRIES 5000
+#define READTRIES 100
 
-#define DELAY   1000000
+#define DELAY   5000000
 
 static pthread_rwlock_t lock = PTHREAD_RWLOCK_INITIALIZER;
 static int eagain_returned = 0;