Browse Source

Implement a work-around for poor ggate write performance.

tags/ggatessh-v1.0.0
pjd 17 years ago
parent
commit
74db3a0a0d
2 changed files with 12 additions and 1 deletions
  1. +1
    -0
      ggatec/Makefile
  2. +11
    -1
      shared/ggate.c

+ 1
- 0
ggatec/Makefile View File

@@ -6,6 +6,7 @@ PROG= ggatec
MAN= ggatec.8 MAN= ggatec.8
SRCS= ggatec.c ggate.c SRCS= ggatec.c ggate.c


CFLAGS+= -DMAX_SEND_SIZE=32768
CFLAGS+= -DLIBGEOM CFLAGS+= -DLIBGEOM
CFLAGS+= -I${.CURDIR}/../shared CFLAGS+= -I${.CURDIR}/../shared




+ 11
- 1
shared/ggate.c View File

@@ -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 ssize_t
g_gate_send(int s, const void *buf, size_t len, int flags) 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; const unsigned char *p = buf;


while (len > 0) { while (len > 0) {
done2 = send(s, p, len, flags);
done2 = send(s, p, MIN(len, MAX_SEND_SIZE), flags);
if (done2 == 0) if (done2 == 0)
break; break;
else if (done2 == -1) { else if (done2 == -1) {


Loading…
Cancel
Save