I've done a bit of work to reduce the use of memcpy() in the client-side section. Its in the "store_copy" branch in sourceforge.
The first part of this creates storeClientRef() which is like storeClientCopy() but it returns a reference-counted mem_node reference+ offset rather than filling a supplied buffer. I've modified all of client_side.c to use this. So far, so good. Its only implemented for the memory client case; the code fatal()s for the disk client case. It won't be hard to fix that - just need to allocate a mem_node, populate it with the disk code data and pass that back. Ideally the storage code should just create/reference mem_nodes out to whoever wants it, but that level of change is out of scope here. It saves a couple % of CPU in my very basic tests. There's still quite a bit to go in cutting out all of the memcpy()ing going on but I'd like to focus on getting this stuff stable and in production. oprofile stuff so far: http://www.creative.net.au/node/76 I'd appreciate some feedback please! Its not yet ready for public testing unless you've got a memory-only test load; I'll send out a message when it is. Adrian
