[OpenAFS] speed of vos dump on linux gbit ethernet
Christof Hanke
hanke@rzg.mpg.de
Tue, 06 Jun 2006 12:27:34 +0200
This is a multi-part message in MIME format.
--------------040408090307090802090503
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Hi,
Sven Oehme wrote:
>
> i know the difference between afsd.conf and the fileserver params , but
> i have no debian box in front of me, so i can't see what's in the script
> :-)
> but you answered me what i asked Lars for , there are no params :-)
>
> Lars ,
>
> i would start with the following changes in the BosConfig file :
>
> parm /usr/lib/openafs/fileserver -nojumbo -L -rxpck 400 -udpsize 1310720
> parm /usr/lib/openafs/volserver -nojumbo -log -udpsize 1310720
>
But note that there are limits on the OS-level to the socket buffer
sizes as well.
On _linux_ these are :
receive buffer :
/proc/sys/net/core/rmem_max
send buffer :
/proc/sys/net/core/wmem_max
The value "1310720" you used above is the max size set by default on my
SuSE-machine (and probably on yours as well).
Use the small attached C-Program to check this.
Also note that the linux kernel gives you a different buffer size
(always (?) double) than you asked for.
Read http://www.ussg.iu.edu/hypermail/linux/kernel/0202.3/0292.html
for that. Although the thread is about 2.4.x kernels it seems to be the
case for 2.6.x as well.
Further interesting tuning parameters seem to be :
/proc/sys/net/unix/max_dgram_qlen (Queue length of datagrams at the
socket level)
/proc/sys/net/core/netdev_max_backlog (Queue length of packets at the
interface level)
Just to give credits, I have most this info from
http://datatag.web.cern.ch/datatag/howto/tcp.html
Although it mainly deals with tcp, the socket operations and interface
settings are valid for udp as well, thus you find more parameters to
check out there.
Christof
--------------040408090307090802090503
Content-Type: text/plain;
name="check_bufsize.c"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="check_bufsize.c"
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <errno.h>
#include <sys/select.h>
#include <unistd.h>
#include <string.h>
int main (int argc, char **argv)
{
int sockfd, port = 0;
int bufsize,desired_bufsize;
struct sockaddr_in serv_addr;
socklen_t len;
if (argc < 2 )
{
printf (" usage : udp_buffersize [desired buf-size]\n");
exit(-1);
}
desired_bufsize = atoi(argv[1]);
bzero ((char *) &serv_addr, sizeof (serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons (port);
if ((sockfd = socket (AF_INET, SOCK_DGRAM, 0)) < 0) {
printf ("client: can't open datagram socket\n");
exit(EXIT_FAILURE);
}
len = sizeof(bufsize);
getsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &bufsize, &len);
printf("default udp buffer size on this system : %d\n",bufsize);
setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &desired_bufsize, len);
printf("trying to set buffer size to %d\n",desired_bufsize);
getsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &bufsize, &len);
printf("new receive buffer size = %d\n", bufsize);
getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &bufsize, &len);
printf("Send buffer size (should be default size) = %d\n", bufsize);
while (1) {
;
}
exit(EXIT_SUCCESS);
}
--------------040408090307090802090503--