git: serialize: Optimize atomic_intr_cond_{enter,try,exit}()
Sepherosa Ziehau
sephe at crater.dragonflybsd.org
Tue Jan 7 03:59:49 PST 2014
commit 24befe94b31f6491cdca91f4f4f87bbd74787db1
Author: Sepherosa Ziehau <sephe at dragonflybsd.org>
Date: Fri Jan 3 20:10:32 2014 +0800
serialize: Optimize atomic_intr_cond_{enter,try,exit}()
Use counter (30bits) of __atomic_intr_t as wait counter instead of request
counter:
- This avoids counter updates in atomic_intr_cond_try().
- Move counter decrement from atomic_intr_cond_exit() to
atomic_intr_cond_enter().
- Try obtaining intr_cond first in atomic_intr_cond_enter(). If the try
failed, counter would be incremented then.
This reduces the number of locked bus cycle intructions.
- For "try ok/exit" sequence: 4 -> 2.
- For "try fail": 3 -> 1.
- For uncontended "enter/exit" sequence: 3 -> 2
For contended "enter/exit" sequence, this increases the number of locked
bus cycle intructions from 3 to 4. Compared with the sleep, this should
be relatively cheap.
Tested on 8 HT (i7-3770) box, using kq_accept_server/kq_connect_client:
- 4/4 TX/RX rings device (BCM5719, using MSI-X), slight improvement.
- 8/8 TX/RX rings device (Intel 82580, using MSI-X), slight improvement.
- 1/2 TX/RX rings device (Intel 82599, using MSI), no observable
improvement.
Summary of changes:
sys/cpu/i386/include/atomic.h | 15 +++++++--------
sys/cpu/x86_64/include/atomic.h | 15 +++++++--------
2 files changed, 14 insertions(+), 16 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/24befe94b31f6491cdca91f4f4f87bbd74787db1
--
DragonFly BSD source repository
More information about the Commits
mailing list