Paul Durrant wrote:
 > Andrew Gallatin wrote:
 >>
 >> Does Solaris support DCA yet?  It is *much* better than prefetching
 >> from software.
 >>
 >
 > I didn't think the OS had to specifically get involved in DCA; isn't it
 > up to the device to tag the PCIe transactions suitably for the chipset
 > to pre-load the CPU caches? (Intel were very sketchy on the details of
 > DCA at IDF last year).

Yes.  However, the tags are different depending on what the target
CPU is, and (I think) depending on what chipset is in use.  The
DCA driver, at the very least, enables the DCA function in the chipset
and builds a table of tag values indexed by cpu.

The typical model for a DCA-aware driver on other OSes is to
have code in the rx handler which queries the DCA driver for
the appropriate tag for the CPU it is running on.  If the tag
changes, the hardware is updated.  You can see what we do for
our Linux driver here:

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=981813d8e0a16946f511f4eda17bb4ee4fa2769c

As you can imagine, DCA is perfectly pessimal if you have round-robin
interrupts, since the device will always tag the packet
incorrectly. But assuming a hard binding of interrupts and
applications to CPUs, it saves 30-40% CPU time in benchmarks.  On
Linux receiving a 1500b netperf stream on an 8-way Xeon system, I saw
netperf %cpu go from ~12.5% ( a full CPU at 100%) to less than 9%.

Drew
_______________________________________________
driver-discuss mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/driver-discuss

Reply via email to