Changes between Initial Version and Version 1 of Ticket #163
- Timestamp:
- 09/24/2014 12:51:45 AM (10 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Ticket #163
-
Property
Milestone
changed from
undecided
to0.8.0
-
Property
Milestone
changed from
-
Ticket #163 – Description
initial v1 1 While reading over 2 http://www.imperialviolet.org/2010/06/25/overclocking-ssl.html , I learned 3 the following tidbits: 1 While reading over http://www.imperialviolet.org/2010/06/25/overclocking-ssl.html , I learned the following tidbits: 4 2 5 * "OpenSSL will build a record from each call to SSL_write and the kernel, 6 with Nagle disabled, will send out packets to minimise latency" 3 * "OpenSSL will build a record from each call to SSL_write and the kernel, with Nagle disabled, will send out packets to minimise latency" 7 4 * "The overhead of a record is typically 25 to 40 bytes" 8 5 9 Foolscap does lots of small writes: every call to 10 [source:foolscap/banana.py#L485 sendToken()] results in two or three calls to 11 {{{self.transport.write}}} (header, typebyte, body), and multibyte integers 12 are even worse (one write per byte). 6 Foolscap does lots of small writes: every call to [source:foolscap/banana.py#L485 sendToken()] results in two or three calls to {{{self.transport.write}}} (header, typebyte, body), and multibyte integers are even worse (one write per byte). 13 7 14 I'm not entirely sure about how this ends up translating into calls to 15 {{{SSL_write()}}} (and thus records, with their 25-40byte overhead), but if 16 it's one-to-one, this would be pretty bad. 8 I'm not entirely sure about how this ends up translating into calls to {{{SSL_write()}}} (and thus records, with their 25-40byte overhead), but if it's one-to-one, this would be pretty bad. 17 9 18 The task is to examine the output of a packet sniffer (like wireshark, and 19 give it the tub.pem file so it can decrypt the traffic), and could the number 20 of records for a simple message (perhaps a tuple of two ints and two 21 strings). 10 The task is to examine the output of a packet sniffer (like wireshark, and give it the tub.pem file so it can decrypt the traffic), and could the number of records for a simple message (perhaps a tuple of two ints and two strings). 22 11 23 There's a pretty good chance that 24 {{{twisted.internet.abstract.FileDescriptor.write}}} is involved, which would 25 merge all the {{{write()}}} calls that occur in a single reactor turn (until 26 {{{select()}}} tells us the socket is writable), which would help a lot. On 27 the other hand, the overly-streaming-friendly serialization scheme that 28 Foolscap uses might allow a reactor turn between each call to 29 {{{sendToken}}}, which would hurt a lot. 12 There's a pretty good chance that {{{twisted.internet.abstract.FileDescriptor.write}}} is involved, which would merge all the {{{write()}}} calls that occur in a single reactor turn (until {{{select()}}} tells us the socket is writable), which would help a lot. On the other hand, the overly-streaming-friendly serialization scheme that Foolscap uses might allow a reactor turn between each call to {{{sendToken}}}, which would hurt a lot.