[GSOC 2017] TCP optimization_Week #2 & #3
I am writing this blog as a combined report for the past 2 weeks. As I mentioned on the mailing this, I had college exams till 25th. Really hectic. But I have been able to get some work done from then.
Didn't get a chance to know a lot of them but I did break some conversation with a few people. My short talk with axeld on the IRC got me into knowing the names responsible for the current implementation of TCP in Haiku. Axel has also been helpful in pointing me towards some useful resoures. Also had a short talk with tojoko.
From the benchmarking tools I mentioned in week 1's blog, I tried compiling tcpstat on Haiku. I have been facing some issues in that regard. Therefore I started looking for some alternatives and I came across the following:
Benchmarking TCP by combining 3 tools: tcpdump (to capture the packets), tcptrace (to analyze the dump created by tcpdump) and xplot (to provide graphical summaries). The advantage of using this method would be that tcpdump is already available as a package in HaikuDepot and also comes pre-installed when installing from the iso. Once the packets are captured, they need not be analyzed on Haiku itslef. I can use my host system (ubuntu 14.04) to run tcptrace and xplot on the input data. An interesting article describing the procedure can be found here. Also the output of tcpdump can be read on wireshark - making it easy to isolate header information from the data stream.
I have also made considerable progress going through the source code for TCP. I am about halfway through reading the code.
Nothing ventured. Nothing gained. I have been going through a couple of resources. To mention a few:
- Kernel module development
- Quora ... why not!
- The network stack of haiku
- Let's code a TCP/IP stack to learn network and system programming at a deeper level [link]
When I was going across the source files, I naturally came across the file TCPEndpoint.cpp. It lists out the things not currently implemented. Following the list sequentially, I will start with implementing TCP slow start, Congestion Avoidance, Fast Retransmit, and Fast Recovery.
These features have also been described under "core functionality" section of rfc 7414. To implement them, I shall be following rfc 5681 as mentioned in rfc 7414. They together constitute what the community refers to as "Reno TCP".