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)
> 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>

No differences found
This page took 0.024807 seconds and 4 git commands to generate.