[stgt] [PATCH 0/1] nonblocking epoll_wait loop, sched events, ISER/IB polling

Alexander Nezhinsky nezhinsky at gmail.com
Thu Sep 18 20:35:48 CEST 2008

This patch introduces a few interconnected improvements, that 
ultimately lead to significant reduction in interrupts rate 
for iser/ib, while adding flexibility to tgtd event processing scheme.

First, it implements a kind of "scheduler" list, to replace the
counter events. Event handlers can schedule another events that are
placed on the scheduler's loop. This has some small advantages in 
itself, because the same event descriptor is used for all events 
in the system, events are executed in order they'd been scheduled, 
they can be removed from list, few instances of the same event 
may be scheduled. 

But the most important change is the logic of the processing loop,
as a whole. It goes as follows: 

The scheduler checks events on the list, does their processing, 
which can schedule more items, but does not process the new items 
(in order to avoid infinite/long loops).

If after processing all "old" events, some "new" ones were scheduled,
epoll_wait() is executed in non-blocking manner. This guarantees
that the file descriptors that became ready during the scheduler
processing are handled, but if there no ready fds, the remaining 
scheduler events are processed immediately.  

But if after processing the scheduler list nothing new is added, 
then epoll_wait is blocking as in the current scheme.

This way we can be very flexible, because event handlers and deferred 
work can not block one another. Potentially long handlers can be 
split into shorter ones easily without blocking the entire target.

Finally, IB completion queue is the first guy who benefits, because 
we can postpone interrupt re-arming, until no completion entries 
remain, and to schedule CQ draining after all events are serviced.

Thus in iSER IB there is a marked interrupts rate reduction.
Here are typical results:
Current target: 62-65 KIOPS, ~110,000 interrupt/sec, CPU% ~68%
Patched target: 65-70 KIOPS,  ~65,000 interrupt/sec, CPU% ~65%

To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

More information about the stgt mailing list