strange packet loss

Joel Reymont joelr1@REDACTED
Wed Aug 12 01:04:42 CEST 2009


The good sequence of events looks like this. Note tcp_remain and  
tcp_deliver (inet_drv.c) after the call to tcp_recv

---
   0          -> tcp_inet_commandv             tcp_inet_commandv 
(0x1006E69B0, 0x7FFF5FBFE890, 0x1004005C0)

   0            -> tcp_inet_drv_input          tcp_inet_drv_input 
(0x1006E69B0, 0xB, 0x100061A64)

   0              -> tcp_recv                  tcp_recv(0x1006E69B0,  
0x0, 0x0)

   0                -> recvfrom                recvfrom(0xB,  
0x1006AD470, 0x5B4)

   0                <- recvfrom                recvfrom = 17

              0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f   
0123456789abcdef
          0: 00 03 41 43 4b 7f 00 00 00 00 00 00 00 00 00  
00  ..ACK...........

   0                -> tcp_remain              tcp_remain(0x1006E69B0,  
0x7FFF5FBFE74C, 0x5)

   0                <- tcp_remain              tcp_remain = 144

   0                -> tcp_deliver             tcp_deliver 
(0x1006E69B0, 0x5, 0x3)

   0                  -> tcp_clear_input       tcp_clear_input 
(0x1006E69B0, 0x10051BF00, 0x7FFF5FBFE568)

   0                  <- tcp_clear_input       tcp_clear_input = 88
---

The bad sequence of events looks like this:

---
   1    -> tcp_inet_commandv                   tcp_inet_commandv 
(0x1025294D8, 0x7FFF5FBFE890, 0x1004005C0)

   0  -> tcp_inet_ctl                          tcp_inet_ctl 
(0x1025294D8, 0x7, 0x10029F028)

   0    -> tcp_inet_commandv                   tcp_inet_commandv 
(0x1025294D8, 0x7FFF5FBFE890, 0x1004005C0)

   0      -> tcp_inet_drv_input                tcp_inet_drv_input 
(0x1025294D8, 0x25C, 0x100061A64)

   0        -> tcp_recv                        tcp_recv(0x1025294D8,  
0x0, 0x0)

   0          -> recvfrom                      recvfrom(0x25C,  
0x1006AD491, 0x4124)

   0          <- recvfrom                      recvfrom = 17

              0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f   
0123456789abcdef
          0: 00 03 41 43 4b 76 65 6e 74 73 22 2c 22 65 76  
65  ..ACKvents","eve

   0        <- tcp_recv                        tcp_recv = 198

   0      <- tcp_inet_drv_input                tcp_inet_drv_input = 132
---

I'm still investigating but it looks like the TCP driver wants to read  
more data into the buffer, as opposed to deliver the 3 bytes received.

---
Mac hacker with a performance bent
http://www.linkedin.com/in/joelreymont



More information about the erlang-questions mailing list