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
