diff options
author | alc <alc@FreeBSD.org> | 2003-12-07 22:49:25 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2003-12-07 22:49:25 +0000 |
commit | d821fb3e556486be9a3ec49e1f2eb0ed7d5374bd (patch) | |
tree | ee6e54195f8ad195a8b729c8606f3056be6573dd /sys/kern/kern_thr.c | |
parent | 93908284d5a83d6f1a31b68846e0ce8ddcd252aa (diff) | |
download | FreeBSD-src-d821fb3e556486be9a3ec49e1f2eb0ed7d5374bd.zip FreeBSD-src-d821fb3e556486be9a3ec49e1f2eb0ed7d5374bd.tar.gz |
Don't remove the virtual-to-physical mapping when an sf_buf is freed.
Instead, allow the mapping to persist, but add the sf_buf to a free list.
If a later sendfile(2) or zero-copy send resends the same physical page,
perhaps with the same or different contents, then the mapping overhead is
avoided and the sf_buf is simply removed from the free list.
In other words, the i386 sf_buf implementation now behaves as a cache of
virtual-to-physical translations using an LRU replacement policy on
inactive sf_bufs. This is similar in concept to a part of
http://www.cs.princeton.edu/~yruan/debox/ patch, but much simpler in
implementation. Note: none of this is required on alpha, amd64, or ia64.
They now use their direct virtual-to-physical mapping to avoid any
emphemeral mapping overheads in their sf_buf implementations.
Diffstat (limited to 'sys/kern/kern_thr.c')
0 files changed, 0 insertions, 0 deletions