Browse Source

Merge #11323: mininode: add an optimistic write and disable nagle

1817398b3 mininode: add an optimistic write and disable nagle (Cory Fields)

Pull request description:

  Disclaimer: I'm not familiar with asyncore, so I'm unclear how safe this is. It works for me (tm).

  Because the poll/select loop may pause for 100msec before actually doing a send, and we have no way to force the loop awake, try sending from the calling thread if the queue is empty.

  Also, disable nagle as all sends should be either full messages or unfinished sends.

  This shaves an average of ~1 minute or so off of my accumulated runtime, and 10-15 seconds off of actual runtime.

Tree-SHA512: 6b61b8058e621dacf0b4dd353c10e3666fbda0691440eb6ebc432491ebada80a781dcd09291bf03e70112a41d3c2a0c91775ed08824b79bf8d0ebed11595c28b
0.16
MarcoFalke 7 years ago
parent
commit
4ce2f3d0d3
No known key found for this signature in database
GPG Key ID: D2EA4850E7528B25
  1. 8
      test/functional/test_framework/mininode.py

8
test/functional/test_framework/mininode.py

@ -1654,6 +1654,7 @@ class NodeConn(asyncore.dispatcher):
self.dstaddr = dstaddr self.dstaddr = dstaddr
self.dstport = dstport self.dstport = dstport
self.create_socket(socket.AF_INET, socket.SOCK_STREAM) self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
self.sendbuf = b"" self.sendbuf = b""
self.recvbuf = b"" self.recvbuf = b""
self.ver_send = 209 self.ver_send = 209
@ -1792,6 +1793,13 @@ class NodeConn(asyncore.dispatcher):
tmsg += h[:4] tmsg += h[:4]
tmsg += data tmsg += data
with mininode_lock: with mininode_lock:
if (len(self.sendbuf) == 0 and not pushbuf):
try:
sent = self.send(tmsg)
self.sendbuf = tmsg[sent:]
except BlockingIOError:
self.sendbuf = tmsg
else:
self.sendbuf += tmsg self.sendbuf += tmsg
self.last_sent = time.time() self.last_sent = time.time()

Loading…
Cancel
Save