Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Lahmer DRBD Sync zwischen zwei Xenserver Dom0

117 views
Skip to first unread message

Daniel Meszaros

unread,
Dec 2, 2010, 8:50:56 AM12/2/10
to
Hi,

zwei mit Citrix Xenserver 5.6 installierte Maschinen sind mit 10GbE NICs
ausgestattet und sollen ein RAID mit effektiven 14 TB Datenspeicher
initial-synchronisieren.

Leider dümpelt der Spaß bei lumpigen 30 MB/s herum, unabhängig davon, ob
die Netzwerkkarten direkt miteinander oder über den Switch verbunden sind.

An den Festplatten kann es nicht liegen:
# dd if=/dev/zero of=file_1GB bs=1M count=1k
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 10.6925 seconds, 100 MB/s
^^^^^^^^^^
Auch nicht an der Netzwerkkarte selbst:
# ethtool eth2
Settings for eth2:
Supported ports: [ FIBRE ]
Supported link modes: 1000baseT/Full
10000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 1000baseT/Full
10000baseT/Full
Advertised auto-negotiation: Yes
Speed: 10000Mb/s
Duplex: Full
Port: FIBRE
PHYAD: 0
Transceiver: external
Auto-negotiation: on
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
Link detected: yes

Der Switch zeigt 10Gb/s Verbindungen an.

Der Test mit "netio" ergibt 30 bis 35 MB/s, interessanterweise aber auch
30 MB/s bei parallelem DRBD-Sync.

Ich tippe fast auf irgendeine QoS-Limitierung.

Der Vollständigkeit halber hier auch nochmal meine drbd.conf:
# cat /etc/drbd.conf
global { usage-count no; }
common {
protocol C;
net {
allow-two-primaries;
shared-secret "xenserver";
after-sb-0pri discard-zero-changes;
after-sb-1pri consensus;
after-sb-2pri disconnect;
sndbuf-size 0;
no-tcp-cork;
unplug-watermark 16;
max-buffers 8000;
max-epoch-size 8000;
}
disk {
max-bio-bvecs 1;
no-disk-flushes;
no-md-flushes;
no-disk-barrier;
}
startup {
# become-primary-on both;
}
handlers {
split-brain "/usr/lib/drbd/notify-split-brain.sh";
}
syncer {
al-extents 3389;
rate 900M;
}
}
resource drbd-sr1 {
device /dev/drbd0;
meta-disk internal;
on xen1 {
address 192.168.10.201:7788 ;
disk /dev/disk/by-id/scsi-SAdaptec_data_84A0F52B ;
}
on xen2 {
address 192.168.10.202:7788 ;
disk /dev/disk/by-id/scsi-SAdaptec_data_2538D52B ;
}
}

Kann mir jemand von Euch einen sinnvollen Tipp geben? :-/

CU,
Mészi.

Bastian Blank

unread,
Dec 2, 2010, 11:54:27 AM12/2/10
to
Daniel Meszaros wrote:
> zwei mit Citrix Xenserver 5.6 installierte Maschinen sind mit 10GbE NICs
> ausgestattet und sollen ein RAID mit effektiven 14 TB Datenspeicher
> initial-synchronisieren.
>
> Leider dümpelt der Spaß bei lumpigen 30 MB/s herum, unabhängig davon, ob
> die Netzwerkkarten direkt miteinander oder über den Switch verbunden sind.

Was passiert bei der Verwendung von aktuellen Xen- und Linux-Versionen?
So Xen 4.0.1/2 und Linux 2.6.32 oder neuer.

> An den Festplatten kann es nicht liegen:
> # dd if=/dev/zero of=file_1GB bs=1M count=1k
> 1024+0 records in
> 1024+0 records out
> 1073741824 bytes (1.1 GB) copied, 10.6925 seconds, 100 MB/s

Für aktuelle Platten ist das keine brauchbare Geschwindigkeit.

> Auch nicht an der Netzwerkkarte selbst:

> Der Test mit "netio" ergibt 30 bis 35 MB/s, interessanterweise aber auch

> 30 MB/s bei parallelem DRBD-Sync.

Eine einzelne TCP-Verbindung kann schon mehr.

> Ich tippe fast auf irgendeine QoS-Limitierung.

Da du Sachen mit Support eingekauft hast, verwende ihn.

Bastian

Sven Hartge

unread,
Dec 3, 2010, 6:50:44 AM12/3/10
to
Daniel Meszaros <sp...@meszi.de> wrote:

> zwei mit Citrix Xenserver 5.6 installierte Maschinen sind mit 10GbE
> NICs ausgestattet und sollen ein RAID mit effektiven 14 TB
> Datenspeicher initial-synchronisieren.

Ich hoffe, du hast Jumbo-Frames eingeschaltet. Bei 1GB ist das ja noch
sozusagen optional, 10GB will man nicht mehr ohne, vor allem, wenn man
irgendwelche Block-Devices darüber legt, wie z.B. iSCSI oder DRBD.

> Leider dümpelt der Spaß bei lumpigen 30 MB/s herum, unabhängig davon, ob
> die Netzwerkkarten direkt miteinander oder über den Switch verbunden sind.

Was hast du für Hardware? Also CPU, RAM, Kartentyp?

> Der Test mit "netio" ergibt 30 bis 35 MB/s, interessanterweise aber auch
> 30 MB/s bei parallelem DRBD-Sync.

Das ist übel. Da erreicht man mit normalen 1GB-Karten ja schon das
dreifache.

--
Sig lost. Core dumped.

Daniel Meszaros

unread,
Dec 3, 2010, 10:14:43 AM12/3/10
to
Hi,

Sven:
> Daniel:


>
>> zwei mit Citrix Xenserver 5.6 installierte Maschinen sind mit 10GbE
>> NICs ausgestattet und sollen ein RAID mit effektiven 14 TB
>> Datenspeicher initial-synchronisieren.
>
> Ich hoffe, du hast Jumbo-Frames eingeschaltet. Bei 1GB ist das ja noch
> sozusagen optional, 10GB will man nicht mehr ohne, vor allem, wenn man
> irgendwelche Block-Devices darüber legt, wie z.B. iSCSI oder DRBD.

Ja, hab auch schon dran gedacht. Aber das Problem ist ja offenbar
grundlegender.


>> Leider dümpelt der Spaß bei lumpigen 30 MB/s herum, unabhängig davon, ob
>> die Netzwerkkarten direkt miteinander oder über den Switch verbunden sind.
>
> Was hast du für Hardware? Also CPU, RAM, Kartentyp?

CPU & RAM:
AMD Opteron 6168 (x2), 32 GB

NIC:


# ethtool eth2
Settings for eth2:
Supported ports: [ FIBRE ]
Supported link modes: 1000baseT/Full
10000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 1000baseT/Full
10000baseT/Full
Advertised auto-negotiation: Yes
Speed: 10000Mb/s
Duplex: Full
Port: FIBRE
PHYAD: 0
Transceiver: external
Auto-negotiation: on
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
Link detected: yes

# lspci -v -v -s 02:00.0
02:00.0 Ethernet controller: Intel Corporation 82599EB 10-Gigabit
Network Connection (rev 01)
Subsystem: Intel Corporation Ethernet Server Adapter X520-1
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR+ FastB2B-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 32
Region 0: Memory at f9f80000 (64-bit, prefetchable) [size=512K]
Region 2: I/O ports at cc00 [size=32]
Region 4: Memory at f9f7c000 (64-bit, prefetchable) [size=16K]
Capabilities: [40] Power Management version 3
Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA
PME(D0+,D1-,D2-,D3hot+,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=1 PME-
Capabilities: [50] Message Signalled Interrupts: 64bit+
Queue=0/0 Enable-
Address: 0000000000000000 Data: 0000
Capabilities: [70] MSI-X: Enable+ Mask- TabSize=64
Vector table: BAR=4 offset=00000000
PBA: BAR=4 offset=00002000
Capabilities: [a0] Express Endpoint IRQ 0
Device: Supported: MaxPayload 512 bytes, PhantFunc 0,
ExtTag-
Device: Latency L0s <512ns, L1 <64us
Device: AtnBtn- AtnInd- PwrInd-
Device: Errors: Correctable- Non-Fatal- Fatal- Unsupported-
Device: RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop+
Device: MaxPayload 128 bytes, MaxReadReq 512 bytes
Link: Supported Speed unknown, Width x8, ASPM L0s, Port 0
Link: Latency L0s unlimited, L1 <32us
Link: ASPM Disabled RCB 64 bytes CommClk- ExtSynch-
Link: Speed unknown, Width x8
Capabilities: [100] Advanced Error Reporting
Capabilities: [140] Device Serial Number ae-2d-7e-ff-ff-21-1b-00
Capabilities: [150] Unknown (14)
Capabilities: [160] Unknown (16)


>> Der Test mit "netio" ergibt 30 bis 35 MB/s, interessanterweise aber auch
>> 30 MB/s bei parallelem DRBD-Sync.
>
> Das ist übel. Da erreicht man mit normalen 1GB-Karten ja schon das
> dreifache.

Hab mich nach der Lektüre von
http://forums.citrix.com/thread.jspa?messageID=1405187 dazu
durchgerungen, das Treibermodul neu zu übersetzen, denn "modinfo ixgbe"
zeigt mir Version "2.0.62.4-NAPI". Aktuell ist "3.0.14". Da das wiederum
einer virtuellen Maschine für das Device Driver Kit (DDK) bedarf und ich
für diese Woche genug von diesem Thema habe, mache ich das wohl erst am
Montag... :-)

CU,
Mészi.

Message has been deleted

Daniel Meszaros

unread,
Dec 6, 2010, 9:18:22 AM12/6/10
to
Hi!

Frank Arnim:
> Daniel Meszaros:


>
>> für diese Woche genug von diesem Thema habe, mache ich das wohl erst am
>> Montag... :-)

Nundenn, die ixgbe-Module sind jetzt kompiliert und wurden gegen
aktuelle Varianten ausgetauscht. Der netio-Test bringt mir zwischen 300
und 350 MB/s. Insgesamt ist aber das theoretische Vierfache dessen
möglich. Also ran ans Jumboframes-Frickeln ... und:

[root@xen1 ~]# ifconfig eth2 mtu 9000
SIOCSIFMTU: Invalid argument
[root@xen1 ~]# ifconfig eth2 mtu 8000
SIOCSIFMTU: Invalid argument
[root@xen1 ~]# ifconfig eth2 mtu 7000
SIOCSIFMTU: Invalid argument
[root@xen1 ~]# ifconfig eth2 mtu 6000
SIOCSIFMTU: Invalid argument
[root@xen1 ~]# ifconfig eth2 mtu 5000
SIOCSIFMTU: Invalid argument
[root@xen1 ~]# ifconfig eth2 mtu 4000
SIOCSIFMTU: Invalid argument
[root@xen1 ~]# ifconfig eth2 mtu 3000
SIOCSIFMTU: Invalid argument
[root@xen1 ~]# ifconfig eth2 mtu 2000
SIOCSIFMTU: Invalid argument
[root@xen1 ~]# ifconfig eth2 mtu 1000
[root@xen1 ~]# ifconfig eth2 mtu 1500

Das alte Treibermodul konnte das noch. :-( Ich bekomme nur MTU-Werte
kleiner/gleich 1500 eingestellt. Hmm...

Es ist zum Mäusemelken. Ich werde wohl nun mal checken müssen, ob es
einen zu ändernden Parameter im Makefile oder so gibt.


> Wenn Du noch eine Woche wartest, gibt's das Feature Pack 1 fuer
> XenServer 5.6 mit einigen aktualisierten Treibern.

Oooh, danke für den Hinweis. :-)

CU,
Daniel.

Daniel Meszaros

unread,
Dec 7, 2010, 4:46:29 AM12/7/10
to
Hi,

kleines Statusupdate ... ich bin immerhin schon mal bei knapp 500 MB/s
(TCP) angekommen.

Was habe ich getan?

1. Rückkehr zur in XenServer 5.6 mitgelieferten ixgbe-Version 2.0.62.4-NAPI.
2. net.ipv4.tcp_window_scaling auf 1
3. net.ipv4.conf.*.arp_filter auf 1
4. MTU auf 9000

Hier das "netio"-Testergebnis:
# /_tools/netio -t xen1

NETIO - Network Throughput Benchmark, Version 1.26
(C) 1997-2005 Kai Uwe Rommel

TCP connection established.
Packet size 1k bytes: 487734 KByte/s Tx, 489492 KByte/s Rx.
Packet size 2k bytes: 499068 KByte/s Tx, 498177 KByte/s Rx.
Packet size 4k bytes: 499110 KByte/s Tx, 501041 KByte/s Rx.
Packet size 8k bytes: 498451 KByte/s Tx, 499313 KByte/s Rx.
Packet size 16k bytes: 511409 KByte/s Tx, 514959 KByte/s Rx.
Packet size 32k bytes: 497324 KByte/s Tx, 497548 KByte/s Rx.
Done.

Beim UDP-Test habe ich sogar mehr als 900 MB/s erreicht, jedoch nur bei
den 8k-Paketen:
# /_tools/netio -u xen1

NETIO - Network Throughput Benchmark, Version 1.26
(C) 1997-2005 Kai Uwe Rommel

UDP connection established.
Packet size 1k bytes: 66836 KByte/s (78%) Tx, 57808 KByte/s (82%) Rx.
Packet size 2k bytes: 154419 KByte/s (72%) Tx, 144544 KByte/s (75%) Rx.
Packet size 4k bytes: 522675 KByte/s (35%) Tx, 503970 KByte/s (41%) Rx.
Packet size 8k bytes: 972242 KByte/s (1%) Tx, 960419 KByte/s (2%) Rx.
Packet size 16k bytes: 281944 KByte/s (72%) Tx, 283030 KByte/s (72%) Rx.
Packet size 32k bytes: 367899 KByte/s (64%) Tx, 365101 KByte/s (64%) Rx.
Done.

Ich werde mich nun nochmal an die übrigen "Tuningtipps" von Intel setzen
und schauen, ob ich bei TCP auch noch mehr heraus bekomme. Und dann
beginnt das Bangen, ob ich diese Ergebnisse auch auf DRBD übertragen
bekomme.

CU,
Daniel.

Daniel Meszaros

unread,
Dec 9, 2010, 9:08:34 AM12/9/10
to
Hi!

Daniel:


> Sven:
>> Daniel:
>>
>>> zwei mit Citrix Xenserver 5.6 installierte Maschinen sind mit 10GbE
>>> NICs ausgestattet und sollen ein RAID mit effektiven 14 TB
>>> Datenspeicher initial-synchronisieren.
>>
>> Ich hoffe, du hast Jumbo-Frames eingeschaltet. Bei 1GB ist das ja noch
>> sozusagen optional, 10GB will man nicht mehr ohne, vor allem, wenn man
>> irgendwelche Block-Devices darüber legt, wie z.B. iSCSI oder DRBD.
>
> Ja, hab auch schon dran gedacht. Aber das Problem ist ja offenbar
> grundlegender.

So, habe eben einen erneuten Initialsync mit Jumbo-Frames und
aktivierten ARP-Filtern gestartet (siehe auch meine Nachricht in diesem
Thread vom 07.12., 10:46 Uhr).

Leider dümpelt der Sync nach wie vor bei 30 MB/s herum, während
Performancemessungen mit "netio" Raten um 500 MB/s brachten.

"top" zeigt an, dass die CPU zu 98% idle ist. "xentop" zeigt eine
CPU-Auslastung von 5 bis 10%.

Meine drbd.conf ist unverändert. Kennt jemand von Euch ggf. noch einen
Parameter, an dem es sich zu schrauben lohnte?

CU,
Mészi.

Daniel Meszaros

unread,
Dec 9, 2010, 9:11:30 AM12/9/10
to
Hi,

hier nochmal ein Output von /proc/drbd...


Every 2.0s: cat /proc/drbd Thu Dec 9
15:09:51 2010

version: 8.3.8.1 (api:88/proto:86-94)
GIT-hash: 0d8589fcc32c874df57c930ca1691399b55ec893 build by
ro...@localhost.local
domain, 2010-08-12 07:46:27
0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r----
ns:0 nr:33494272 dw:33462272 dr:0 al:0 bm:2042 lo:1001 pe:29016
ua:1000 ap:0
ep:1 wo:d oos:2683960284
[>....................] sync'ed: 0.3% (15203964/15236644)M
finish: 118:38:49 speed: 36,440 (29,584) K/sec


CU,
Daniel.

Ralf Gross

unread,
Dec 9, 2010, 1:49:53 PM12/9/10
to
Daniel Meszaros wrote:
> Hi!
>
> Daniel:
>> Sven:
>>> Daniel:
>>>
>>>> zwei mit Citrix Xenserver 5.6 installierte Maschinen sind mit 10GbE
>>>> NICs ausgestattet und sollen ein RAID mit effektiven 14 TB
>>>> Datenspeicher initial-synchronisieren.
>>>
>>> Ich hoffe, du hast Jumbo-Frames eingeschaltet. Bei 1GB ist das ja noch
>>> sozusagen optional, 10GB will man nicht mehr ohne, vor allem, wenn man
>>> irgendwelche Block-Devices darüber legt, wie z.B. iSCSI oder DRBD.
>>
>> Ja, hab auch schon dran gedacht. Aber das Problem ist ja offenbar
>> grundlegender.
>
> So, habe eben einen erneuten Initialsync mit Jumbo-Frames und
> aktivierten ARP-Filtern gestartet (siehe auch meine Nachricht in diesem
> Thread vom 07.12., 10:46 Uhr).
>
> Leider dümpelt der Sync nach wie vor bei 30 MB/s herum, während
> Performancemessungen mit "netio" Raten um 500 MB/s brachten.
> ...

bist du sicher das die syncer rate nicht irgendwo falsch gesetzte ist?
Vergleich mal den Dump der Konfig.

http://www.drbd.org/users-guide/re-drbdadm.html

Und taste dich doch mal von kleineren Werten an die 900M ran.

http://www.drbd.org/users-guide/s-configure-syncer-rate.html

drbdsetup /dev/drbdnum syncer -r 10M .... bis 900M

Was passiert dann? Siehst du die 10MB/s wenn du sie einstellst? Ist
wieder bei 30 MB/s Schluss?

Ralf

Daniel Meszaros

unread,
Dec 10, 2010, 4:15:07 AM12/10/10
to
Hi!

Ralf:
> Daniel:


>> Leider dümpelt der Sync nach wie vor bei 30 MB/s herum, während
>> Performancemessungen mit "netio" Raten um 500 MB/s brachten.
>> ...
>
> bist du sicher das die syncer rate nicht irgendwo falsch gesetzte ist?
> Vergleich mal den Dump der Konfig.
>
> http://www.drbd.org/users-guide/re-drbdadm.html
>
> Und taste dich doch mal von kleineren Werten an die 900M ran.
>
> http://www.drbd.org/users-guide/s-configure-syncer-rate.html
>
> drbdsetup /dev/drbdnum syncer -r 10M .... bis 900M
>
> Was passiert dann? Siehst du die 10MB/s wenn du sie einstellst? Ist
> wieder bei 30 MB/s Schluss?

Danke für den Hinweis. Vielleicht ist das der Schlüssel zur Lösung, denn
mir fällt gerade etwas Kurioses auf.

# drbdsetup /dev/drbd0 syncer -r 1M
...Sync Speed nach wie vor 30 MB/s

# drbdsetup /dev/drbd0 show
[...]
syncer {
rate 1024k; # bytes/second
[...]

# drbdsetup /dev/drbd0 syncer -r 100M
...Sync Speed immernoch 30 MB/s

# drbdsetup /dev/drbd0 show
[...]
syncer {
rate 102400k; # bytes/second
[...]

Selbiges passiert, wenn ich diese Werte direkt in /etc/drbd.conf ablege
und den drbd Service neu starte.

:-/

CU,
Daniel.

Daniel Meszaros

unread,
Dec 21, 2010, 5:12:51 AM12/21/10
to
Hi!

Nur für den Fall, dass irgendwer mal auf der Suche nach einer Lösung zu
einem identischen Problem hier aufschlägt...

# lspci | grep 10-Giga


02:00.0 Ethernet controller: Intel Corporation 82599EB 10-Gigabit
Network Connection (rev 01)


Folgende Einstellungen haben geholfen...

# cat /etc/drbd.conf
global { usage-count no; }
common {
protocol C;
net {
allow-two-primaries;

shared-secret "hahnfilmxenserver";


after-sb-0pri discard-zero-changes;
after-sb-1pri consensus;
after-sb-2pri disconnect;
sndbuf-size 0;
no-tcp-cork;

unplug-watermark 8000;


max-buffers 8000;
max-epoch-size 8000;
}
disk {
max-bio-bvecs 1;
no-disk-flushes;

no-disk-barrier;
}
startup {


become-primary-on both;
}
handlers {
split-brain "/usr/lib/drbd/notify-split-brain.sh";
}
syncer {

al-extents 511;
rate 2048M;


}
}
resource drbd-sr1 {
device /dev/drbd0;
meta-disk internal;
on xen1 {

address 192.168.20.201:7788 ;
disk /dev/disk/by-id/scsi-SAdaptec_data_84A0F52B ;
}
on xen2 {
address 192.168.20.202:7788 ;
disk /dev/disk/by-id/scsi-SAdaptec_data_2538D52B ;
}
}


Der MTU der NICs ist auf 9000 gestellt.


Das nachfolgende Script wird beim Systemstart aufgerufen (/etc/rc.local)
und macht ein wenig 10GbE-NIC-Tuning...

# cat /_scripts/101_tune_network.sh
#!/bin/bash
SYSCTL=$(which sysctl)
IFCONFIG=$(which ifconfig)
$SYSCTL -w net.ipv4.conf.all.arp_filter=1
$SYSCTL -w net.ipv4.conf.default.arp_filter=1
$SYSCTL -w net.ipv4.conf.lo.arp_filter=1
$SYSCTL -w net.ipv4.conf.eth2.arp_filter=1
$SYSCTL -w net.ipv4.conf.xenbr2.arp_filter=1
$SYSCTL -w net.ipv4.conf.eth1.arp_filter=1
$SYSCTL -w net.ipv4.conf.xenbr1.arp_filter=1
$SYSCTL -w net.ipv4.conf.eth0.arp_filter=1
$SYSCTL -w net.ipv4.conf.xenbr0.arp_filter=1
$SYSCTL -w net.core.rmem_max=16777216
$SYSCTL -w net.ipv4.tcp_rmem="4096 87380 16777216"
$SYSCTL -w net.core.wmem_max=16777216
$SYSCTL -w net.ipv4.tcp_wmem="4096 87380 16777216"
$SYSCTL -w net.core.rmem_default=65536
$SYSCTL -w net.core.wmem_default=65536
$SYSCTL -w net.ipv4.tcp_mem="16777216 16777216 16777216"
$SYSCTL -w net.ipv4.tcp_timestamps=1
$SYSCTL -w net.ipv4.tcp_sack=1
$SYSCTL -w net.ipv4.tcp_window_scaling=1
$SYSCTL -w net.ipv4.tcp_no_metrics_save=1
$SYSCTL -w net.core.netdev_max_backlog=30000
$SYSCTL -w net.ipv4.route.flush=1


CU,
Mészi.

0 new messages