QSBR offline thread micro-optimization
authorMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Wed, 16 Sep 2009 13:39:20 +0000 (09:39 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Wed, 16 Sep 2009 13:39:20 +0000 (09:39 -0400)
commit1a80f35636b70a4f40e0568fbef31b3764035f6f
tree220a75e2c40327cd49f3489be96356747d554813
parent727f819de5737f4be5b9f7e50aacf84c7a3f7999
QSBR offline thread micro-optimization

> That's an interesting paper for sure. I had one micro-optimization in
> mind when I read the paper for QSBR, you can decide that making a CPU
> offline can be done by writing 0 to the per thread counter, instead of
> reading the global counter. It saves a load from a shared variable,
> which probably helps in its tiny way.
>

In wait_for_quiescent_state, the test for Q.S. is :

                while (rcu_gp_ongoing(index->rcu_reader_qs_gp) &&
                       (*index->rcu_reader_qs_gp - urcu_gp_ctr < 0))
                        cpu_relax();

where :

static inline int rcu_gp_ongoing(long *value)
{
        if (value == NULL)
                return 0;

        return LOAD_SHARED(*value) & 1;
}

Your proposal would work for the rcu_gp_ongoing test, as it only checks
for the parity. Given this test is enough to guarantee that we skip the
reader thread, then yes, it seems to work just fine.

Proposed-by: Pierre Habouzit <madcoder@debian.org>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
urcu-qsbr-static.h
This page took 0.025435 seconds and 4 git commands to generate.