I am trying to write a simple TCP proxy application with mTCP where basically the proxy can accept multiple TCP connections from a set of clients on the same TCP port and, for every new connection, creates a parallel session with a backend server with another IP:Port.
I have basically copied the epproxy application from this repo [1] (AccelTCP), modifying it in a way that it does not read the HTTP packet content but just forwards all the data from the client socket to the corresponding backend socket (without any hardware-assisted mtcp_splice operation).
You can have a look at the application here [2].
I have tested the application with iperf3, with the proxy redirecting packets from a frontend interface (where the proxy is listening to) to a backend interface (where the backend server is placed).
The problem is that performance are tremendously slow. Within a single core and the default mTCP parameters (rcvbuf = sndbuf = 8192) the reported iperf3 throughput is about 290 Kbits/sec.
I was able to achieve better results increasing the rcvbuf and sndbuf size to around 4MB but with a throughput of 50 Mbits/sec.
I am sure there is something wrong with my applicatsiion but I am not able to understand what.
Any help?
Hi there!
I am trying to write a simple TCP proxy application with mTCP where basically the proxy can accept multiple TCP connections from a set of clients on the same TCP port and, for every new connection, creates a parallel session with a backend server with another IP:Port.
I have basically copied the
epproxy
application from this repo [1] (AccelTCP), modifying it in a way that it does not read the HTTP packet content but just forwards all the data from the client socket to the corresponding backend socket (without any hardware-assistedmtcp_splice
operation). You can have a look at the application here [2].I have tested the application with iperf3, with the proxy redirecting packets from a frontend interface (where the proxy is listening to) to a backend interface (where the backend server is placed).
The problem is that performance are tremendously slow. Within a single core and the default mTCP parameters (
rcvbuf = sndbuf = 8192
) the reported iperf3 throughput is about290 Kbits/sec
. I was able to achieve better results increasing the rcvbuf and sndbuf size to around 4MB but with a throughput of50 Mbits/sec
.I am sure there is something wrong with my applicatsiion but I am not able to understand what. Any help?
Thanks!
[1] https://github.com/acceltcp/AccelTCP/tree/master/apps/epproxy/src [2] https://github.com/sebymiano/mtcp/blob/blu5_proxy_new/apps/blue5_proxy/blue5_proxy.c