[ENBD] mmapped server
Peter T. Breuer
ptb at inv.it.uc3m.es
Sat Mar 25 15:09:04 MST 2006
"Also sprach Peter T. Breuer:"
> --mmap,-M
>
> I must have a go ...
Hmmm ... turning on some debugging seems to show that the server really does
use mmap if asked:
enbd-server 3427: mapping write request on from=3510272 len=28672
enbd-server 3427: mapping write request on from=3551232 len=32768
enbd-server 3427: mapping write request on from=3588096 len=4096
enbd-server 3427: mapping write request on from=3592192 len=4096
enbd-server 3427: mapping write request on from=3604480 len=4096
enbd-server 3427: mapping write request on from=3612672 len=4096
enbd-server 3427: mapping write request on from=3616768 len=12288
enbd-server 3427: mapping write request on from=3633152 len=12288
enbd-server 3427: mapping write request on from=3678208 len=4096
Apparently a mmapable request has to be aligned at 4K, and be a multiple
of 4K in length, so one should use bs=4k, or/and turn on merge_requests.
I wonder what happens if the resource is bigger than 2GB? I thought
mmapping only worled up to 2GB. Maybe it remaps every time? Yesss ..
the mmap is cleared after every request, and remapping occurs next
time.
I suppose I could cache the mmap. How would one do that? Sigh. Wouldn't
the kernel know best about memory mappings? Why not just map ahead each
time, and return the address if the request falls within the pre-mapped
region? Otherwise I'd have to maintain something like a bitmap. I
suppose I could lock the mmapped area, and check the lock, but that may
be more expensive still.
(the point of mmap is to save a copy operation, thus lowering server
cpu overhead and increasing max server speed).
Peter
More information about the ENBD
mailing list