diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2008-02-05 22:29:19 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2008-02-05 22:29:19 +0000 |
commit | 5c62b53a647c42bf85db6f0a35ae95e974cd574a (patch) | |
tree | a326bc6a2b395ae0fb4343839ef453ab247333b2 /cpukit | |
parent | 2008-02-05 Joel Sherrill <joel.sherrill@oarcorp.com> (diff) | |
download | rtems-5c62b53a647c42bf85db6f0a35ae95e974cd574a.tar.bz2 |
2008-02-05 Joel Sherrill <joel.sherrill@oarcorp.com>
* libnetworking/kern/uipc_socket2.c,
libnetworking/netinet/tcp_usrreq.c,
libnetworking/netinet/udp_usrreq.c,
libnetworking/rtems/rtems_bsdnet.h, libnetworking/rtems/rtems_glue.c:
Add configuration parameters for network stack efficiency multiplier
and default socket buffer sizes. Change default multiplier from 8 to
2 to match GNU/Linux. This has no impact on performance on the BSPs
tested.
Diffstat (limited to 'cpukit')
-rw-r--r-- | cpukit/ChangeLog | 11 | ||||
-rw-r--r-- | cpukit/libnetworking/kern/uipc_socket2.c | 9 | ||||
-rw-r--r-- | cpukit/libnetworking/netinet/tcp_usrreq.c | 13 | ||||
-rw-r--r-- | cpukit/libnetworking/netinet/udp_usrreq.c | 13 | ||||
-rw-r--r-- | cpukit/libnetworking/rtems/rtems_bsdnet.h | 32 | ||||
-rw-r--r-- | cpukit/libnetworking/rtems/rtems_glue.c | 15 |
6 files changed, 93 insertions, 0 deletions
diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index 59b334adc9..b56d45890e 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,14 @@ +2008-02-05 Joel Sherrill <joel.sherrill@oarcorp.com> + + * libnetworking/kern/uipc_socket2.c, + libnetworking/netinet/tcp_usrreq.c, + libnetworking/netinet/udp_usrreq.c, + libnetworking/rtems/rtems_bsdnet.h, libnetworking/rtems/rtems_glue.c: + Add configuration parameters for network stack efficiency multiplier + and default socket buffer sizes. Change default multiplier from 8 to + 2 to match GNU/Linux. This has no impact on performance on the BSPs + tested. + 2008-02-04 Jennifer Averett <jennifer.averett@OARcorp.com> * rtems/Makefile.am, rtems/include/rtems/rtems/support.h: Added diff --git a/cpukit/libnetworking/kern/uipc_socket2.c b/cpukit/libnetworking/kern/uipc_socket2.c index 62baf6f861..74f7e1c9b0 100644 --- a/cpukit/libnetworking/kern/uipc_socket2.c +++ b/cpukit/libnetworking/kern/uipc_socket2.c @@ -65,6 +65,15 @@ static u_long sb_efficiency = 8; /* parameter for sbreserve() */ SYSCTL_INT(_kern, OID_AUTO, sockbuf_waste_factor, CTLFLAG_RW, &sb_efficiency, 0, ""); +#if defined(__rtems__) + void rtems_set_sb_efficiency( + u_long efficiency + ) + { + sb_efficiency = (efficiency == 0) ? 2 : efficiency; + } +#endif + /* * Procedures to manipulate state flags of socket * and do appropriate wakeups. Normal sequence from the diff --git a/cpukit/libnetworking/netinet/tcp_usrreq.c b/cpukit/libnetworking/netinet/tcp_usrreq.c index 8a99962a85..ba553d8b85 100644 --- a/cpukit/libnetworking/netinet/tcp_usrreq.c +++ b/cpukit/libnetworking/netinet/tcp_usrreq.c @@ -730,6 +730,19 @@ u_long tcp_recvspace = 1024*16; SYSCTL_INT(_net_inet_tcp, TCPCTL_RECVSPACE, recvspace, CTLFLAG_RW, &tcp_recvspace , 0, ""); +#if defined(__rtems__) + void rtems_set_tcp_buffer_sizes( + u_long sendspace, + u_long recvspace + ) + { + if ( sendspace != 0 ) + tcp_sendspace = sendspace; + if ( recvspace != 0 ) + tcp_recvspace = recvspace; + } +#endif + /* * Attach TCP protocol to socket, allocating * internet protocol control block, tcp control block, diff --git a/cpukit/libnetworking/netinet/udp_usrreq.c b/cpukit/libnetworking/netinet/udp_usrreq.c index 9e7d2c665c..d532e76c73 100644 --- a/cpukit/libnetworking/netinet/udp_usrreq.c +++ b/cpukit/libnetworking/netinet/udp_usrreq.c @@ -579,6 +579,19 @@ static u_long udp_recvspace = 40 * (1024 + sizeof(struct sockaddr_in)); SYSCTL_INT(_net_inet_udp, UDPCTL_RECVSPACE, recvspace, CTLFLAG_RW, &udp_recvspace, 0, ""); +#if defined(__rtems__) + void rtems_set_udp_buffer_sizes( + u_long sendspace, + u_long recvspace + ) + { + if ( sendspace != 0 ) + udp_sendspace = sendspace; + if ( recvspace != 0 ) + udp_recvspace = recvspace; + } +#endif + /*ARGSUSED*/ int udp_usrreq(so, req, m, addr, control) diff --git a/cpukit/libnetworking/rtems/rtems_bsdnet.h b/cpukit/libnetworking/rtems/rtems_bsdnet.h index 0ad1a5f9e2..5a8bf05092 100644 --- a/cpukit/libnetworking/rtems/rtems_bsdnet.h +++ b/cpukit/libnetworking/rtems/rtems_bsdnet.h @@ -154,6 +154,38 @@ struct rtems_bsdnet_config { char *log_host; /* BOOTP */ char *name_server[3]; /* BOOTP */ char *ntp_server[3]; /* BOOTP */ + /* + * Default "multiplier" on buffer size. This is + * claimed by the TCP/IP implementation to be for + * efficiency but you will have to measure the + * benefit for buffering beyond double buffering + * in your own application. + * + * The default value is 2. + * + * See kern/uipc_socket2.c for details. + */ + unsigned long sb_efficiency; + /* + * Default UDP buffer sizes PER SOCKET!! + * + * TX = 9216 -- max datagram size + * RX = 40 * (1024 + sizeof(struct sockaddr_in)) + * + * See netinet/udp_usrreq.c for details + */ + unsigned long udp_tx_buf_size; + unsigned long udp_rx_buf_size; + /* + * Default UDP buffer sizes PER SOCKET!! + * + * TX = 16 * 1024 + * RX = 16 * 1024 + * + * See netinet/tcp_usrreq.c for details + */ + unsigned long tcp_tx_buf_size; + unsigned long tcp_rx_buf_size; }; /* diff --git a/cpukit/libnetworking/rtems/rtems_glue.c b/cpukit/libnetworking/rtems/rtems_glue.c index 1313738def..88f05dad90 100644 --- a/cpukit/libnetworking/rtems/rtems_glue.c +++ b/cpukit/libnetworking/rtems/rtems_glue.c @@ -221,6 +221,9 @@ static int rtems_bsdnet_initialize (void) { rtems_status_code sc; + extern void rtems_set_udp_buffer_sizes( u_long, u_long ); + extern void rtems_set_tcp_buffer_sizes( u_long, u_long ); + extern void rtems_set_sb_efficiency( u_long ); /* * Set the priority of all network tasks @@ -238,6 +241,18 @@ rtems_bsdnet_initialize (void) if (rtems_bsdnet_config.mbuf_cluster_bytecount) nmbclusters = rtems_bsdnet_config.mbuf_cluster_bytecount / MCLBYTES; + rtems_set_udp_buffer_sizes( + rtems_bsdnet_config.udp_tx_buf_size, + rtems_bsdnet_config.udp_rx_buf_size + ); + + rtems_set_tcp_buffer_sizes( + rtems_bsdnet_config.tcp_tx_buf_size, + rtems_bsdnet_config.tcp_rx_buf_size + ); + + rtems_set_sb_efficiency( rtems_bsdnet_config.sb_efficiency ); + /* * Create the task-synchronization semaphore */ |