linux パフォーマンスチューニング
>>177
nvidiaドライバ使ってるんだけどね。それでも遅いね。
windowsとまでは言わないけどgtk1くらいの描画スピードにはなってほしいな。 >>173
俺の環境は
CPU: Crusoe (mtrr対応してない)
VGA: siliconmotion(DRI対応ドライバがない)
だ。もんくあるか。
でもsiliconmotionのMAN見ながらxorg.confに
Option "pci_burst"
したらちょっと速くなった。
おまいらもビデオチップのMANはよく読んどけよ。 卒業研究でPCクラスタを構築して,並列処理の効率をあげる研究を
しています.
FedoraCore2 がインストールされているマシンなのですが,
FreeBSD 4.10Rがインストールされているマシンと比較して,
どうしても性能が上がらなくて困っています.
ハードウェア構成は,Xeon 2.6GHz x 2 のSMPで,チップセットは不明ですが,
ハイパースレッド対応のものです.
メモリは1GBで,HDDはシーゲートの120GB 7200rpm のものを使っています.
HDDは,UDMAで認識されています.
特に通信速度とディスクIOの性能が著しく悪く,現在開発中のソフトウェアで,
ベンチマークをとってみたのですが,同じスペックのハードウェアで
FreeBSD 4.10-stable が入っているマシンの半分ぐらいしか性能が出ません.
特に,オンボードでintel のギガビットNICがついているのですが,
FreeBSDがインストールされているマシンの30%ぐらいの速度を
出すのがやっとのようです.
ネットワークやディスクに関して,どの部分でチューニングすれば
性能が向上しますか? それだけだと、ソフトの問題かOSの問題か分からない。
もっとメジャーなツールでの比較をお勧めする。
その上で、どこがネックになっているのかを見つけてみたら? >>180
でも、FedoraCore2だったら、おおむねFreeBSDの方が
いろいろな点で速いよ。 >>181
>>182
レスありがとうございました.
メジャーなツールでの比較ですが,bytebenchなどいくつかやってみたのですが,
いくつかの項目で Linux の方が速いものの全体的には FreeBSDの方が速いようです.
それで試しに,お互いのPCのHDDのみを交換して速度を計ってみましたが,
結果は変わらないようです.
この場合でも我々が開発したソフトウェアでは,やはりLinuxの方がネットワーク速度は
著しく遅いし,HDDの読み書きも遅い状態です.
なぜFreeBSD側の方がこれだけ速いのか,非常に謎です.
なお使用したHDDは,Linux, FreeBSD共に同じ時期に買った同じ型番の
ものですので,HDDそのものの性能差はないと思います.
LinuxとFreeBSD共に設定はインストールしたままのデフォルト状態です.
Linuxの方は,一度再インストールしたのですが,結果は変わりませんでした.
>>183
>HDDの読み書きも遅い状態です.
DMAはonになってます?
FedoraCore2使ったことないのでハズしてるかもしれませんが,
ディストリビューションによっては
hdparmでonにする必要があるかと思うのですが.
180には
>HDDは,UDMAで認識されています.
とありますが「起動時のIDEドライバのログ見て仰ってるのかな?」
と気になったもので
>183
煽るつもりはないけど、「著しい」差があるとすれば、
やはり、そのプログラムに依存した問題なのでは。 どーせあれだろ。fedoraは最初インストールしたまま何も
いじってない状態なんだろ。それなら激重だよ。他のディストリと
比べてもfedora(redhat)は重いしさ。 だとすると、他のプロセスに処理を食われてて遅いという
可能性? >183 は、それくらいは分かってると思うけど。
後は、LinuxでどのFSを選んでるかもあるけど、(ジャーナルがあって遅いとか)
どうやら、遅いのはHDDへの書き込みだけでなく、
ネットワークの転送速度も差が出てるっぽいね。 gcc 3.3.4の-finline-limit=n(だったような)の、Nの標準値って幾らなんでしょうか。
10000だとか600だとか、サイトによってバラバラで分かりませんでした。 >>188
FedoraではXが動いているだけでネットワーク速度が
30%とかにまで低下するの? >>180
Fedoraがどうかはしらないけど、RedHatでクラスタくむとき、
RedHat純正カーネルにあたってるvmだかスケジューラだかのパッチが
タコで、全然パフォーマンスがあがらない、ってのがあるらしい。
とりあえず、カーネル入れ直してみたら。 Fedora は X を切った状態でもなぜか非常に重い。
いや、赤帽も重かったのだが。
Debian とかを使えば、速くなるってことはない?
FreeBSDに負けっ放しっていうのはちょっとな。 Linuxなんかいじりまわしてる事自体が痛い行為だと気付いたほうがいいキケー! >>193
とりあえず、Fedoraをやめる方向でいくというのはどう?
Debian お勧め! glibcにO3フラグつけないほうがいいのかな
glibc以外は全部O3つけてもいいのか -O3よりむしろ自分のCPUに合わせて-marchとか付けた方がいい >>199
でも,glibcには何もつけないほうがいいらしい。 glibcとemacs以外全部に
-O3 -march=k6-2 -mmx -m3dnow -pipe -fomit-frame-pointer
つけて動かしてみました >>204
k6-2ユーザーキタ────!!! 人柱乙。
今さら遅いが The LFS Book によれば binutils と
gcc も CFLAGS を変えない方が無難らしい。
実際、uclibc toolchain のビルドで -march=k6-2 を
つけたら失敗して、デフォルトの CFLAGS にしたら
うまくいった経験がある。 K6-IIIだけど -march=k6 と -pipe しか指定したことない。
不充分?
>>206
ttp://www.freehackers.org/gentoo/gccflags/flag_gcc3.html
を見ると-march=k6-3まで指定できるらしい Firefoxをこんな感じで最適化してる @gcc3.3.5
--enable-optimize="-pipe -ftracer -O2 -march=athlon-xp -mfpmath=sse,387 \
-frename-registers -fforce-addr -fprefetch-loop-arrays \
-fno-math-errno -fno-trapping-math -fno-signaling-nans"
ckなカーネル使ってる人なら
kernel.interactive=1
vm.hardmaplimit=0
vm.mapped=66
ここらへんいじってみるのもいいんじゃないかな。 今のところPenIII800Mhzで起動時間6秒がオレの最高記録
超意味無かったけど 6sec mo kakatteruno?
osso--- デスクトップ用途なんですけど、起動高速化のポイントを教えてチョンマゲ。 ttp://bootchart.sourceforge.net/ デスクトップ用途なら、起動高速化するより
ハイバネーションしたほうがよくね? え、いつのまにLinuxでハイバネ出来るようになったんだ?ACPIで? ハイバネーション自体は10年近く前からできたと思うが。
Thinkpad560でハイバネーション使ってたし。 >>217
Power Management supportにSoftware Suspendがある。
これはACPIとかAPMには依存しないらしい。
漏れも、リブレットでハイバネーションしてた気がする。
もう全然覚えてないんだけど。 >>214
ガンガンモジュール化してカーネルサイズをできる限り小さくする。
起動するデーモンの数を減らす。
ブートスクリプトからif文を極力減らす。
>ブートスクリプトからif文を極力減らす。
前2つはもちろんやってるんですけど、この辺りが難しい。
取捨のポイントとか、ノウハウがあったら教えて欲しい。 >>221
俺もあんま詳しいわけじゃないんだけど例えば、
if devfs
else udev
fi
みたいなかんじでudevを使うとしたらこういうときはudevがあること前提で
if文による存在確認なしでudevを実行しちゃうとか。
おれはarch linuxをベースにいろいろやってんだけどブートスクリプトを
起動順におっかけるとシステムの理解にもつながると思うよ。速くなる効果は
そんなにないと思うけど。デーモンの起動スクリプトなんかはだいたい
条件文使ってる場合が多いけど自分専用なら無条件で起動してもいいんじゃん?
汎用性は思いっきり下がるけどね。ただfedoraとかでは難しいんじゃないかな。
ブートスクリプトが複雑すぎる。plamoやslackやcruxやarchなんかは
わかりやすいよ。 うーん。もちろん起動スクリプト(rc.sysinit)は追ってるんですけど
大きな流れはわかるけど、どれが必要か、どれが不要かって悩んでるんですよ。
例えばquotaとか、usb-file-systemとか、そういう所のチューニング方法のノウハウはないかなと。
ずっと前から、ちょっとづつ見てるんですけど、なかなかポイントが見出せないんです。
とりあえず、起動メッセージを(redhat型の)旧来型にしてる位はやってます。
>>223
こーゆーアプローチもあるみたいよ。↓の「起動プロセスの高速化」のとこ。
ttp://www.debian.org/News/weekly/2004/46/
デスクトップ用途だと稼ぎ代があまりないかもしれんけど。 ありがとうございます。
ですが、その類のサーバー類全て動いてません.... WinXPのアンチエイリアスとかClearTypeのベンチ結果。2kと比べて遅いという結果。
ttp://www.atmarkit.co.jp/fwin2k/xp_feature/015xpperftes01/xpperftes05.html
Linuxだとどうなる?gtkとかqtとか。 ttp://www.anandtech.com/printarticle.aspx?i=2114
SuSE速いね。Fedoraはどっか壊れてる。 gcc以外のコンパイラ試した人いる?
intel純正のFree版 for Linuxとかどうなの?
gccより速いのは分かってるんだけど話題に上がらないのなんでかな?
とりあえずiccインストールしてみた。
パフォーマンステスト用のいいソースコードない?
サンクス。
ちょっと試してみた結果。
scimark2
gcc -march=i686 -O3 -pipe -fomit-frame-pointer
Composite Score: 170.11
FFT Mflops: 142.97 (N=1024)
SOR Mflops: 255.56 (100 x 100)
MonteCarlo: Mflops: 52.63
Sparse matmult Mflops: 167.18 (N=1000, nz=5000)
LU Mflops: 232.20 (M=100, N=100)
icc -O2 -tpp6
Using 2.00 seconds min time per kenel.
Composite Score: 205.57
FFT Mflops: 135.42 (N=1024)
SOR Mflops: 306.84 (100 x 100)
MonteCarlo: Mflops: 39.13
Sparse matmult Mflops: 189.96 (N=1000, nz=5000)
LU Mflops: 356.48 (M=100, N=100)
gcc 3.3.2
icc 8.1 先週立ち読みしたUNIX USERにiccの記事があったよ。これだったかな?
ttp://www.unixuser.jp/magazine/2005/200504.html
gzipとかbzip2とかでテストして、速くなったり遅くなったりという結果だった。
遅くなるやつは、gcc向けにソース書いたりしてて遅くなるのかな? FFTは逆に遅くなるのか・・・・・・
面白い結果だな
FireFoxのconfigure覗いたらiccにも対応してるのにやり方が思いつかない。
何度読んでも分からない。
くやしいな。 specちょっと書き換えるだけでiccに変更できる。
はずだったけど一部直にgccと埋め込んであるmakeがあり苦戦中、反則だよ。
firefoxってwin,Mac,linux、ソースコード共通なんだね、びっくりした。
ついでにfirefoxのconfigure。
1040行めのifに対するelseが1975行め、こんなの読めるわけねぇだろ!
>1040行めのifに対するelseが1975行め、こんなの読めるわけねぇだろ!
ワロス >>237
俺もそう思う。Fedoraとかのブートもそういう域に入ってると思うな。
全体的に見通しをよくしてほしいね。 2週間後にレスがつくとは。
firefoxのiccビルド完走したよ。
一応動いたけどちょっと遅い、最適化の失敗だと思う。
追いかける元気なし。
ビルドの進行状況は/BUILD/mozillaのファイル数で分かる。
5万4千ちょっとがゴール。
iccは大変だったけどgccなら何もしなくてもbuildできる。
やればi386の標準的なやつより速くなるよ。
すんなり通るかどうか分からん時は、まず最適化無しで試してみれば?
C++でも一瞬で終わる。 http://www.spec.org/jAppServer2004/results/
Red Hat Enterprise Linux AS 3.0 SP1
These entries were added to /etc/sysctl.conf
net.core.netdev_max_backlog = 7000
net.ipv4.tcp_syn_retries = 20
net.ipv4.tcp_synack_retries = 20
net.ipv4.tcp_fin_timeout = 30
vm.max_map_count = 131072
This entry was added to /root/.bash_profile
ulimit -n 8192
SuSE Linux Enterprise Server 8, Service Pack 3
These entries were added to /etc/init.d/sysctl.conf
net.core.netdev_max_backlog = 600
net.core.somaxconn = 1024
net.ipv4.tcp_synack_retries = 20
net.ipv4.tcp_fin_timeout = 30
fs.file-max=65535
kernel.shmmax=1073741824
net.ipv4.tcp_sack=0
net.ipv4.tcp_timestamps=0
vm.bdflush=100 1200 128 512 15 5000 100 0 0
kernel.sched_yield_scale=1
This entry was added to /root/.profile
ulimit -n 8192
SuSE Linux Enterprise Server 8, Service Pack 3
These entries added to /etc/init.d/sysctl.conf
fs.file-max=65535
kernel.shmmax=1073741824
net.ipv4.tcp_sack=0
net.ipv4.tcp_timestamps=0
vm.bdflush=100 1200 128 512 15 5000 100 0 0
kernel.sched_yield_scale=1
SuSE Linux Enterprise Server 8 Service Pack 3
These entries added to /etc/init.d/sysctl.conf
fs.file-max=65535
kernel.shmmax=1073741824
net.ipv4.tcp_sack=0
net.ipv4.tcp_timestamps=0
vm.bdflush=100 1200 128 512 15 5000 100 0 0
kernel.sched_yield_scale=1
以前したところ RedHat 9が遅かったので、
Opteron Dual + SUSE Linux 9.3を導入試験中です。
Apache 2.1.4等でパフォーマンスを
調べているのですが、かなり遅いです。
ためしに、HDD(同じ型番)を交換してFreeBSD 5.4Rと比較してみたのですが
こちらは2倍ちかくの性能が出ましたのでハードウェアの問題では
ないと思います。
インターネット上では、2.6.11のカーネルはかなり速いように
報告されていますが、どのあたりを調整すればパフォーマンスが
向上するのでしょうか?
とりあえず、どれもインストールしたままの状態で使っています。
SMPカーネルじゃなかったってオチじゃないだろうな… i386のバイナリ使ってるとか?
2倍ちかくの性能差ならちょうど計算合う。
>>249
64bitと32bitカーネルで2倍も差が出ますか?
>>246
とりあえず、私のAthlonXP1700のマシンと交換してあげます。 filecacheを設定する方法を教えてくださぃ(下限・上限とか) 空いてるメモリは全てキャッシュとして利用している。
2.6.14.2
CONFIG_PREEMPT_NONE=y
CONFIG_HZ=100
CONFIG_IOSCHED_NOOP=y
でも案外音飛びしないな。普通のデスクトップ用途ならckじゃなくともこんな設定でも充分っつうことかな。 インテルのハイパースレッディング技術でサーバ性能の低下が発生か
ttp://japan.cnet.com/news/ent/story/0,2000047623,20091397,00.htm
P4へぼすぎてワロス 最悪が重なればどうなるかは分かってたはず。
つっこまれる前にカミングアウトできなかったインテル。
キャッシュの取り合いつぶし合いはデュアルコアのp4やathlonでも起こるはず。
athlonはサーバーであまり使われていないのが幸い。
インテルは根本的解決策として共有キャッシュ。 HTTの話なのになんでデュアルコアやathlonがでてくんの >>259
HTTってキャッシュじゃなくてレジスタだと思うが・・・ まぁ今更なんですが、一応。
ttp://debian.fam.cx/index.php?Tips#zfacfc27 gcc 3.4のAthlonXPでFirefoxを最適化してる
CFLAGS="-O2 -march=athlon-xp -mfpmath=sse -falign-functions=64 -falign-labels=6 -falign-jumps=6 -falign-loops=6 \
-DNDEBUG -DNO_DEBUG -DG_DISABLE_ASSERT -fomit-frame-pointer -ftracer -ffast-math -fno-unsafe-math-optimizations \
-fno-strict-aliasing -pipe -fpeel-loops -fbranch-target-load-optimize -fbranch-target-load-optimize2 \
-frename-registers -funroll-loops -freduce-all-givs -freorder-blocks -fno-reorder-functions"
CXXFLAGS="${CFLAGS} -fvisibility-inlines-hidden -fno-enforce-eh-specs"
-O -march=i586と大して体感速度変わらなくても気にしない kernelに
I-pipe・Adaptive readahead
ckからvm-mappedパッチ、hzの値を任意に変更できるパッチを当てる
hzの数値は1728
後はsysctl.confに
kernel.threads-max = 65535
fs.file-max = 65535
vm.readahead_ratio = 100
vm.readahead_hit_rate = 5
vm.hardmaplimit = 0
vm.mapped = 10
追記
後はswapをパーティションからファイルに変更
ごわごわした体感がきびきびになった感じ 暇なのでflag晒してみる
-O2 -pipe -s -march=athlon64 -m32 -mfpmath=sse -msse -msse2 \
-funit-at-a-time -fomit-frame-pointer -momit-leaf-frame-pointer -fno-var-tracking \
-ftree-vectorize -ftracer -floop-optimize2 -funswitch-loops -ftree-loop-im \
-fgcse-sm -fgcse-las -fgcse-after-reload -fweb -frename-registers \
-funsafe-loop-optimizations -ffast-math デバッグしないのならリンカーに-Wl,-s渡せば-Osにしなくとも充分サイズ縮まって速度は変わらないまま行けるな
姫野ベンチ
gcc -O2 -march=athlon-xp -pipe -Wl,-s size:8.3kb Grid-size=S 67MFLOPS
gcc -Os -march=athlon-xp -pipe -Wl,-s size:7.4kb Grid-size=S 57MFLOPS
-Wl,-s無しだと双方とも10kbオーバー。ベンチ結果は変わらず。
GCCは4.0.2 x86な人は-mno-align-stringopsも悪くない ttp://kernel.jakem.net/patches/genetic/2.6.12/2.6.12-gl2/genetic-zaphod-cpu-sched-2.6.12-gl2.patch
から遺伝的アルゴリズムの部分を削除してみた、これはこれで音飛びしないし悪くないかも。x86の2.6.15でしかテストしてない。自己責任。
Index: 2.6/include/linux/sched.h
===================================================================
--- 2.6.org/include/linux/sched.h2005-08-15 16:16:26.000000000 -0500
+++ 2.6/include/linux/sched.h2005-08-15 16:18:21.000000000 -0500
@@ -143,6 +143,20 @@
#include <linux/spinlock.h>
/*
+ * These are the 'tuning knobs' of the scheduler:
+ *
+ * Default configurable timeslice is 100 msecs, maximum configurable
+ * timeslice is 1000 msecs and minumum configurable timeslice is 1 jiffy.
+ * Timeslices get renewed on task creation, on wake up and after they expire.
+ */
+#define MIN_TIMESLICE1
+#define DEF_TIMESLICE(10 * HZ / 1000)
+#define MAX_TIMESLICE(1000 * HZ / 1000)
+#define DEF_DESKTOP_TIMESLICE ((DEF_TIMESLICE > 10) ? (DEF_TIMESLICE / 10) : 1)
+
+#define DEFAULT_UNPRIV_RT_THRESHOLD 10
+
+/*
* This serializes "schedule()" and also protects
* the run-queue from deletions/modifications (but
* _adding_ to the beginning of the run-queue has Index: 2.6/kernel/sched.c
===================================================================
--- 2.6.orig/kernel/sched.c2005-08-15 16:16:26.000000000 -0500
+++ 2.6/kernel/sched.c2005-08-15 16:18:21.000000000 -0500
@@ -85,3 +85,4 @@
-#define MIN_TIMESLICEmax(5 * HZ / 1000, 1)
-#define DEF_TIMESLICE(100 * HZ / 1000)
+#define MIN_TIMESLICE1
+#define DEF_TIMESLICE(10 * HZ / 1000)
+#define MAX_TIMESLICE(1000 * HZ / 1000)
#define ON_RUNQUEUE_WEIGHT 30 なんでHZは100、1000と来て半端な250なんだろう
500のほうがパフォーマンス・省電力的にもいいと思うんだが >>272
ベンチとパッチを添えてLKMLへgo! >>272
それLKMLで散々議論されたよ。
最終的には、リーナスの鶴の一声で終わった希ガス。
#ぶっちゃけ、正しい値なんて無いよ(環境違うと値も変わるし) gcc 4.1で姫野ベンチS
-O0 -pipe -DSMALL 83MFLOPS
-O1 -pipe -DSMALL 291MFLOPS
-O2 -pipe -DSMALL 258MFLOPS
-O3 -pipe -DSMALL 259MFLOPS
-O1が最速な件について CPUはAthlonXP、
-O1に -fstrength-reduce -fprefetch-loop-arrays付けたら1割程ベンチ結果が良くなった
-O2や-O3の立場ないな、gcc4.1