From: Eric Dumazet <eric.dumazet@gmail.com>
To: Stephen Hemminger <shemminger@vyatta.com>,
David Miller <davem@davemloft.net>
Cc: alexander.h.duyck@intel.com, netdev@vger.kernel.org
Subject: [PATCH 2/2 net-next-2.6] net: QDISC_STATE_RUNNING dont need atomic bit ops
Date: Wed, 02 Jun 2010 11:50:33 +0200 [thread overview]
Message-ID: <1275472233.2725.146.camel@edumazet-laptop> (raw)
In-Reply-To: <1274463643.2439.473.camel@edumazet-laptop>
__QDISC_STATE_RUNNING is always changed while qdisc lock is held.
We can avoid two atomic operations in xmit path, if we move this bit in
a new __state container.
Location of this __state container is carefully chosen so that fast path
only dirties one qdisc cache line.
THROTTLED bit could later be moved into this __state location too, to
avoid dirtying first qdisc cache line.
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
---
include/net/sch_generic.h | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
index 9707dae..b3591e4 100644
--- a/include/net/sch_generic.h
+++ b/include/net/sch_generic.h
@@ -23,11 +23,17 @@ struct qdisc_rate_table {
};
enum qdisc_state_t {
- __QDISC_STATE_RUNNING,
__QDISC_STATE_SCHED,
__QDISC_STATE_DEACTIVATED,
};
+/*
+ * following bits are only changed while qdisc lock is held
+ */
+enum qdisc___state_t {
+ __QDISC___STATE_RUNNING,
+};
+
struct qdisc_size_table {
struct list_head list;
struct tc_sizespec szopts;
@@ -72,23 +78,24 @@ struct Qdisc {
unsigned long state;
struct sk_buff_head q;
struct gnet_stats_basic_packed bstats;
+ unsigned long __state;
struct gnet_stats_queue qstats;
struct rcu_head rcu_head;
};
static inline bool qdisc_is_running(struct Qdisc *qdisc)
{
- return test_bit(__QDISC_STATE_RUNNING, &qdisc->state);
+ return test_bit(__QDISC___STATE_RUNNING, &qdisc->__state);
}
static inline bool qdisc_run_begin(struct Qdisc *qdisc)
{
- return !test_and_set_bit(__QDISC_STATE_RUNNING, &qdisc->state);
+ return !__test_and_set_bit(__QDISC___STATE_RUNNING, &qdisc->__state);
}
static inline void qdisc_run_end(struct Qdisc *qdisc)
{
- clear_bit(__QDISC_STATE_RUNNING, &qdisc->state);
+ __clear_bit(__QDISC___STATE_RUNNING, &qdisc->__state);
}
struct Qdisc_class_ops {
next prev parent reply other threads:[~2010-06-02 9:50 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-23 20:25 [RFC PATCH] net: add additional lock to qdisc to increase enqueue/dequeue fairness Alexander Duyck
2010-03-23 20:31 ` David Miller
2010-03-24 2:12 ` Andi Kleen
2010-03-23 20:40 ` Rick Jones
2010-03-23 20:54 ` Eric Dumazet
2010-03-23 21:18 ` Eric Dumazet
2010-03-23 21:45 ` David Miller
2010-03-23 22:08 ` Duyck, Alexander H
2010-03-24 2:58 ` David Miller
2010-03-24 5:42 ` Eric Dumazet
2010-03-24 6:10 ` David Miller
2010-03-23 22:13 ` Eric Dumazet
2010-05-21 15:43 ` Stephen Hemminger
2010-05-21 16:44 ` Eric Dumazet
2010-05-21 17:38 ` Stephen Hemminger
2010-05-21 17:40 ` Eric Dumazet
2010-06-02 9:48 ` Eric Dumazet
2010-06-02 9:49 ` [PATCH 1/2 net-next-2.6] net: Define accessors to manipulate QDISC_STATE_RUNNING Eric Dumazet
2010-06-02 10:24 ` David Miller
2010-06-02 9:50 ` Eric Dumazet [this message]
2010-06-02 10:25 ` [PATCH 2/2 net-next-2.6] net: QDISC_STATE_RUNNING dont need atomic bit ops David Miller
2010-03-24 14:24 ` [RFC PATCH] net: add additional lock to qdisc to increase enqueue/dequeue fairness Eric Dumazet
2010-05-21 15:08 ` [PATCH] net: add additional lock to qdisc to increase throughput Eric Dumazet
2010-05-21 20:04 ` Duyck, Alexander H
2010-06-02 12:10 ` David Miller
2010-06-02 14:52 ` Eric Dumazet
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1275472233.2725.146.camel@edumazet-laptop \
--to=eric.dumazet@gmail.com \
--cc=alexander.h.duyck@intel.com \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
--cc=shemminger@vyatta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.