●Top ●Diary (old) ●Products ●Documents ●Donation ●Link

coLinux and X server

Introduction and Motivation

Cygwin/X遅い遅いって言われるけど、multiwindowのウィンドウ操作や再描画の遅さ、 最適化してないことを勘定に入れてもXnestでKNOPPIXを飛ばす分には関係ない気が するし、商用Xサーバー使ってもKDEはやっぱ辛い。VNC早いって言ってもそもそも 構造違うじゃん。

Benchmark

x11perf -repeat 5 -rect500 -f14text16 -copypixwin500 -putimage500 -shmput500 でXサーバーのパフォーマンスをテスト。

Test Environment

AMD Athlon 64 2800+
ASUSTeK K8V SE DX
512MB DDR DIMM
NVIDIA GeForce FX 5200

Windows XP Professional SP1
cygwin 1.5.11-1
xorg-x11-base 6.8.0.0-1
X-Win32 6.0デモバージョン
WRQ Reflection X 12.0.2評価版
Cooperative Linux 0.6.2
Knoppix 3.4 20040517-20040820

Result

Cygwinを使ってローカルでx11perfを実行した結果。
500x500 rectangleChar16 in 40-char line (k14) Copy 500x500 from pixmap to windowPutImage 500x500 square ShmPutImage 500x500 square
Cygwin/X 2000 reps @ 3.7091 msec (270.0/sec) 400000 reps @ 0.0139 msec ( 72100.0/sec) 1600 reps @ 4.0877 msec ( 245.0/sec) 80 reps @ 99.0660 msec ( 10.1/sec) 1200 reps @ 4.2127 msec ( 237.0/sec)
X-Win32 30000 reps @ 0.1957 msec ( 5110.0/sec) 120000 reps @ 0.0538 msec ( 18600.0/sec) 320 reps @ 16.0175 msec ( 62.4/sec) 8 reps @ 663.0741 msec ( 1.5/sec) -
Reflection X 30000 reps @ 0.1950 msec ( 5130.0/sec) 8000000 reps @ 0.0011 msec (945000.0/sec) 320 reps @ 16.1303 msec ( 62.0/sec) 28 reps @ 254.3465 msec ( 3.9/sec) -

coLinuxでx11perfを実行した結果。
500x500 rectangleChar16 in 40-char line (k14) Copy 500x500 from pixmap to windowPutImage 500x500 square ShmPutImage 500x500 square
Cygwin 2000 reps @ 3.5264 msec 284.0/sec 800000 reps @ 0.0103 msec 97400.0/sec 1600 reps @ 3.9189 msec 255.0/sec 12 reps @ 438.2211 msec 2.3/sec -
X-Win32 30000 reps @ 0.1895 msec 5280.0/sec 120000 reps @ 0.0521 msec 19200.0/sec 320 reps @ 15.5145 msec 64.5/sec 20 reps @ 263.0146 msec 3.8/sec -
Reflection X 30000 reps @ 0.1906 msec 5250.0/sec 3200000 reps @ 0.0017 msec 573000.0/sec 360 reps @ 1p.4839 msec 64.6/sec 20 reps @ 260.7139 msec 3.8/sec -
RealVnc client 3000 reps @ 1.8129 msec 552.0/sec 800000 reps @ 0.0060 msec 167000.0/sec 2000 reps @ 2.7148 msec 368.0/sec 240 reps @ 23.8125 msec 42.0/sec 2000 reps @ 2.8870 msec 346.0/sec ShmPut500x500

それぞれの結果をローカルのx11perfをCygwin/Xサーバーで実行した結果を 1として正規化する。
500x500 rectangleChar16 in 40-char line (k14) Copy 500x500 from pixmap to windowPutImage 500x500 square
Cygwin/X 1111
X-Win3218.925925930.2579750350.2546938780.148514851
Reflection X1913.106796120.2530612240.386138614
coLinux-Cygwin1.0518518521.3509015261.0408163270.227722772
coLinux-X-Win3219.555555560.266296810.2632653060.376237624
coLinux-Reflection X19.444444447.9472954230.2636734690.376237624
coLinux-RealVnc client2.0444444442.3162274621.5020408164.158415842

Conclusions

全体的な特徴としてCygwin/Xはrect500が遅くcopypixwin500が早い。 Reflection Xはf14text16が早くX-Win32はf14text16が遅い。 VNCはputimage500が早く、shmput500が使える。

Lanの向こうのLinuxマシンからx11perfを飛ばすとReflection X・Cygwin/X共に putimage500で9.0/sec程度になる。このときの受信スループットが1Gbpsの7%に なっているのでputimage500は、ほぼネットワークの速度に依存すると思われる。

Cygwin/XでShadow GDI・Shadow DirectDraw・Shadow DirectDraw4 Non-Lockingの どれを使ってもスコアは測定誤差の範囲内だったのでShadow Bufferからの転送が ボトルネックになっているわけではない。

Netperf network usage

Netperfを使ってスループット測定した時のネットワーク使用率をタスクマネージャーで 見ると4%前後になる。 coLinuxでTAPを用いた時の限界スループットがおそらくこの程度。

Reflection X network usage

Reflection Xはputimage500でほぼ帯域を使い切ってるのでReflection Xを 使ってる場合はTAPがボトルネックになっている可能性が。

Cygwin/X network usage

Cygwin/Xは、ローカルではputimage500早いのに、coLinuxで実行すると遅い。

VNC network usage

VNCはrect500やcopypixwin500でもそこそこ帯域を使うけれど、 f14text16やputimage500でもほとんど転送量が変わらない。

Netperfの測定結果によるとWindows→coLinuxのスループットが17.76Mbps、 coLinux→Windowsが35.93Mbps。

time dd if=/dev/cobd1 of=/dev/null ibs/1024 count=10000 してみると20秒ほどで転送が終わって5Mbytes/sec程度で40Mbps。 coLinuxとWindows間のデータ転送の限界がこの程度とすると、 TAP接続でほぼ限界速度がでている。

Contact me <zakki@peppermint.jp>
© 2001-2006 zakki. total:total /yesterday:yesterday /today:today
updated:Monday, 20-Dec-2004 09:16:31 JST