--- ioscale.tex.orig 2004-06-10 13:55:29.344268986 -0700 +++ ioscale.tex 2004-06-10 13:59:11.755156683 -0700 @@ -138,10 +138,15 @@ \subsection*{Local allocation of consistent DMA mappings} -Consistent DMA mappings are used frequently by drivers to store command -and status buffers. They are frequently read and written by the device -that owns them, so making sure they can be accessed quickly is -important. +Consistent DMA mappings are used frequently by drivers to store +command and status buffers. They are frequently read and written by +the device that owns them, so making sure they can be accessed quickly +is important. The table below shows the difference in the number of +operations per second that can be achieved using local vs. remote +allocation of consistent DMA buffers. Local allocations were +guaranteed by changing the \emph{pci_alloc_consistent} function so +that it calls \emph{alloc_pages_node} using the node closest to the +PCI device in question. \begin{table}[h] \begin{tabular}{|l|l|} @@ -155,6 +160,6 @@ \caption{Local vs. remote DMA buffer allocation} \end{table} -This is a relatively simple change that platforms can make in their -consistent DMA allocation routines, using the Linux NUMA topology API -(though that API may need some changes to make it easy). +Although this change is platform specific, it can be made generic if a +\emph{pci_to_node} or \emph{pci_to_nodemask} routine is added to the +Linux topology API.