183bd5a34b
Implement the linux_io_* syscalls (AIO). They are only enabled if the native AIO code is available (either compiled in to the kernel or as a module) at the time the functions are used. If the AIO stuff is not available there will be a ENOSYS. From the submitter: ---snip--- DESIGN NOTES: 1. Linux permits a process to own multiple AIO queues (distinguished by "context"), but FreeBSD creates only one single AIO queue per process. My code maintains a request queue (STAILQ of queue(3)) per "context", and throws all AIO requests of all contexts owned by a process into the single FreeBSD per-process AIO queue. When the process calls io_destroy(2), io_getevents(2), io_submit(2) and io_cancel(2), my code can pick out requests owned by the specified context from the single FreeBSD per-process AIO queue according to the per-context request queues maintained by my code. 2. The request queue maintained by my code stores contrast information between Linux IO control blocks (struct linux_iocb) and FreeBSD IO control blocks (struct aiocb). FreeBSD IO control block actually exists in userland memory space, required by FreeBSD native aio_XXXXXX(2). 3. It is quite troubling that the function io_getevents() of libaio-0.3.105 needs to use Linux-specific "struct aio_ring", which is a partial mirror of context in user space. I would rather take the address of context in kernel as the context ID, but the io_getevents() of libaio forces me to take the address of the "ring" in user space as the context ID. To my surprise, one comment line in the file "io_getevents.c" of libaio-0.3.105 reads: Ben will hate me for this REFERENCE: 1. Linux kernel source code: http://www.kernel.org/pub/linux/kernel/v2.6/ (include/linux/aio_abi.h, fs/aio.c) 2. Linux manual pages: http://www.kernel.org/pub/linux/docs/manpages/ (io_setup(2), io_destroy(2), io_getevents(2), io_submit(2), io_cancel(2)) 3. Linux Scalability Effort: http://lse.sourceforge.net/io/aio.html The design notes: http://lse.sourceforge.net/io/aionotes.txt 4. The package libaio, both source and binary: http://rpmfind.net/linux/rpm2html/search.php?query=libaio Simple transparent interface to Linux AIO system calls. 5. Libaio-oracle: http://oss.oracle.com/projects/libaio-oracle/ POSIX AIO implementation based on Linux AIO system calls (depending on libaio). ---snip--- Submitted by: Li, Xiao <intron@intron.ac> |
||
---|---|---|
.. | ||
3dfx | ||
3dfx_linux | ||
aac | ||
accf_data | ||
accf_http | ||
acpi | ||
agp | ||
aha | ||
ahb | ||
aic | ||
aic7xxx | ||
aio | ||
amd | ||
amr | ||
an | ||
aout | ||
apm | ||
ar | ||
arcmsr | ||
arcnet | ||
arl | ||
asr | ||
ata | ||
ath | ||
ath_hal | ||
ath_rate_amrr | ||
ath_rate_onoe | ||
ath_rate_sample | ||
aue | ||
auxio | ||
awi | ||
axe | ||
bce | ||
bfe | ||
bge | ||
bios | ||
bktr | ||
bridgestp | ||
cam | ||
canbepm | ||
canbus | ||
cardbus | ||
cbb | ||
cd9660 | ||
cd9660_iconv | ||
cdce | ||
ce | ||
ciss | ||
cm | ||
coda | ||
coda5 | ||
coff | ||
cp | ||
cpufreq | ||
crypto | ||
cryptodev | ||
cs | ||
ctau | ||
cue | ||
cx | ||
dc | ||
dcons | ||
dcons_crom | ||
de | ||
digi | ||
dpt | ||
drm | ||
dummynet | ||
ed | ||
elink | ||
em | ||
en | ||
ep | ||
esp | ||
ex | ||
exca | ||
ext2fs | ||
fatm | ||
fdc | ||
fdescfs | ||
fe | ||
firewire | ||
firmware | ||
fxp | ||
gem | ||
geom | ||
harp | ||
hatm | ||
hfa | ||
hifn | ||
hme | ||
hpfs | ||
hptmv | ||
hwpmc | ||
i2c | ||
ibcs2 | ||
ichwd | ||
ida | ||
idt | ||
ie | ||
if_bridge | ||
if_disc | ||
if_ef | ||
if_faith | ||
if_gif | ||
if_gre | ||
if_ndis | ||
if_ppp | ||
if_sl | ||
if_stf | ||
if_tap | ||
if_tun | ||
if_vlan | ||
iir | ||
io | ||
ip_mroute_mod | ||
ipdivert | ||
ipfilter | ||
ipfw | ||
ipmi | ||
ips | ||
ipw | ||
isp | ||
ispfw | ||
iwi | ||
ixgb | ||
joy | ||
kbdmux | ||
kue | ||
le | ||
lge | ||
libalias | ||
libiconv | ||
libmbpool | ||
libmchain | ||
linprocfs | ||
linsysfs | ||
linux | ||
lmc | ||
lpt | ||
mac_biba | ||
mac_bsdextended | ||
mac_ifoff | ||
mac_lomac | ||
mac_mls | ||
mac_none | ||
mac_partition | ||
mac_portacl | ||
mac_seeotheruids | ||
mac_stub | ||
mac_test | ||
mcd | ||
md | ||
mem | ||
mfi | ||
mii | ||
mlx | ||
mly | ||
mpt | ||
mqueue | ||
msdosfs | ||
msdosfs_iconv | ||
mse | ||
mxge | ||
my | ||
ncp | ||
ncv | ||
ndis | ||
netgraph | ||
nfe | ||
nfs4client | ||
nfsclient | ||
nfsserver | ||
nge | ||
nmdm | ||
nsp | ||
ntfs | ||
ntfs_iconv | ||
nullfs | ||
nve | ||
nwfs | ||
oltr | ||
padlock | ||
patm | ||
pccard | ||
pcfclock | ||
pcn | ||
pecoff | ||
pf | ||
pflog | ||
plip | ||
pmc | ||
portalfs | ||
powermac_nvram | ||
ppbus | ||
ppc | ||
ppi | ||
pps | ||
procfs | ||
pseudofs | ||
pst | ||
puc | ||
ral | ||
random | ||
ray | ||
rc | ||
rc4 | ||
re | ||
reiserfs | ||
rl | ||
rndtest | ||
rp | ||
rr232x | ||
rue | ||
s3 | ||
safe | ||
sbni | ||
sbsh | ||
scc | ||
scd | ||
scsi_low | ||
sem | ||
sf | ||
sio | ||
sis | ||
sk | ||
slhci | ||
smbfs | ||
sn | ||
snc | ||
snp | ||
sound | ||
speaker | ||
splash | ||
sppp | ||
sr | ||
ste | ||
stg | ||
stge | ||
streams | ||
svr4 | ||
sym | ||
syscons | ||
sysvipc | ||
ti | ||
tl | ||
trm | ||
twa | ||
twe | ||
tx | ||
txp | ||
uart | ||
ubsa | ||
ubsec | ||
ubser | ||
ucom | ||
ucycom | ||
udav | ||
udbp | ||
udf | ||
udf_iconv | ||
ufm | ||
ufoma | ||
ufs | ||
uftdi | ||
ugen | ||
uhid | ||
ukbd | ||
ulpt | ||
umapfs | ||
umass | ||
umct | ||
umodem | ||
ums | ||
unionfs | ||
uplcom | ||
ural | ||
urio | ||
usb | ||
uscanner | ||
utopia | ||
uvisor | ||
uvscom | ||
vesa | ||
vge | ||
vkbd | ||
vpo | ||
vr | ||
vx | ||
wb | ||
wi | ||
wlan | ||
wlan_acl | ||
wlan_ccmp | ||
wlan_tkip | ||
wlan_wep | ||
wlan_xauth | ||
xe | ||
xfs | ||
xl | ||
zlib | ||
Makefile | ||
Makefile.inc |