ansible: ensure FileService uses exact CHUNK_SIZE multiple
9.8% throughput increase with sudo.
This commit is contained in:
parent
187e3a3fc1
commit
94e048a2e5
|
@ -485,6 +485,14 @@ class FileService(mitogen.service.Service):
|
||||||
finally:
|
finally:
|
||||||
state.lock.release()
|
state.lock.release()
|
||||||
|
|
||||||
|
# The IO loop pumps 128KiB chunks. An ideal message is a multiple of this,
|
||||||
|
# odd-sized messages waste one tiny write() per message on the trailer.
|
||||||
|
# Therefore subtract 10 bytes pickle overhead + 24 bytes header.
|
||||||
|
IO_SIZE = mitogen.core.CHUNK_SIZE - (mitogen.core.Stream.HEADER_LEN + (
|
||||||
|
len(mitogen.core.Message.pickled(' ' * mitogen.core.CHUNK_SIZE).data) -
|
||||||
|
mitogen.core.CHUNK_SIZE
|
||||||
|
))
|
||||||
|
|
||||||
def _schedule_pending_unlocked(self, state):
|
def _schedule_pending_unlocked(self, state):
|
||||||
"""
|
"""
|
||||||
Consider the pending transfers for a stream, pumping new chunks while
|
Consider the pending transfers for a stream, pumping new chunks while
|
||||||
|
@ -496,7 +504,7 @@ class FileService(mitogen.service.Service):
|
||||||
"""
|
"""
|
||||||
while state.jobs and state.unacked < self.window_size_bytes:
|
while state.jobs and state.unacked < self.window_size_bytes:
|
||||||
sender, fp = state.jobs[0]
|
sender, fp = state.jobs[0]
|
||||||
s = fp.read(mitogen.core.CHUNK_SIZE)
|
s = fp.read(self.IO_SIZE)
|
||||||
if s:
|
if s:
|
||||||
state.unacked += len(s)
|
state.unacked += len(s)
|
||||||
sender.send(s)
|
sender.send(s)
|
||||||
|
@ -539,7 +547,7 @@ class FileService(mitogen.service.Service):
|
||||||
raise Error(self.context_mismatch_msg)
|
raise Error(self.context_mismatch_msg)
|
||||||
|
|
||||||
LOG.debug('Serving %r', path)
|
LOG.debug('Serving %r', path)
|
||||||
fp = open(path, 'rb', mitogen.core.CHUNK_SIZE)
|
fp = open(path, 'rb', self.IO_SIZE)
|
||||||
# Response must arrive first so requestee can begin receive loop,
|
# Response must arrive first so requestee can begin receive loop,
|
||||||
# otherwise first ack won't arrive until all pending chunks were
|
# otherwise first ack won't arrive until all pending chunks were
|
||||||
# delivered. In that case max BDP would always be 128KiB, aka. max
|
# delivered. In that case max BDP would always be 128KiB, aka. max
|
||||||
|
|
Loading…
Reference in New Issue