2009年9月30日水曜日

subversion がおそいとかなんとか

いうのが慢性的に続いているらしい。社内の subversion 。
「らしい」というのは自分ではその「おそい」のに出くわしたことがないため。
なにやら何分も待つことがあるらしい。。

以前軽く調べてみたことはあって、リポジトリなサーバは

- FreeBSD 4.x
- subversion 1.3.x
-- リポジトリのタイプは fsfs, NFSマウントしてる

クライアントは ほとんど Linux(のはず)

サーバ側でいくつか問題ぽい点
- FreeBSD 4.x での NFS はあまりよくなかった気が
- subversion 1.3.x = sharding 導入前のバージョン
-- 1 ディレクトリ以下に 20万くらいファイルがたまってる状態・・・

というわけで subversion のバージョンアップするとマシになるかも?とは思っていたけど、近いうちに DVCS なもののなにかに置き換えられるらしいので、特に対応する理由は無し。

それでも置き換えるまでに多少はなにかできることないかなともう一度見直してみたところ、 /dev/random 周りをいじるとマシになりそうな気がしたので、こそっと設定しておいた。使い始めたときにこの辺は気づくのでは?と思ってるのできっと効果は薄いか、も全くない。それでも気休めに。
自分が困ってたら効果がみえやすいのだけど。

設定内容
- rndcontrol で 乱数のエントロピーの元を設定

とりあえず ATA の プライマリから頂こうとおもい、さて IRQ 番号は、、、と。
最初、割り当てられてる IRQ番号がわからなかったため カーネルのコンフィグファイル (/sys/[arch]/conf 以下のやつ) みて 14 だろうということで以下実行

# rndcontrol -s 14
rndcontrol: setting irq 14
rndcontrol: interrupts in use: 14


その後、/var/log/messages のローテートされたものに起動時のログが残ってたので IRQ 番号が判明。ログは以下の通り。時刻とホスト名は消した。

/kernel: pci0: at 3.0 irq 9
/kernel: ata0: at 0x1f0 irq 14 on atapci0
/kernel: ata1: at 0x170 irq 15 on atapci0
/kernel: ohci0: mem 0xeddff000-0xeddfffff irq 10 a
t device 15.2 on pci0
/kernel: bge0: mem 0xed6f000
0-0xed6fffff irq 7 at device 4.0 on pci2
/kernel: bge1: mem 0xed4f000
0-0xed4fffff irq 5 at device 5.0 on pci2
/kernel: fdc0: at port 0x3f0-0x3f5,0x3f7 irq 6 drq 2 on isa0
/kernel: atkbd0: flags 0x1 irq 1 on atkbdc0
/kernel: sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
/kernel: sio1: configured irq 3 not in bitmap of probed irqs 0
/kernel: pci0: at 3.0 irq 9
/kernel: ata0: at 0x1f0 irq 14 on atapci0
/kernel: ata1: at 0x170 irq 15 on atapci0
/kernel: pci0: at 15.2 irq 10
/kernel: bge0: mem 0xed6f000
0-0xed6fffff irq 7 at device 4.0 on pci2
/kernel: bge1: mem 0xed4f000
0-0xed4fffff irq 5 at device 5.0 on pci2
/kernel: fdc0: at port 0x3f0-0x3f5,0x3f7 irq 6 drq 2 on isa0
/kernel: atkbd0: irq 1 on atkbdc0
/kernel: sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
/kernel: sio1: configured irq 3 not in bitmap of probed irqs 0


14 で合っていた。ついでに 5 と 7 も追加しておいた。

# rndcontrol -s 5 -s 7
rndcontrol: setting irq 5
rndcontrol: setting irq 7
rndcontrol: interrupts in use: 5 7 14


サーバ起動時に設定されるよう /etc/rc.conf に記述。ちなみに該当のサーバは 1000日以上起動している。次再起動したらそのままお亡くなりになる気がしてならない。

rand_irqs="5 7 14"

FreeBSD 5.0 以降なら yarrow が導入されたから、このあたりを意識することは無いだろう。
FreeBSD 4.x で BIND9 や gnupg 使ってみたことがある人ならわかるんだろう。

検索してみたかんじ、colinux での subversion だと結構知られてることのよう。
coLinux はかるーくしか使ったことがない。

coLinux subversion問題

subversion book の古いのには FreeBSD での問題が明記されている。cvsweb で ports をみてみたものの、それらしい記述はみつけられなかった。

On FreeBSD, certain operations (especially svnadmin create) sometimes hang.
This is usually due to a lack of available entropy on the system. Subversion asks APR to generate random numbers to create UUIDs from time to time, and certain operating systems will block for high-quality randomness. You probably need to configure the system to gather entropy from sources such as hard-disk and network interrupts. Consult your system manpages, specifically random(4) and rndcontrol(8) on how to effect this change. Another workaround is to compile APR against /dev/urandom instead of /dev/random.

0 件のコメント:

コメントを投稿