diff options
author | pjd <pjd@FreeBSD.org> | 2007-04-06 11:19:48 +0000 |
---|---|---|
committer | pjd <pjd@FreeBSD.org> | 2007-04-06 11:19:48 +0000 |
commit | a27cf626d623b3403be9f2363d7427d3cf724ea8 (patch) | |
tree | 88e376ba5139e22eb2e8c716704023cefb9f8fba /sbin/ggate | |
parent | 6be01b7ba0845eb5a6d3772d0a9209aa967b19e7 (diff) | |
download | FreeBSD-src-a27cf626d623b3403be9f2363d7427d3cf724ea8.zip FreeBSD-src-a27cf626d623b3403be9f2363d7427d3cf724ea8.tar.gz |
Implement a work-around for poor ggate write performance.
Diffstat (limited to 'sbin/ggate')
-rw-r--r-- | sbin/ggate/ggatec/Makefile | 1 | ||||
-rw-r--r-- | sbin/ggate/shared/ggate.c | 12 |
2 files changed, 12 insertions, 1 deletions
diff --git a/sbin/ggate/ggatec/Makefile b/sbin/ggate/ggatec/Makefile index c49cfe8..4d8917f 100644 --- a/sbin/ggate/ggatec/Makefile +++ b/sbin/ggate/ggatec/Makefile @@ -6,6 +6,7 @@ PROG= ggatec MAN= ggatec.8 SRCS= ggatec.c ggate.c +CFLAGS+= -DMAX_SEND_SIZE=32768 CFLAGS+= -DLIBGEOM CFLAGS+= -I${.CURDIR}/../shared diff --git a/sbin/ggate/shared/ggate.c b/sbin/ggate/shared/ggate.c index 09e35d3..dd40790 100644 --- a/sbin/ggate/shared/ggate.c +++ b/sbin/ggate/shared/ggate.c @@ -222,6 +222,16 @@ g_gate_load_module(void) } } +/* + * When we send from ggatec packets larger than 32kB, performance drops + * significantly (eg. to 256kB/s over 1Gbit/s link). This is not a problem + * when data is send from ggated. I don't know why, so for now I limit + * size of packets send from ggatec to 32kB by defining MAX_SEND_SIZE + * in ggatec Makefile. + */ +#ifndef MAX_SEND_SIZE +#define MAX_SEND_SIZE MAXPHYS +#endif ssize_t g_gate_send(int s, const void *buf, size_t len, int flags) { @@ -229,7 +239,7 @@ g_gate_send(int s, const void *buf, size_t len, int flags) const unsigned char *p = buf; while (len > 0) { - done2 = send(s, p, len, flags); + done2 = send(s, p, MIN(len, MAX_SEND_SIZE), flags); if (done2 == 0) break; else if (done2 == -1) { |