decreasing throughput ends in lwip-collapse

classic Classic list List threaded Threaded
11 messages Options
Reply | Threaded
Open this post in threaded view
|

decreasing throughput ends in lwip-collapse

Andre Puschmann
hi folks,
as already mentioned some days ago we got a lwip port running on our
custom ppc-board.
directly after starting up lwip everything goes quite fast but with
every single byte lwip gets slower and slower and finally totally stop
working.

i am getting this with a small http-server running on the board serving
a 300k file. i am downloading this file multiple times with my windows
box starting at 1.2mb/sec and ending up with 100 to 200kb/sec. after
30 times doing this the machine hangs ..

does anybody of you guys already had such problems?


any comments and suggestions are more than welcome.

regards

andre



_______________________________________________
lwip-users mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/lwip-users
Reply | Threaded
Open this post in threaded view
|

Re: decreasing throughput ends in lwip-collapse

Andre Puschmann
hello everybody,
today i switched our port up to lwip version 1.1.1.
now everything runs a bit better with some litte changes.
but nevertheless i got an other odd problem. with my current
configuration (opt.h attached) i can download this testfile up to 500
times this with my small test-application i wrote.
but one point the througput gets to a crawl once again.
i figured out that it has something to do with "ignored or droped"
packets which ends up in a delayed retransmission of a couple of packets
from the windows xp to the board. the following file transfer is speedy
again.
i also attached to ethereal captures .. first one shows a normal
transfer of the file 200msecs ..
the "capture_download_nok"-file shows the droped packets and the
resulting delay (see time row).

comments and tips are appreciated.


best regards

andre


Andre Puschmann wrote:

> hi folks,
> as already mentioned some days ago we got a lwip port running on our
> custom ppc-board.
> directly after starting up lwip everything goes quite fast but with
> every single byte lwip gets slower and slower and finally totally stop
> working.
>
> i am getting this with a small http-server running on the board serving
> a 300k file. i am downloading this file multiple times with my windows
> box starting at 1.2mb/sec and ending up with 100 to 200kb/sec. after
> 30 times doing this the machine hangs ..
>
> does anybody of you guys already had such problems?
>
>
> any comments and suggestions are more than welcome.
>
> regards
>
> andre

/*
 * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 * 3. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
 * OF SUCH DAMAGE.
 *
 * This file is part of the lwIP TCP/IP stack.
 *
 * Author: Adam Dunkels <[hidden email]>
 *
 */
#ifndef __LWIP_OPT_H__
#define __LWIP_OPT_H__

/* Include user defined options first */
#include "lwipopts.h"
#include "lwip/debug.h"

/* Define default values for unconfigured parameters. */

/* Platform specific locking */

/*
 * enable SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection
 * for certain critical regions during buffer allocation, deallocation and memory
 * allocation and deallocation.
 */
#ifndef SYS_LIGHTWEIGHT_PROT
#define SYS_LIGHTWEIGHT_PROT            0
#endif

#ifndef NO_SYS
#define NO_SYS                          0
#endif
/* ---------- Memory options ---------- */
/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which
   lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2
   byte alignment -> define MEM_ALIGNMENT to 2. */

#ifndef MEM_ALIGNMENT
#define MEM_ALIGNMENT                   4
#endif

/* MEM_SIZE: the size of the heap memory. If the application will send
a lot of data that needs to be copied, this should be set high. */
#ifndef MEM_SIZE
#define MEM_SIZE                        32 * 1024//1600
#endif

#ifndef MEMP_SANITY_CHECK
#define MEMP_SANITY_CHECK       0
#endif

/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application
   sends a lot of data out of ROM (or other static memory), this
   should be set high. */
#ifndef MEMP_NUM_PBUF
#define MEMP_NUM_PBUF                   16
#endif

/* Number of raw connection PCBs */
#ifndef MEMP_NUM_RAW_PCB
#define MEMP_NUM_RAW_PCB                4
#endif

/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
   per active UDP "connection". */
#ifndef MEMP_NUM_UDP_PCB
#define MEMP_NUM_UDP_PCB                4
#endif
/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP
   connections. */
#ifndef MEMP_NUM_TCP_PCB
#define MEMP_NUM_TCP_PCB                5
#endif
/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP
   connections. */
#ifndef MEMP_NUM_TCP_PCB_LISTEN
#define MEMP_NUM_TCP_PCB_LISTEN         8
#endif
/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP
   segments. */
#ifndef MEMP_NUM_TCP_SEG
#define MEMP_NUM_TCP_SEG                16
#endif
/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active
   timeouts. */
#ifndef MEMP_NUM_SYS_TIMEOUT
#define MEMP_NUM_SYS_TIMEOUT            3
#endif

/* The following four are used only with the sequential API and can be
   set to 0 if the application only will use the raw API. */
/* MEMP_NUM_NETBUF: the number of struct netbufs. */
#ifndef MEMP_NUM_NETBUF
#define MEMP_NUM_NETBUF                 2
#endif
/* MEMP_NUM_NETCONN: the number of struct netconns. */
#ifndef MEMP_NUM_NETCONN
#define MEMP_NUM_NETCONN                4
#endif
/* MEMP_NUM_APIMSG: the number of struct api_msg, used for
   communication between the TCP/IP stack and the sequential
   programs. */
#ifndef MEMP_NUM_API_MSG
#define MEMP_NUM_API_MSG                8
#endif
/* MEMP_NUM_TCPIPMSG: the number of struct tcpip_msg, which is used
   for sequential API communication and incoming packets. Used in
   src/api/tcpip.c. */
#ifndef MEMP_NUM_TCPIP_MSG
#define MEMP_NUM_TCPIP_MSG              8
#endif

/* ---------- Pbuf options ---------- */
/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */

#ifndef PBUF_POOL_SIZE
#define PBUF_POOL_SIZE                  16
#endif

/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */

#ifndef PBUF_POOL_BUFSIZE
#define PBUF_POOL_BUFSIZE               1500 //128
#endif

/* PBUF_LINK_HLEN: the number of bytes that should be allocated for a
   link level header. Defaults to 14 for Ethernet. */

#ifndef PBUF_LINK_HLEN
#define PBUF_LINK_HLEN                  14
#endif



/* ---------- ARP options ---------- */

/** Number of active hardware address, IP address pairs cached */
#ifndef ARP_TABLE_SIZE
#define ARP_TABLE_SIZE                  10
#endif

/**
 * If enabled, outgoing packets are queued during hardware address
 * resolution.
 *
 * This feature has not stabilized yet. Single-packet queueing is
 * believed to be stable, multi-packet queueing is believed to
 * clash with the TCP segment queueing.
 *
 * As multi-packet-queueing is currently disabled, enabling this
 * _should_ work, but we need your testing feedback on lwip-users.
 *
 */
#ifndef ARP_QUEUEING
#define ARP_QUEUEING                    1
#endif

/* This option is deprecated */
#ifdef ETHARP_QUEUE_FIRST
#error ETHARP_QUEUE_FIRST option is deprecated. Remove it from your lwipopts.h.
#endif

/* This option is removed to comply with the ARP standard */
#ifdef ETHARP_ALWAYS_INSERT
#error ETHARP_ALWAYS_INSERT option is deprecated. Remove it from your lwipopts.h.
#endif

/* ---------- IP options ---------- */
/* Define IP_FORWARD to 1 if you wish to have the ability to forward
   IP packets across network interfaces. If you are going to run lwIP
   on a device with only one network interface, define this to 0. */
#ifndef IP_FORWARD
#define IP_FORWARD                      0
#endif

/* If defined to 1, IP options are allowed (but not parsed). If
   defined to 0, all packets with IP options are dropped. */
#ifndef IP_OPTIONS
#define IP_OPTIONS                      1
#endif

/** IP reassembly and segmentation. Even if they both deal with IP
 *  fragments, note that these are orthogonal, one dealing with incoming
 *  packets, the other with outgoing packets
 */

/** Reassemble incoming fragmented IP packets */
#ifndef IP_REASSEMBLY
#define IP_REASSEMBLY                   1
#endif

/** Fragment outgoing IP packets if their size exceeds MTU */
#ifndef IP_FRAG
#define IP_FRAG                         1
#endif

/* ---------- ICMP options ---------- */

#ifndef ICMP_TTL
#define ICMP_TTL                        255
#endif

/* ---------- RAW options ---------- */

#ifndef LWIP_RAW
#define LWIP_RAW                        1
#endif

#ifndef RAW_TTL
#define RAW_TTL                        255
#endif

/* ---------- DHCP options ---------- */

#ifndef LWIP_DHCP
#define LWIP_DHCP                       0
#endif

/* 1 if you want to do an ARP check on the offered address
   (recommended). */
#ifndef DHCP_DOES_ARP_CHECK
#define DHCP_DOES_ARP_CHECK             1
#endif

/* ---------- UDP options ---------- */
#ifndef LWIP_UDP
#define LWIP_UDP                        1
#endif

#ifndef UDP_TTL
#define UDP_TTL                         255
#endif

/* ---------- TCP options ---------- */
#ifndef LWIP_TCP
#define LWIP_TCP                        1
#endif

#ifndef TCP_TTL
#define TCP_TTL                         255
#endif

#ifndef TCP_WND
#define TCP_WND                         4 * 1456 //2048
#endif

#ifndef TCP_MAXRTX
#define TCP_MAXRTX                      12
#endif

#ifndef TCP_SYNMAXRTX
#define TCP_SYNMAXRTX                   6
#endif


/* Controls if TCP should queue segments that arrive out of
   order. Define to 0 if your device is low on memory. */
#ifndef TCP_QUEUE_OOSEQ
#define TCP_QUEUE_OOSEQ                 1
#endif

/* TCP Maximum segment size. */
#ifndef TCP_MSS
#define TCP_MSS                         1456 /* A *very* conservative default. */
#endif

/* TCP sender buffer space (bytes). */
#ifndef TCP_SND_BUF
#define TCP_SND_BUF                     4 * 1456//256
#endif

/* TCP sender buffer space (pbufs). This must be at least = 2 *
   TCP_SND_BUF/TCP_MSS for things to work. */
#ifndef TCP_SND_QUEUELEN
#define TCP_SND_QUEUELEN                4 * TCP_SND_BUF/TCP_MSS
#endif


/* Maximum number of retransmissions of data segments. */

/* Maximum number of retransmissions of SYN segments. */

/* TCP writable space (bytes). This must be less than or equal
   to TCP_SND_BUF. It is the amount of space which must be
   available in the tcp snd_buf for select to return writable */
#ifndef TCP_SNDLOWAT
#define TCP_SNDLOWAT                    TCP_SND_BUF/2
#endif

/* Support loop interface (127.0.0.1) */
#ifndef LWIP_HAVE_LOOPIF
#define LWIP_HAVE_LOOPIF                0
#endif

#ifndef LWIP_EVENT_API
#define LWIP_EVENT_API                  0
#define LWIP_CALLBACK_API               1
#else
#define LWIP_EVENT_API                  1
#define LWIP_CALLBACK_API               0
#endif

#ifndef LWIP_COMPAT_SOCKETS
#define LWIP_COMPAT_SOCKETS             1
#endif


#ifndef TCPIP_THREAD_PRIO
#define TCPIP_THREAD_PRIO               1
#endif

#ifndef SLIPIF_THREAD_PRIO
#define SLIPIF_THREAD_PRIO              1
#endif

#ifndef PPP_THREAD_PRIO
#define PPP_THREAD_PRIO                 1
#endif

#ifndef DEFAULT_THREAD_PRIO
#define DEFAULT_THREAD_PRIO             1
#endif


/* ---------- Socket Options ---------- */
/* Enable SO_REUSEADDR and SO_REUSEPORT options */
#ifdef SO_REUSE
/* I removed the lot since this was an ugly hack. It broke the raw-API.
   It also came with many ugly goto's, Christiaan Simons. */
#error "SO_REUSE currently unavailable, this was a hack"
#endif                                                                        


/* ---------- Statistics options ---------- */
#ifndef LWIP_STATS
#define LWIP_STATS                      1
#endif

#if LWIP_STATS

#ifndef LWIP_STATS_DISPLAY
#define LWIP_STATS_DISPLAY 0
#endif

#ifndef LINK_STATS
#define LINK_STATS  1
#endif

#ifndef IP_STATS
#define IP_STATS    1
#endif

#ifndef IPFRAG_STATS
#define IPFRAG_STATS    1
#endif

#ifndef ICMP_STATS
#define ICMP_STATS  1
#endif

#ifndef UDP_STATS
#define UDP_STATS   1
#endif

#ifndef TCP_STATS
#define TCP_STATS   1
#endif

#ifndef MEM_STATS
#define MEM_STATS   1
#endif

#ifndef MEMP_STATS
#define MEMP_STATS  1
#endif

#ifndef PBUF_STATS
#define PBUF_STATS  1
#endif

#ifndef SYS_STATS
#define SYS_STATS   1
#endif

#ifndef RAW_STATS
#define RAW_STATS   0
#endif

#else

#define LINK_STATS  0
#define IP_STATS    0
#define IPFRAG_STATS    0
#define ICMP_STATS  0
#define UDP_STATS   0
#define TCP_STATS   0
#define MEM_STATS   0
#define MEMP_STATS  0
#define PBUF_STATS  0
#define SYS_STATS   0
#define RAW_STATS   0
#define LWIP_STATS_DISPLAY  0

#endif /* LWIP_STATS */

/* ---------- PPP options ---------- */

#ifndef PPP_SUPPORT
#define PPP_SUPPORT                     0      /* Set for PPP */
#endif

#if PPP_SUPPORT

#define NUM_PPP                         1      /* Max PPP sessions. */



#ifndef PAP_SUPPORT
#define PAP_SUPPORT                     0      /* Set for PAP. */
#endif

#ifndef CHAP_SUPPORT
#define CHAP_SUPPORT                    0      /* Set for CHAP. */
#endif

#define MSCHAP_SUPPORT                  0      /* Set for MSCHAP (NOT FUNCTIONAL!) */
#define CBCP_SUPPORT                    0      /* Set for CBCP (NOT FUNCTIONAL!) */
#define CCP_SUPPORT                     0      /* Set for CCP (NOT FUNCTIONAL!) */

#ifndef VJ_SUPPORT
#define VJ_SUPPORT                      0      /* Set for VJ header compression. */
#endif

#ifndef MD5_SUPPORT
#define MD5_SUPPORT                     0      /* Set for MD5 (see also CHAP) */
#endif


/*
 * Timeouts.
 */
#define FSM_DEFTIMEOUT                  6       /* Timeout time in seconds */
#define FSM_DEFMAXTERMREQS              2       /* Maximum Terminate-Request transmissions */
#define FSM_DEFMAXCONFREQS              10      /* Maximum Configure-Request transmissions */
#define FSM_DEFMAXNAKLOOPS              5       /* Maximum number of nak loops */

#define UPAP_DEFTIMEOUT                 6       /* Timeout (seconds) for retransmitting req */
#define UPAP_DEFREQTIME                 30      /* Time to wait for auth-req from peer */

#define CHAP_DEFTIMEOUT                 6       /* Timeout time in seconds */
#define CHAP_DEFTRANSMITS               10      /* max # times to send challenge */


/* Interval in seconds between keepalive echo requests, 0 to disable. */
#if 1
#define LCP_ECHOINTERVAL                0
#else
#define LCP_ECHOINTERVAL                10
#endif

/* Number of unanswered echo requests before failure. */
#define LCP_MAXECHOFAILS                3

/* Max Xmit idle time (in jiffies) before resend flag char. */
#define PPP_MAXIDLEFLAG                 100

/*
 * Packet sizes
 *
 * Note - lcp shouldn't be allowed to negotiate stuff outside these
 *    limits.  See lcp.h in the pppd directory.
 * (XXX - these constants should simply be shared by lcp.c instead
 *    of living in lcp.h)
 */
#define PPP_MTU                         1500     /* Default MTU (size of Info field) */
#if 0
#define PPP_MAXMTU  65535 - (PPP_HDRLEN + PPP_FCSLEN)
#else
#define PPP_MAXMTU                      1500 /* Largest MTU we allow */
#endif
#define PPP_MINMTU                      64
#define PPP_MRU                         1500     /* default MRU = max length of info field */
#define PPP_MAXMRU                      1500     /* Largest MRU we allow */
#define PPP_DEFMRU                      296             /* Try for this */
#define PPP_MINMRU                      128             /* No MRUs below this */


#define MAXNAMELEN                      256     /* max length of hostname or name for auth */
#define MAXSECRETLEN                    256     /* max length of password or secret */

#endif /* PPP_SUPPORT */

/* checksum options - set to zero for hardware checksum support */

#ifndef CHECKSUM_GEN_IP
#define CHECKSUM_GEN_IP                 1
#endif
 
#ifndef CHECKSUM_GEN_UDP
#define CHECKSUM_GEN_UDP                1
#endif
 
#ifndef CHECKSUM_GEN_TCP
#define CHECKSUM_GEN_TCP                1
#endif
 
#ifndef CHECKSUM_CHECK_IP
#define CHECKSUM_CHECK_IP               1
#endif
 
#ifndef CHECKSUM_CHECK_UDP
#define CHECKSUM_CHECK_UDP              1
#endif

#ifndef CHECKSUM_CHECK_TCP
#define CHECKSUM_CHECK_TCP              1
#endif

/* Debugging options all default to off */

#ifndef DBG_TYPES_ON
#define DBG_TYPES_ON                    0
#endif

#ifndef ETHARP_DEBUG
#define ETHARP_DEBUG                    DBG_OFF
#endif

#ifndef NETIF_DEBUG
#define NETIF_DEBUG                     DBG_OFF
#endif

#ifndef PBUF_DEBUG
#define PBUF_DEBUG                      DBG_OFF
#endif

#ifndef API_LIB_DEBUG
#define API_LIB_DEBUG                   DBG_OFF
#endif

#ifndef API_MSG_DEBUG
#define API_MSG_DEBUG                   DBG_OFF
#endif

#ifndef SOCKETS_DEBUG
#define SOCKETS_DEBUG                   DBG_OFF
#endif

#ifndef ICMP_DEBUG
#define ICMP_DEBUG                      DBG_OFF
#endif

#ifndef INET_DEBUG
#define INET_DEBUG                      DBG_OFF
#endif

#ifndef IP_DEBUG
#define IP_DEBUG                        DBG_OFF
#endif

#ifndef IP_REASS_DEBUG
#define IP_REASS_DEBUG                  DBG_OFF
#endif

#ifndef RAW_DEBUG
#define RAW_DEBUG                       DBG_OFF
#endif

#ifndef MEM_DEBUG
#define MEM_DEBUG                       DBG_OFF
#endif

#ifndef MEMP_DEBUG
#define MEMP_DEBUG                      DBG_OFF
#endif

#ifndef SYS_DEBUG
#define SYS_DEBUG                       DBG_OFF
#endif

#ifndef TCP_DEBUG
#define TCP_DEBUG                       DBG_OFF
#endif

#ifndef TCP_INPUT_DEBUG
#define TCP_INPUT_DEBUG                 DBG_OFF
#endif

#ifndef TCP_FR_DEBUG
#define TCP_FR_DEBUG                    DBG_OFF
#endif

#ifndef TCP_RTO_DEBUG
#define TCP_RTO_DEBUG                   DBG_OFF
#endif

#ifndef TCP_REXMIT_DEBUG
#define TCP_REXMIT_DEBUG                DBG_OFF
#endif

#ifndef TCP_CWND_DEBUG
#define TCP_CWND_DEBUG                  DBG_OFF
#endif

#ifndef TCP_WND_DEBUG
#define TCP_WND_DEBUG                   DBG_OFF
#endif

#ifndef TCP_OUTPUT_DEBUG
#define TCP_OUTPUT_DEBUG                DBG_OFF
#endif

#ifndef TCP_RST_DEBUG
#define TCP_RST_DEBUG                   DBG_OFF
#endif

#ifndef TCP_QLEN_DEBUG
#define TCP_QLEN_DEBUG                  DBG_OFF
#endif

#ifndef UDP_DEBUG
#define UDP_DEBUG                       DBG_OFF
#endif

#ifndef TCPIP_DEBUG
#define TCPIP_DEBUG                     DBG_OFF
#endif

#ifndef PPP_DEBUG
#define PPP_DEBUG                       DBG_OFF
#endif

#ifndef SLIP_DEBUG
#define SLIP_DEBUG                      DBG_OFF
#endif

#ifndef DHCP_DEBUG
#define DHCP_DEBUG                      DBG_OFF
#endif


#ifndef DBG_MIN_LEVEL
#define DBG_MIN_LEVEL                   DBG_LEVEL_OFF
#endif

#endif /* __LWIP_OPT_H__ */




No.     Time        Source                Destination           Protocol Info
    600 2.369423    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    601 2.369435    192.168.23.100        192.168.1.1           TCP      2396 > http [ACK] Seq=15 Ack=296701 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
    602 2.370037    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    603 2.370397    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    604 2.370409    192.168.23.100        192.168.1.1           TCP      2396 > http [ACK] Seq=15 Ack=298205 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
    605 2.371015    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    606 2.371372    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    607 2.371384    192.168.23.100        192.168.1.1           TCP      2396 > http [ACK] Seq=15 Ack=299709 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
    608 2.371909    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    609 2.372271    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    610 2.372283    192.168.23.100        192.168.1.1           TCP      2396 > http [ACK] Seq=15 Ack=301213 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
    611 2.372809    192.168.1.1           192.168.23.100        HTTP     HTTP/1.0 200 OK (image/bmp)
    612 2.373116    192.168.1.1           192.168.23.100        TCP      http > 2396 [FIN, ACK] Seq=301965 Ack=15 Win=5824 Len=0
    613 2.373132    192.168.23.100        192.168.1.1           TCP      2396 > http [ACK] Seq=15 Ack=301966 Win=64768 [TCP CHECKSUM INCORRECT] Len=0
    614 2.373270    192.168.23.100        192.168.1.1           TCP      2396 > http [FIN, ACK] Seq=15 Ack=301966 Win=64768 [TCP CHECKSUM INCORRECT] Len=0
    615 2.562644    192.168.23.100        192.168.1.1           TCP      2397 > http [SYN] Seq=0 Len=0 MSS=1460
    616 2.562831    192.168.1.1           192.168.23.100        TCP      http > 2396 [ACK] Seq=301966 Ack=16 Win=5823 Len=0
    617 5.577843    192.168.23.100        192.168.1.1           TCP      2397 > http [SYN] Seq=0 Len=0 MSS=1460
    618 5.578142    192.168.1.1           192.168.23.100        TCP      http > 2397 [SYN, ACK] Seq=0 Ack=1 Win=5824 Len=0 MSS=1456
    619 5.578167    192.168.23.100        192.168.1.1           TCP      2397 > http [ACK] Seq=1 Ack=1 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
    620 5.578249    192.168.23.100        192.168.1.1           HTTP     GET /camera.bmp
    621 11.593171   192.168.23.100        192.168.1.1           HTTP     [TCP Retransmission] GET /camera.bmp
    622 11.593643   192.168.1.1           192.168.23.100        TCP      http > 2397 [ACK] Seq=1 Ack=16 Win=5824 Len=0
    623 11.593751   192.168.1.1           192.168.23.100        TCP      [TCP Dup ACK 622#1] http > 2397 [ACK] Seq=1 Ack=16 Win=5824 Len=0
    624 11.594162   192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    625 11.594605   192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    626 11.594622   192.168.23.100        192.168.1.1           TCP      2397 > http [ACK] Seq=16 Ack=1166 Win=64355 [TCP CHECKSUM INCORRECT] Len=0
    627 11.594802   192.168.1.1           192.168.23.100        TCP      [TCP Dup ACK 625#1] http > 2397 [ACK] Seq=1166 Ack=16 Win=5824 Len=0
    628 13.962649   192.168.1.1           192.168.23.100        TCP      [TCP Retransmission] [TCP segment of a reassembled PDU]
    629 13.962680   192.168.23.100        192.168.1.1           TCP      [TCP Dup ACK 626#1] 2397 > http [ACK] Seq=16 Ack=1166 Win=64355 [TCP CHECKSUM INCORRECT] Len=0
    630 13.962782   192.168.1.1           192.168.23.100        TCP      [TCP Retransmission] [TCP segment of a reassembled PDU]
    631 13.962790   192.168.23.100        192.168.1.1           TCP      [TCP Dup ACK 626#2] 2397 > http [ACK] Seq=16 Ack=1166 Win=64355 [TCP CHECKSUM INCORRECT] Len=0
    632 13.963023   192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    633 13.963090   192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    634 13.963104   192.168.23.100        192.168.1.1           TCP      2397 > http [ACK] Seq=16 Ack=2670 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
    635 13.963157   192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    636 14.108671   192.168.23.100        192.168.1.1           TCP      2397 > http [ACK] Seq=16 Ack=3422 Win=64768 [TCP CHECKSUM INCORRECT] Len=0
    637 14.109082   192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    638 14.109147   192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    639 14.109164   192.168.23.100        192.168.1.1           TCP      2397 > http [ACK] Seq=16 Ack=4926 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
    640 14.109223   192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    641 14.109504   192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    642 14.109517   192.168.23.100        192.168.1.1           TCP      2397 > http [ACK] Seq=16 Ack=6990 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
    643 14.109731   192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    644 14.110356   192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    645 14.110368   192.168.23.100        192.168.1.1           TCP      2397 > http [ACK] Seq=16 Ack=7934 Win=64576 [TCP CHECKSUM INCORRECT] Len=0

....
.... /* cutted */
....

   1218 14.287909   192.168.23.100        192.168.1.1           TCP      2397 > http [ACK] Seq=16 Ack=295198 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
   1219 14.288435   192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
   1220 14.288795   192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
   1221 14.288807   192.168.23.100        192.168.1.1           TCP      2397 > http [ACK] Seq=16 Ack=296702 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
   1222 14.289333   192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
   1223 14.289691   192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
   1224 14.289703   192.168.23.100        192.168.1.1           TCP      2397 > http [ACK] Seq=16 Ack=298206 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
   1225 14.290229   192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
   1226 14.290586   192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
   1227 14.290597   192.168.23.100        192.168.1.1           TCP      2397 > http [ACK] Seq=16 Ack=299710 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
   1228 14.291118   192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
   1229 14.291480   192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
   1230 14.291493   192.168.23.100        192.168.1.1           TCP      2397 > http [ACK] Seq=16 Ack=301214 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
   1231 14.292018   192.168.1.1           192.168.23.100        HTTP     HTTP/1.0 200 OK (image/bmp)
   1232 14.292325   192.168.1.1           192.168.23.100        TCP      http > 2397 [FIN, ACK] Seq=301966 Ack=16 Win=5824 Len=0
   1233 14.292340   192.168.23.100        192.168.1.1           TCP      2397 > http [ACK] Seq=16 Ack=301967 Win=64768 [TCP CHECKSUM INCORRECT] Len=0
   1234 14.292529   192.168.23.100        192.168.1.1           TCP      2397 > http [FIN, ACK] Seq=16 Ack=301967 Win=64768 [TCP CHECKSUM INCORRECT] Len=0

No.     Time        Source                Destination           Protocol Info
      3 0.000161    192.168.23.100        192.168.1.1           TCP      1759 > http [SYN] Seq=0 Len=0 MSS=1460
      4 0.000413    192.168.1.1           192.168.23.100        TCP      http > 1759 [SYN, ACK] Seq=0 Ack=1 Win=5824 Len=0 MSS=1456
      5 0.000428    192.168.23.100        192.168.1.1           TCP      1759 > http [ACK] Seq=1 Ack=1 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
      6 0.000520    192.168.23.100        192.168.1.1           HTTP     GET /camera.bmp
      7 0.001249    192.168.1.1           192.168.23.100        TCP      http > 1759 [ACK] Seq=1 Ack=16 Win=5824 Len=0
      8 0.001362    192.168.1.1           192.168.23.100        TCP      [TCP Dup ACK 7#1] http > 1759 [ACK] Seq=1 Ack=16 Win=5824 Len=0
      9 0.001824    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
     10 0.002270    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
     11 0.002287    192.168.23.100        192.168.1.1           TCP      1759 > http [ACK] Seq=16 Ack=1166 Win=64355 [TCP CHECKSUM INCORRECT] Len=0
     12 0.002848    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
     13 0.003199    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
     14 0.003210    192.168.23.100        192.168.1.1           TCP      1759 > http [ACK] Seq=16 Ack=2670 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
     15 0.003808    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
     16 0.004162    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
     17 0.004174    192.168.23.100        192.168.1.1           TCP      1759 > http [ACK] Seq=16 Ack=4174 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
     18 0.004694    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
     19 0.005046    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
     20 0.005059    192.168.23.100        192.168.1.1           TCP      1759 > http [ACK] Seq=16 Ack=5678 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
   
....
.... /* cutted */
....

    597 0.180928    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    598 0.181283    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    599 0.181295    192.168.23.100        192.168.1.1           TCP      1759 > http [ACK] Seq=16 Ack=295950 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
    600 0.181812    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    601 0.182162    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    602 0.182174    192.168.23.100        192.168.1.1           TCP      1759 > http [ACK] Seq=16 Ack=297454 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
    603 0.182772    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    604 0.183127    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    605 0.183142    192.168.23.100        192.168.1.1           TCP      1759 > http [ACK] Seq=16 Ack=298958 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
    606 0.183663    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    607 0.184014    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    608 0.184034    192.168.23.100        192.168.1.1           TCP      1759 > http [ACK] Seq=16 Ack=300462 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
    609 0.184610    192.168.1.1           192.168.23.100        TCP      [TCP segment of a reassembled PDU]
    610 0.184960    192.168.1.1           192.168.23.100        HTTP     HTTP/1.0 200 OK (image/bmp)
    611 0.184971    192.168.23.100        192.168.1.1           TCP      1759 > http [ACK] Seq=16 Ack=301966 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
    612 0.185518    192.168.1.1           192.168.23.100        TCP      http > 1759 [FIN, ACK] Seq=301966 Ack=16 Win=5824 Len=0
    613 0.185533    192.168.23.100        192.168.1.1           TCP      1759 > http [ACK] Seq=16 Ack=301967 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
    614 0.185765    192.168.23.100        192.168.1.1           TCP      1759 > http [FIN, ACK] Seq=16 Ack=301967 Win=65520 [TCP CHECKSUM INCORRECT] Len=0
    615 0.185931    192.168.1.1           192.168.23.100        TCP      http > 1759 [ACK] Seq=301967 Ack=17 Win=5823 Len=0

_______________________________________________
lwip-users mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/lwip-users
Reply | Threaded
Open this post in threaded view
|

Re: Re: decreasing throughput ends in lwip-collapse

Kieran Mansley
On Tue, 2006-10-24 at 22:41 +0200, Andre Puschmann wrote:

> i also attached to ethereal captures .. first one shows a normal
> transfer of the file 200msecs ..

It's quite hard to work with the text summary from ethereal as you can't
see many of the useful details from the packets.  If you have the proper
capture files, I can take a look at that.

> the "capture_download_nok"-file shows the droped packets and the
> resulting delay (see time row).

You're right that there seems to be some dropped packets causing
retransmissions, but I can't say anything more than that from the text
summary.  Is this a capture at the WinXP end of the connection?  WinXP
seems to be waiting a very long time before trying to retransmit (e.g. 6
seconds) which is a bit odd.

Kieran



_______________________________________________
lwip-users mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/lwip-users
Reply | Threaded
Open this post in threaded view
|

Re: decreasing throughput ends in lwip-collapse

Andre Puschmann
Hello,

sorry for the delay once again.
now I can give some more detailed information about what's going on. I
attached a ethereal capture file and a log file.

As you can see in the capture file at packet #27 and following the board
sends two frames from which the first one gets lost.
Windows acknowledges the last successfully received packet the second
time and so, after the RTO expired, lwip sends the lost (really?) packet
again. Than windows ACKs both packets.
what now happens is really strange I think, as lwip doesn't send the
next new package but a package already ACKed (packet #30 in capture) and
this even after a long delay.

Another odd thing is that once the connection gets into this state it
never leaves it. I mean at the beginning everything runs good up to one
certain point of time.

In the log file you can see the tcp-receive debug output (I added a few
more statements). I guess it shows that the windows ACK after the
retransmitted package isn't processed proper, since it as recognized as
an dup-ACK but it isn't.


Any comments and suggestions are more than welcome.


Best Regards


Andre



ethereal-capture: http://www.puschmann.net/public/log_forgotten_acks_new.cap

log-file:
http://www.puschmann.net/public/log_forgotten_acks_new.txt


Kieran Mansley wrote:

> On Tue, 2006-10-24 at 22:41 +0200, Andre Puschmann wrote:
>
>> i also attached to ethereal captures .. first one shows a normal
>> transfer of the file 200msecs ..
>
> It's quite hard to work with the text summary from ethereal as you can't
> see many of the useful details from the packets.  If you have the proper
> capture files, I can take a look at that.
>
>> the "capture_download_nok"-file shows the droped packets and the
>> resulting delay (see time row).
>
> You're right that there seems to be some dropped packets causing
> retransmissions, but I can't say anything more than that from the text
> summary.  Is this a capture at the WinXP end of the connection?  WinXP
> seems to be waiting a very long time before trying to retransmit (e.g. 6
> seconds) which is a bit odd.
>
> Kieran



_______________________________________________
lwip-users mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/lwip-users
Reply | Threaded
Open this post in threaded view
|

RE: Re: decreasing throughput ends in lwip-collapse

Goldschmidt Simon
Hi Andre,

I once had a similar problem and it turned out it was a cache issue, so
you might want to verify the data you are receiving is really correct...

Simon


_______________________________________________
lwip-users mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/lwip-users
Reply | Threaded
Open this post in threaded view
|

Re: Re: decreasing throughput ends in lwip-collapse

Kieran Mansley
In reply to this post by Andre Puschmann
On Sat, 2006-10-28 at 13:01 +0200, Andre Puschmann wrote:
> Hello,
>
> sorry for the delay once again.
> now I can give some more detailed information about what's going on. I
> attached a ethereal capture file and a log file.

I think the problem started before the beginning of the ethereal
capture.  You can see the first packet has a sequence number that is
less than the following ACK.    Could you capture a whole connection,
rather than just part of it?

Kieran



_______________________________________________
lwip-users mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/lwip-users
Reply | Threaded
Open this post in threaded view
|

Re: Re: decreasing throughput ends in lwip-collapse

Kieran Mansley
In reply to this post by Andre Puschmann
On Sat, 2006-10-28 at 13:01 +0200, Andre Puschmann wrote:
> Hello,
>
> sorry for the delay once again.
> now I can give some more detailed information about what's going on. I
> attached a ethereal capture file and a log file.

I'd also check to see if there are large numbers of packets being
discarded due to bad checksums (at both ends).  Although ethereal often
mis-reports bad checksums (e.g. if it has captured only part of a
packet) there are a large number being flagged as bad in that trace.

Kieran



_______________________________________________
lwip-users mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/lwip-users
Reply | Threaded
Open this post in threaded view
|

Re: decreasing throughput ends in lwip-collapse

Andre Puschmann
Kieran Mansley wrote:

> On Sat, 2006-10-28 at 13:01 +0200, Andre Puschmann wrote:
>> Hello,
>>
>> sorry for the delay once again.
>> now I can give some more detailed information about what's going on. I
>> attached a ethereal capture file and a log file.
>
> I'd also check to see if there are large numbers of packets being
> discarded due to bad checksums (at both ends).  Although ethereal often
> mis-reports bad checksums (e.g. if it has captured only part of a
> packet) there are a large number being flagged as bad in that trace.
>
> Kieran

Hi Kieran,
I will post a full captured connection tomorrow, since I don't have more
files on this box.

I also noticed that ethereal often (always?) mis-reports bad checksums.
If I remember correctly all ACKs of the windows-box are flagged as
"incorrect".

The curious of all those problems is that at the beginning everything
works well.
And than at a particular point .. the whole system is producing very odd
things.
Sometimes I can transfer up to 1,5gb (with 25mbit/s) with one
connection. So it doesn't seem to be a buffer or memory problem, true?
The fact that I can provoke this point e.g. starting a new connection or
producing some load backs this up. But this doesn't work regularly.


Regards


André



_______________________________________________
lwip-users mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/lwip-users
Reply | Threaded
Open this post in threaded view
|

Re: decreasing throughput ends in lwip-collapse

Andre Puschmann
In reply to this post by Goldschmidt Simon
Goldschmidt Simon wrote:
> Hi Andre,
>
> I once had a similar problem and it turned out it was a cache issue, so
> you might want to verify the data you are receiving is really correct...
>
> Simon

Hi Simon,
the received data seems to be ok, everything looks fine.
What exactly do you mean with "cache issue"?


Thanks

Andre



_______________________________________________
lwip-users mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/lwip-users
Reply | Threaded
Open this post in threaded view
|

RE: Re: decreasing throughput ends in lwip-collapse

Goldschmidt Simon
> Goldschmidt Simon wrote:
> > I once had a similar problem and it turned out it was a  cache
issue,
> > so you might want to verify the data you are receiving is  really
correct...
>
> Hi Simon,
> the received data seems to be ok, everything looks fine.
> What exactly do you mean with "cache issue"?
>

It was just a bug in our hardware-platform where the data cache didn't
work correctly, which turned out to mix the received packed and thus
destroy the checksum. If your data is correct (especially check the
checksums!) I don't know the problem.

Simon.


_______________________________________________
lwip-users mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/lwip-users
Reply | Threaded
Open this post in threaded view
|

Re: decreasing throughput ends in lwip-collapse

Andre Puschmann
In reply to this post by Andre Puschmann
Hello,
here is the ethereal-file i promised to upload.

http://www.puschmann.net/public/capture.tar.bz2 (~1,5MB)


Regards

Andre




Andre Puschmann wrote:

> Kieran Mansley wrote:
>> On Sat, 2006-10-28 at 13:01 +0200, Andre Puschmann wrote:
>>> Hello,
>>>
>>> sorry for the delay once again.
>>> now I can give some more detailed information about what's going on. I
>>> attached a ethereal capture file and a log file.
>> I'd also check to see if there are large numbers of packets being
>> discarded due to bad checksums (at both ends).  Although ethereal often
>> mis-reports bad checksums (e.g. if it has captured only part of a
>> packet) there are a large number being flagged as bad in that trace.
>>
>> Kieran
>
> Hi Kieran,
> I will post a full captured connection tomorrow, since I don't have more
> files on this box.
>
> I also noticed that ethereal often (always?) mis-reports bad checksums.
> If I remember correctly all ACKs of the windows-box are flagged as
> "incorrect".
>
> The curious of all those problems is that at the beginning everything
> works well.
> And than at a particular point .. the whole system is producing very odd
> things.
> Sometimes I can transfer up to 1,5gb (with 25mbit/s) with one
> connection. So it doesn't seem to be a buffer or memory problem, true?
> The fact that I can provoke this point e.g. starting a new connection or
> producing some load backs this up. But this doesn't work regularly.
>
>
> Regards
>
>
> André



_______________________________________________
lwip-users mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/lwip-users