On 6/29/15 7:09 PM, Frank Filz wrote:
> Branch next
>
> Tag:V2.3-dev-10
>
> NOTE: This introduces an update to libntirpc. Please update your submodule
> and rebase any patches you push.
>
> Highlights
>
> * many RPC changes
>
Thanks, Frank. This stuff needs lots of field testing.
There should be a significant measurable improvement in RPC
speed, especially output. Many [un]locks have been removed,
many alloc/free have been combined into single steps.
Better yet, the internal work pool and IOQ buffer pool
management have eliminated their separate wait queues. Nested
locking is eliminated.
Moreover, mutexes are as separate as practicable, allowing more
parallel processing.
Those changes under the hood include a fair number of nTI-RPC
bug fixes:
Bugfixes in work_pool.c (was thrdpool.c):
* TAILQ_FOREACH has TAILQ_REMOVE (should be TAILQ_FOREACH_SAFE).
Instead, use slightly faster TAILQ_FIRST loops.
* svc_ioq_init() called too soon, needs maximum threads parameter!
* require maximum and minimum threads parameters more than zero,
as zero is used to signal shutdown.
* no need to use atomic flag for shutdown, using idempotent
maximum threads (set to zero under lock) instead.
* use atomic for n_threads, not idempotent, could conflict.
* DO NOT spawn on submit, not usable by system callbacks.
Instead, existing thread(s) will dynamically spawn more.
Bugfixes in svc_ioq.c:
* After XDR_SETPOS call, frag_len could undercount. Remove
its only use of frag_len, sum immediately before write_v().
* Used base instead of offset for head of data.
* Need to subtract offset (head) from length (tail),
switch to macro for clarity.
* Missing "%s()" in warning messages, mismatched variables,
bad indentation....
Bugfixes in xdr_ioq.c:
* XDR_PUTBYTES was using "off" instead of "boff", inserting at
wrong position in buffer. Changed symbols drastically to differ
by more than 1 character for clarity! (no more off, boff, loff.)
* After XDR_SETPOS call, offset (head) and length (tail) were set
to the entire loff total length of data, far exceeding buffer size.
(Already marked in the past with "XXX oops, redundant".)
* After XDR_INLINE call, offset (head) and length (tail) were both
increased by the data length, losing data at the head.
* After XDR_SETPOS followed by XDR_INLINE call during DECODE, the
above could extend length (tail) beyond the buffer size.
Subsequent GETs could overrun.
Don't create large (~0) size fake xdr_mem structures! Once upon a
time, these were only 65K. Now, they can be 4GB. Better yet, use
static global XDR instead to reduce assignments.
------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
Nfs-ganesha-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/nfs-ganesha-devel