# Netzwerkperformance-Problem eth0 eth1 rsync [gelöst]

## andi_s

Hallo,

ich habe Netzwerkperformance-Probleme mit diesem Setup

```
Router/Gateway: 192.168.1.1

pc1-eth0: 192.168.1.2

pc2-eth0: 192.168.1.3
```

Direkte Verbindung per eth1

```
pc1-eth1: 192.168.2.2

pc2-eth1: 192.168.2.3
```

```
net.ipv4.ip_forward = 1

```

Das Setup funktioniert (ssh etc.), allerdings möchte ich über die direkte Verbindung von pc1 zu pc2 daten synchronisieren ohne das die Netzwerkperformance

von 192.168.1.0 dadurch beeinflusst wird, aber genau das scheint der Fall zu sein, d.h. wenn ich über eth1 mit rsync Daten synchronisiere, dann sinkt die Performance von eth0.

Die Hardware beider Rechnern ist recht aktuell und schnell, daher schliesse ich derartige Probleme mal aus. Wenn ich mit iperf die direkte Verbindung über eth1 messe,

dann habe ich den vollen Durchsatz. Synce ich aber mit rsync dann stimmt da offensichtlich etwas mit der Performance nicht.

```
pc1#

rsync --progress --rsh=/usr/bin/ssh /daten root@192.168.2.3:/daten/
```

```
#netstat -anr

Kernel IP routing table

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface

0.0.0.0            192.168.1.1      0.0.0.0               UG      0 0          0 eth0

192.168.2.0     0.0.0.0             255.255.255.0   U         0 0          0 eth1

127.0.0.0         127.0.0.1         255.0.0.0           UG      0 0          0 lo

192.168.1.0     0.0.0.0             255.255.255.0   U         0 0          0 eth0
```

Es kommt mir so vor als ob der rsync Traffic dennoch irgendwie ueber eth0 geht, obwohl ich direkt die eth1-IP von pc2 bei rsync angebe.

Ich hoffe mir kann jemand helfen und erklären was hier schief läuft (Routing?) und was ich machen muss damit das so klappt wie ich mir das vorstelle.

Oder ist das ein rsync-Problem?

DankeLast edited by andi_s on Tue Sep 18, 2012 11:24 am; edited 2 times in total

----------

## bell

Das Routing scheint ok. zu sein. Wie sieht das Routing auf dem PC2 aus? Sollte genauso aussehen.

net.ipv4.ip_forward brauchst Du nicht, denn Du leitest ja nichts weiter.

Was sagt denn? 

```
traceroute 192.168.2.2
```

(net-analyzer/traceroute)

Und auch umgekehrt von PC2 zu PC1? Die Verbindung muss in beide Richtungen laufen.

Ggf. bringt die Namensauflösung etwas durcheinander. Setze mal die beiden Hostnamen in beide /etc/hosts Dateien mit den 192.168.2* IP-Adressen rein.

----------

## andi_s

Hallo,

Routing und traceroute sind auf pc1+pc2  identisch

```
pc1# traceroute 192.168.2.3

traceroute to 192.168.2.3 (192.168.2.3), 30 hops max, 60 byte packets

 1  192.168.2.3 (192.168.2.3)  0.053 ms  0.045 ms  0.041 ms
```

```
pc2# traceroute 192.168.2.2

traceroute to 192.168.2.2 (192.168.2.2), 30 hops max, 60 byte packets

 1  192.168.2.2 (192.168.2.2)  0.050 ms  0.050 ms  0.042 ms
```

Update:

Auch die rsync Parameter  "--address=192.168.2.2" und "--rsh="/usr/bin/ssh -b 192.168.2.2" helfen nicht. 

Ich habe den Eindruck, das rsync  immer einfach eth0 nutzt!?Last edited by andi_s on Sat Sep 15, 2012 4:12 pm; edited 3 times in total

----------

## Schorchgrinder

du könntest ja mal eth0 abstellen und schauen was rsync dann macht, wobei ich in den man-files nichts gefunden haben um ein interface ala eth2 usw anzugeben.

----------

## andi_s

eth0 kann ich leider nicht einfach mal so deaktivieren (ssh)

Ich habe zu dem Thema rsync über eth1+ leider auch nicht viel gefunden, ausser das man  "--address=" und "ssh -b" nutzen soll, was aber keinen unterschied macht.

```
pc1#

rsync  --address=192.168.2.2 --progress --rsh="/usr/bin/ssh -b 192.168.2.2" /daten root@192.168.2.3:/daten/
```

Eigentlich sollte das ja auch das Routing erledigen, wenn ich von 192.168.2.2 zu 192.168.2.3 kopiere und diesen IPs jeweils eth1 zugeordnet ist. Das ist ja eine direkte Verbindung ohne irgendeinen Router/Switch etc. dazwischen. Warum dadurch die Verbindung von eth0 belastet wird verstehe ich absolut nicht

----------

## Christian99

So mal als vermutung: höngen eth0 und eth1 intern am selben (USB oder sonstwas) Kontroller, und es liegt am kontroller, dass die performance zurück geht?

oder sowas in der art...

----------

## bell

Hast Du die Hostnamen mit den 2-er IP's in der /etc/hosts eingetragen?

Es kann sein dass der rsync erstmal den Hostnamen ermittelt und dann diesen auflöst. Dies wäre zB. eine Erklärung wieso er über das 1er Netz geht.

Um genau zu wissen was da passiert kannst Du ja mit wireshark den Datenverkehr überwachen und Dir anschauen.

----------

## andi_s

die 192.168.2.x sind in /etc/hosts eingetragen

die Verbindung läuft (laut auth.log auf pc2) eindeutig über 192.168.2.3, wenn ich die IP in rsync angebe (ohne läuft es über .1.3)

ssh auf pc2 listen: 0.0.0.0

soweit funktioniert das also...

vielleicht ist es tatsächlich ein Hardwareproblem oder es liegt an openssh...

Ich glaube ich geb's auf, wenn hier nicht noch Jemand eine Idee hat

----------

## bell

 *Quote:*   

> wenn ich die IP in rsync angebe (ohne läuft es über .1.3) 

 

Dann sind die Einträge in der hosts nicht richtig. Oder in der /etc/host.conf steht die 

```
order hosts, bind
```

 in der falschen Reihenfolge, oder "hosts" fehlt.

Überprüfe dies mal und poste ggf. die Dateien. Rsync muss auch über den Hostnamen auf die *.2.3 gehen.

----------

## andi_s

also in hosts und hosts.conf stimmt schon alles... ist so, wie Du es geschrieben hast.

Ich weiss nicht ob ich hier einen Denkfehler mache oder Du, aber wenn in hosts für pc2 zwei Einträge mit identischem  Namen, aber unterschiedlichen IPs vorhanden sind, dann kann rsync doch gar nicht wissen über welche IP es sich verbinden soll? Ich denke mal dann wird einfach der erste Eintrag genommen. Genau aus diesem Grund gebe ich ja bei rsync extra die IP an, damit eth1 genutzt wird und das passiert ja auch, von daher denke ich nicht das hier das Problem liegt.

----------

## bell

Ich bin davon ausgegangen dass Der Rechner 1 die IP des Rechner 2 vom DHCP Server bekommt. Und diese ist dann *.1.3.

Mit einem Entrag in der Hosts-Datei kann man diese übersteuern. Behalte in der hosts Datei nur die IP *.2.3. Somit würden die beiden Rechner immer direkt kommunizieren.

Das selbe entsprechend auf der anderen Seite (Rechner 2) einrichten damit auch die Rückantworten über die Leitung gehen.

Meine Vermutung ist, selbst wenn Du die IP mitgibst, macht er eine Art "Rückwerts-Suche" um den Hostnamen zu ermitteln und anschließend ermittelt er die IP. Aber es ist eine Vermutung. Um diese zu überprüfen muss die Hostnamen-Auflösung eindeutig sein, sprich zu der *.2.3 IP führen.

----------

## andi_s

@bell

ich danke dir - jetzt scheint es zu funktionieren!

Interessant ist allerdings das bei Auslastung beider Verbindungen der Durchsatz ab einem bestimmten Punkt gleichzeitig einbricht. Ich vermute mal das liegt daran das die Festplatte nicht mit dem Schreiben nachkommt...

----------

## bell

Um die Festplatten als Ursache für den Einbruch auszuschließen, erzeuge auf allen System eine Ramfs und übertrage die Dateien von RAM zu RAM   :Very Happy: 

```
mkdir /mnt/ramfs

mount -t ramfs none /mnt/ramfs/
```

----------

## andi_s

stimmt ich hab /tmp ja eh im RAM  :Wink: 

es lag -wie vermutet- an den Festplatten

----------

