Ondrej,
Thanks for pointing toward the directions of route cache. I think you might be right about the cache, even though there are multiple cache entries for 10.25.14.20 (the server) in this case, there's still only one path selected for each destination i.e. instead of multiple path for each destination...
10.25.14.20 via 10.25.206.69 dev eth1 src 10.25.206.70
cache used 3 age 38sec ipid 0xfe2e rtt 40ms rttvar 10ms ssthresh 4081 cwnd 7935
10.25.14.20 via 10.25.205.69 dev eth0 src 10.25.205.70
cache used 13 age 4sec ipid 0xfe2e rtt 40ms rttvar 10ms ssthresh 4081 cwnd 7935
I think the problem is more with the way the client selected the interface to use then the route cache in this case. For example, you see that 10.25.205.70 interface is selected here instead of dividing the threads into multiple interfaces between 10.25.205.70 and 10.25.206.70 in which this host have two physical connections. I'm wondering if there is a way to ties say the dummy0 interface so that if you point traffic toward it, it will hash it across two physical links...
------------------------------------------------------------
Client connecting to 10.25.14.20, TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------
[ 6] local 10.25.205.70 port 52606 connected with 10.25.14.20 port 5001
[ 4] local 10.25.205.70 port 52603 connected with 10.25.14.20 port 5001
[ 5] local 10.25.205.70 port 52605 connected with 10.25.14.20 port 5001
[ 3] local 10.25.205.70 port 52604 connected with 10.25.14.20 port 5001
These nodes are not setup for transit traffic but I'm wondering how the through transit traffic would look and how the kernel would decide how to balance the traffic or it would pick one instead of two..