diff options
author | alc <alc@FreeBSD.org> | 2004-03-18 18:23:37 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2004-03-18 18:23:37 +0000 |
commit | 6961e315f80c4297413622cc1ab6a16d47831e4f (patch) | |
tree | 062e5e4f22a02665ffa9833000d9046d4f13c800 /lib/libc/stdlib/malloc.c | |
parent | aae79f39c1ed4d0a53e13d513424fd6530049a57 (diff) | |
download | FreeBSD-src-6961e315f80c4297413622cc1ab6a16d47831e4f.zip FreeBSD-src-6961e315f80c4297413622cc1ab6a16d47831e4f.tar.gz |
Utilize sf_buf_alloc() and sf_buf_free() to implement the ephemeral
mappings required by mdstart_swap(). On i386, if the ephemeral mapping
is already in the sf_buf mapping cache, a swap-backed md performs
similarly to a malloc-backed md. Even if the ephemeral mapping is not
cached, this implementation is still faster. On 64-bit platforms, this
change has the effect of using the direct virtual-to-physical mapping,
avoiding ephemeral mapping overheads, such as TLB shootdowns on SMPs.
On a 2.4GHz, 400MHz FSB P4 Xeon configured with 64K sf_bufs and
"mdmfs -S -o async -s 128m md /mnt"
before:
dd if=/dev/md0 of=/dev/null bs=64k
134217728 bytes transferred in 0.430923 secs (311465697 bytes/sec)
after with cold sf_buf cache:
dd if=/dev/md0 of=/dev/null bs=64k
134217728 bytes transferred in 0.367948 secs (364773576 bytes/sec)
after with warm sf_buf cache:
dd if=/dev/md0 of=/dev/null bs=64k
134217728 bytes transferred in 0.252826 secs (530870010 bytes/sec)
malloc-backed md:
dd if=/dev/md0 of=/dev/null bs=64k
134217728 bytes transferred in 0.253126 secs (530240978 bytes/sec)
Diffstat (limited to 'lib/libc/stdlib/malloc.c')
0 files changed, 0 insertions, 0 deletions