24.05.2014 Views

AIX Version 4.3 Differences Guide

AIX Version 4.3 Differences Guide

AIX Version 4.3 Differences Guide

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

performance of network memory buffers (mbufs), filesystem I/O, raw I/O, and<br />

page I/O.<br />

In previous <strong>AIX</strong> versions, during a DMA operation, the majority of pathlength was<br />

spent in page translation/lookup paths to get the virtual to physical address<br />

translations for DMA.<br />

The term pretranslation refers to the concept of performing the virtual to physical<br />

address translations for a data buffer to be involved in a DMA operation once, for<br />

the life of the data buffer, instead of for each individual I/O setup for the buffer. In<br />

general, a subsystem desiring to benefit from the performance gain of<br />

pretranslation calls a new kernel service passing in a buffer address, length, and<br />

cross-memory descriptor. The kernel service will attach to the cross memory<br />

descriptor pretranslation information for the buffer. Then, whenever the buffer is<br />

used for I/O, the DMA services recognize the presence of pretranslation info in<br />

the cross-memory descriptor and avoid page table lookups.<br />

There is no change required by device drivers to take advantage of this<br />

enhancement, as long as a network driver is using mbufs from the global<br />

net_malloc pool and performing dynamic on-the-fly DMA mappings (compared<br />

with copying data to premapped buffers).<br />

4.9 Fast fork() Function (<strong>4.3</strong>.1)<br />

<strong>AIX</strong> <strong>Version</strong> <strong>4.3</strong>.1 introduces a fast-fork function called f_fork() that is based on<br />

IEEE POSIX specifications. The f_fork() call is precisely like fork() except:<br />

• It is required that the child process calls one of the exec functions immediately<br />

after it is created. Since fork handlers are never called, the application data,<br />

mutexes, and the locks are all undefined in the child process.<br />

The use of f_fork() will significantly enhances the performance of Internet and<br />

Web server applications that need to create many short lived child processes.<br />

4.10 New Sockets System Call (<strong>4.3</strong>.2)<br />

<strong>AIX</strong> <strong>4.3</strong>.2 has added the new send_file() system call. Its use is aimed at<br />

applications that transmit file data across the network using a socket connection.<br />

It offers a speed improvement over the traditional method of sending a file across<br />

the network by avoiding unnecessary data copying where possible.<br />

#include <br />

ssize_t send_file(Socket_p, sf_iobuf, flags)<br />

int *Socket_p;<br />

struct sf_parms *sf_iobuf;<br />

uint_t flags;<br />

Using send_file eliminates the need to read a file just to send it across the<br />

network. Applications can remove the read() call, and therefore avoid redundant<br />

transfer of data between kernel space and user space. The send_file call reads<br />

file data into the new Network Buffer Cache (NBC). The NBC is allocated from an<br />

area of the mbuf pool and uses mbufs for file data storage. The networking<br />

subsystem then transmits the data directly from the mbufs in the NBC across the<br />

80 <strong>AIX</strong> <strong>Version</strong> <strong>4.3</strong> <strong>Differences</strong> <strong>Guide</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!