android_kernel_samsung_univ.../include/linux
Mingming Cao 89747d369d [PATCH] ext3_get_blocks: Mapping multiple blocks at a once
Currently ext3_get_block() only maps or allocates one block at a time.  This
is quite inefficient for sequential IO workload.

I have posted a early implements a simply multiple block map and allocation
with current ext3.  The basic idea is allocating the 1st block in the existing
way, and attempting to allocate the next adjacent blocks on a best effort
basis.  More description about the implementation could be found here:
http://marc.theaimsgroup.com/?l=ext2-devel&m=112162230003522&w=2

The following the latest version of the patch: break the original patch into 5
patches, re-worked some logicals, and fixed some bugs.  The break ups are:

 [patch 1] Adding map multiple blocks at a time in ext3_get_blocks()
 [patch 2] Extend ext3_get_blocks() to support multiple block allocation
 [patch 3] Implement multiple block allocation in ext3-try-to-allocate
 (called via ext3_new_block()).
 [patch 4] Proper accounting updates in ext3_new_blocks()
 [patch 5] Adjust reservation window size properly (by the given number
 of blocks to allocate) before block allocation to increase the
 possibility of allocating multiple blocks in a single call.

Tests done so far includes fsx,tiobench and dbench.  The following numbers
collected from Direct IO tests (1G file creation/read) shows the system time
have been greatly reduced (more than 50% on my 8 cpu system) with the patches.

 1G file DIO write:
 	2.6.15		2.6.15+patches
 real    0m31.275s	0m31.161s
 user    0m0.000s	0m0.000s
 sys     0m3.384s	0m0.564s

 1G file DIO read:
 	2.6.15		2.6.15+patches
 real    0m30.733s	0m30.624s
 user    0m0.000s	0m0.004s
 sys     0m0.748s	0m0.380s

Some previous test we did on buffered IO with using multiple blocks allocation
and delayed allocation shows noticeable improvement on throughput and system
time.

This patch:

Add support of mapping multiple blocks in one call.

This is useful for DIO reads and re-writes (where blocks are already
allocated), also is in line with Christoph's proposal of using getblocks() in
mpage_readpage() or mpage_readpages().

Signed-off-by: Mingming Cao <cmm@us.ibm.com>
Cc: Badari Pulavarty <pbadari@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-03-26 08:57:00 -08:00
..
amba
byteorder
dvb
hdlc
isdn
lockd
mmc
mtd
netfilter
netfilter_arp
netfilter_bridge
netfilter_ipv4
netfilter_ipv6
nfsd
raid
spi
sunrpc
tc_act
tc_ematch
8250_pci.h
a.out.h
ac97_codec.h
acct.h
acpi.h
adb.h
adfs_fs_i.h
adfs_fs_sb.h
adfs_fs.h
affs_fs.h
affs_hardblocks.h
agp_backend.h
agpgart.h
aio_abi.h
aio.h
amifd.h
amifdreg.h
amigaffs.h
apm_bios.h
arcdevice.h
arcfb.h
ata.h
atalk.h
atm_eni.h
atm_he.h
atm_idt77105.h
atm_nicstar.h
atm_suni.h
atm_tcp.h
atm_zatm.h
atm.h
atmapi.h
atmarp.h
atmbr2684.h
atmclip.h
atmdev.h
atmioc.h
atmlec.h
atmmpc.h
atmppp.h
atmsap.h
atmsvc.h
attribute_container.h
audit.h
auto_fs4.h
auto_fs.h
auxvec.h
awe_voice.h
ax25.h
b1lli.h
b1pcmcia.h
backing-dev.h
backlight.h
baycom.h
bcd.h
bfs_fs.h
binfmts.h
bio.h
bit_spinlock.h
bitmap.h
bitops.h
blkdev.h
blkpg.h
blktrace_api.h
blockgroup_lock.h
bootmem.h
bpqether.h
buffer_head.h [PATCH] Make address_space_operations->invalidatepage return void 2006-03-26 08:56:55 -08:00
cache.h
calc64.h
capability.h
capi.h
cciss_ioctl.h
cd1400.h
cdev.h
cdk.h
cdrom.h
chio.h
circ_buf.h
clk.h
cm4000_cs.h
cn_proc.h
cobalt-nvram.h
coda_cache.h
coda_fs_i.h
coda_linux.h
coda_proc.h
coda_psdev.h
coda.h
coff.h
com20020.h
compat_ioctl.h
compat.h [PATCH] consolidate sys32/compat_adjtimex 2006-03-26 08:56:57 -08:00
compiler-gcc3.h
compiler-gcc4.h
compiler-gcc.h
compiler-intel.h
compiler.h
completion.h
comstats.h
concap.h
config.h
configfs.h
connector.h
console_struct.h
console.h
consolemap.h
cpu.h
cpufreq.h
cpumask.h
cpuset.h
cramfs_fs_sb.h
cramfs_fs.h
crash_dump.h
crc16.h
crc32.h
crc32c.h
crc-ccitt.h
crypto.h
cryptohash.h
ctype.h
cuda.h
cyclades.h
cyclomx.h
cycx_cfm.h
cycx_drv.h
cycx_x25.h
dcache.h
dccp.h
dcookies.h
debugfs.h
delay.h
devfs_fs_kernel.h
devfs_fs.h
device-mapper.h
device.h
devpts_fs.h
dio.h
dirent.h
divert.h
dm9000.h
dm-ioctl.h
dma-mapping.h
dmapool.h
dmi.h
dn.h
dnotify.h
dqblk_v1.h
dqblk_v2.h
dqblk_xfs.h
ds1286.h
ds1742rtc.h
ds17287rtc.h
dtlk.h
edd.h
efi.h [PATCH] EFI: keep physical table addresses in efi structure 2006-03-26 08:56:54 -08:00
efs_dir.h
efs_fs_i.h
efs_fs_sb.h
efs_fs.h
efs_vh.h
eisa.h
elevator.h
elf-fdpic.h
elf.h
elfcore.h
err.h
errno.h
errqueue.h
etherdevice.h
ethtool.h
eventpoll.h
ext2_fs_sb.h
ext2_fs.h
ext3_fs_i.h
ext3_fs_sb.h
ext3_fs.h [PATCH] ext3_get_blocks: Mapping multiple blocks at a once 2006-03-26 08:57:00 -08:00
ext3_jbd.h
fadvise.h
fb.h
fcdevice.h
fcntl.h
fd1772.h
fd.h
fddidevice.h
fdreg.h
file.h
filter.h
firmware.h
flat.h
font.h
fs_enet_pd.h
fs_struct.h
fs.h [PATCH] 2TB files: add blkcnt_t 2006-03-26 08:57:00 -08:00
fsl_devices.h
fsnotify.h
ftape-header-segment.h
ftape-vendors.h
ftape.h
fuse.h
futex.h
gameport.h
gen_stats.h
genalloc.h
generic_serial.h
genetlink.h
genhd.h
gfp.h
hardirq.h
harrier_defs.h
hash.h
hayesesp.h
hdlc.h
hdlcdrv.h
hdpu_features.h
hdreg.h
hdsmart.h
hiddev.h
highmem.h [PATCH] Add flush_kernel_dcache_page() API 2006-03-26 08:56:53 -08:00
highuid.h
hil_mlc.h
hil.h
hippidevice.h
hp_sdc.h
hpet.h [PATCH] hpet header sanitization 2006-03-26 08:56:56 -08:00
hpfs_fs.h
hrtimer.h
hugetlb.h
hwmon-sysfs.h
hwmon-vid.h
hwmon.h
hysdn_if.h
i2c-algo-bit.h
i2c-algo-ite.h
i2c-algo-pca.h
i2c-algo-pcf.h
i2c-algo-sgi.h
i2c-algo-sibyte.h
i2c-dev.h
i2c-id.h
i2c-isa.h
i2c-pxa.h
i2c.h
i2o-dev.h
i2o.h [PATCH] mempool: use mempool_create_slab_pool() 2006-03-26 08:57:00 -08:00
i8k.h
ibmtr.h
icmp.h
icmpv6.h
ide.h
idr.h
if_arcnet.h
if_arp.h
if_bonding.h
if_bridge.h
if_cablemodem.h
if_ec.h
if_eql.h
if_ether.h
if_fc.h
if_fddi.h
if_frad.h
if_hippi.h
if_infiniband.h
if_ltalk.h
if_packet.h
if_plip.h
if_ppp.h
if_pppox.h
if_shaper.h
if_slip.h
if_strip.h
if_tr.h
if_tun.h
if_tunnel.h
if_vlan.h
if_wanpipe_common.h
if_wanpipe.h
if.h
igmp.h
in6.h
in_route.h
in.h
inet_diag.h
inet.h
inetdevice.h
init_task.h
init.h
initrd.h
inotify.h
input.h
interrupt.h
io.h
ioc3.h
ioc4.h
ioctl32.h
ioctl.h
ioport.h
ioprio.h
ip6_tunnel.h
ip_mp_alg.h
ip.h
ipc.h
ipmi_msgdefs.h [PATCH] ipmi: add full sysfs support 2006-03-26 08:56:56 -08:00
ipmi_smi.h [PATCH] ipmi: add full sysfs support 2006-03-26 08:56:56 -08:00
ipmi.h [PATCH] ipmi: add full sysfs support 2006-03-26 08:56:56 -08:00
ipsec.h
ipv6_route.h
ipv6.h
ipx.h
irda.h
irq_cpustat.h
irq.h
isapnp.h
isdn_divertif.h
isdn_ppp.h
isdn.h
isdnif.h
isicom.h
iso_fs.h
istallion.h
ite_gpio.h
ixjuser.h
jbd.h [PATCH] Make address_space_operations->invalidatepage return void 2006-03-26 08:56:55 -08:00
jffs2_fs_i.h
jffs2_fs_sb.h
jffs2.h
jffs.h
jhash.h
jiffies.h
journal-head.h
joystick.h
kallsyms.h
kbd_diacr.h
kbd_kern.h
kd.h
kdev_t.h
kernel_stat.h
kernel.h
kernelcapi.h
kexec.h
key-ui.h
key.h
keyboard.h
keyctl.h
kfifo.h
klist.h
kmalloc_sizes.h
kmod.h
kobj_map.h
kobject.h
kprobes.h
kref.h
kthread.h
ktime.h
lapb.h
lcd.h
libata.h
libps2.h
limits.h
linkage.h
linux_logo.h
list.h
llc.h
loop.h
lp.h
major.h
matroxfb.h
mbcache.h
mc6821.h
mc146818rtc.h
mca-legacy.h
mca.h
memory_hotplug.h
memory.h
mempolicy.h
mempool.h [PATCH] mempool: add mempool_create_slab_pool() 2006-03-26 08:57:00 -08:00
meye.h
migrate.h
mii.h
minix_fs.h
miscdevice.h
mm_inline.h
mm.h
mman.h
mmtimer.h
mmzone.h
mod_devicetable.h
module.h
moduleloader.h
moduleparam.h
mount.h
mpage.h
mqueue.h
mroute.h
msdos_fs.h
msg.h
mtio.h
mutex-debug.h
mutex.h
mv643xx.h
n_r3964.h
namei.h
namespace.h
nbd.h
ncp_fs_i.h
ncp_fs_sb.h
ncp_fs.h
ncp_mount.h
ncp_no.h
ncp.h
net.h
netdevice.h
netfilter_arp.h
netfilter_bridge.h
netfilter_decnet.h
netfilter_ipv4.h
netfilter_ipv6.h
netfilter_logging.h
netfilter.h
netlink.h
netpoll.h
netrom.h
nfs2.h
nfs3.h
nfs4_acl.h
nfs4_mount.h
nfs4.h
nfs_fs_i.h
nfs_fs_sb.h
nfs_fs.h
nfs_idmap.h
nfs_mount.h
nfs_page.h
nfs_xdr.h
nfs.h
nfsacl.h
nfsd_idmap.h
nls.h
nmi.h
node.h
nodemask.h
notifier.h
nubus.h
numa.h
nvram.h
openprom_fs.h
oprofile.h
page-flags.h
pagemap.h
pagevec.h
param.h
parport_pc.h
parport.h
parser.h
patchkey.h
pci_ids.h
pci_regs.h
pci-acpi.h
pci.h
pcieport_if.h
percpu_counter.h
percpu.h
personality.h
pfkeyv2.h
pg.h
phonedev.h
phy.h
pid.h
pipe_fs_i.h
pkt_cls.h
pkt_sched.h
pktcdvd.h
platform_device.h
pm_legacy.h
pm.h
pmu.h
pnp.h
pnpbios.h
poll.h
posix_acl_xattr.h
posix_acl.h
posix_types.h
posix-timers.h
ppdev.h
ppp_channel.h
ppp_defs.h
ppp-comp.h
prctl.h
preempt.h
prefetch.h
prio_tree.h
proc_fs.h [PATCH] Use loff_t for size in struct proc_dir_entry 2006-03-26 08:56:57 -08:00
profile.h
ps2esdi.h
ptrace.h
qic117.h
qnx4_fs.h
qnxtypes.h
quota.h
quotaio_v1.h
quotaio_v2.h
quotaops.h
radeonfb.h
radix-tree.h
raid_class.h
ramfs.h
random.h
raw.h
rbtree.h
rcupdate.h
reboot_fixups.h
reboot.h
reiserfs_acl.h
reiserfs_fs_i.h
reiserfs_fs_sb.h
reiserfs_fs.h
reiserfs_xattr.h
relay.h
relayfs_fs.h
resource.h
rio_drv.h
rio_ids.h
rio_regs.h
rio.h
rmap.h
romfs_fs.h
root_dev.h
rose.h
route.h
rslib.h
rtc.h
rtnetlink.h
rwsem-spinlock.h
rwsem.h
sc26198.h
scatterlist.h
scc.h
sched.h
screen_info.h
sctp.h
scx200_gpio.h
scx200.h
sdla_asy.h
sdla_chdlc.h
sdla_fr.h
sdla_ppp.h
sdla_x25.h
sdla.h
sdladrv.h
sdlapci.h
sdlasfm.h
seccomp.h
securebits.h
security.h
selection.h
selinux_netlink.h
sem.h
seq_file.h
seqlock.h
serial167.h
serial_8250.h
serial_core.h
serial_ip3106.h
serial_reg.h
serial.h
serialP.h
serio.h
shm.h
shmem_fs.h
signal.h
skbuff.h
slab.h
smb_fs_i.h
smb_fs_sb.h
smb_fs.h
smb_mount.h
smb.h
smbno.h
smp_lock.h
smp.h [PATCH] cleanup smp_call_function UP build 2006-03-26 08:56:55 -08:00
snmp.h
socket.h
sockios.h
som.h
sonet.h
sonypi.h
sort.h
sound.h
soundcard.h
spinlock_api_smp.h
spinlock_api_up.h
spinlock_types_up.h
spinlock_types.h
spinlock_up.h
spinlock.h
stallion.h
stat.h [PATCH] 2TB files: st_blocks is invalid when calling stat64 2006-03-26 08:57:00 -08:00
statfs.h [PATCH] 2TB files: change type of kstatfs entries 2006-03-26 08:57:00 -08:00
stddef.h
stop_machine.h
string.h
stringify.h
superhyway.h
suspend.h
swap.h
swapops.h
synclink.h
sys.h
syscalls.h
sysctl.h
sysdev.h
sysfs.h
sysrq.h
sysv_fs.h
tcp.h
telephony.h
termios.h
textsearch_fsm.h
textsearch.h
tfrc.h
thread_info.h
threads.h
ticable.h
time.h
timer.h
times.h
timex.h [PATCH] consolidate sys32/compat_adjtimex 2006-03-26 08:56:57 -08:00
tiocl.h
tipc_config.h
tipc.h
topology.h
toshiba.h
transport_class.h
trdevice.h
tty_driver.h
tty_flip.h
tty_ldisc.h
tty.h
types.h [PATCH] 2TB files: add blkcnt_t 2006-03-26 08:57:00 -08:00
udf_fs_i.h
udf_fs_sb.h
udf_fs.h
udp.h
ufs_fs_i.h
ufs_fs_sb.h
ufs_fs.h
uinput.h
uio.h
ultrasound.h
umem.h
un.h
unistd.h
usb_cdc.h
usb_ch9.h
usb_gadget.h
usb_gadgetfs.h
usb_input.h
usb_isp116x.h
usb_otg.h
usb_sl811.h
usb_usual.h
usb.h
usbdevice_fs.h
user.h
utime.h
uts.h
utsname.h
vermagic.h
vfs.h
via.h
video_decoder.h
video_encoder.h
videodev2.h
videodev.h
videotext.h
vmalloc.h
vt_buffer.h
vt_kern.h
vt.h
wait.h
wanpipe.h
wanrouter.h
watchdog.h
wavefront.h
wireless.h
workqueue.h
writeback.h
x25.h
x1205.h
xattr.h
xfrm.h
yam.h
zconf.h
zftape.h
zlib.h
zorro_ids.h
zorro.h
zutil.h