Kenichi Maehashi's Blog

脳内コアダンプ

RSS
Category: Computer
日本の多くのエンジニアと同様に、仕事では仕方なく Windows を使っています。

シェル環境がないと不安になってしまうので Cygwin をインストールするわけですが、いかんせん動作が遅い。
zsh の初回起動に数秒、vim と打ち込んでからさらに待たされること数秒… といった具合では、生産性にもモチベーションにも影響が出てきます。

そこで、ちょっと原因を追究してみよう! というのが、この企画です。
# (その 1) と書いてはみましたが、次回以降の予定が特に立っているわけではないです。
# 判ったことを気が向くままに書いていく感じです。

一般に(ユーザランドの)プログラムの動作が遅いという場合、疑うべきポイントは大別して 2 つです。

1. プログラム処理の動作自体に、時間が掛かっている (CPU 時間を消費しているケース)。
2. システムコールが戻らない (ブロックされている)。

2 のケースは多岐に渡りますが、例えば
- ディスクの読み書き待ち
- TCP SYN 再送タイムアウト待ち
- ロック取得待ち / デッドロック
- スレッド wait
- sleep
などが挙げられるでしょう。

これらの観点を zsh に当てはめてみると、以下のような原因を想像しました。

1-1. zsh 自体が、そもそも重い
1-2. zsh の読み込んでいるスクリプトが重い
1-3. zsh の読み込んでいるスクリプトで起動しているプログラムが重い
2-1. I/O がボトルネックになっている
2-2. その他のシステムコールが、何らかの原因で遅い

1-1 については、ほかの Cygwin で動くプログラムも重いので、これは原因ではなさそうです。
1-2 や 1-3 は、十分あり得そうです。独自の .zshrc や補完用スクリプトなどがかなり入っているためです。
2-1 ですが、現在使っているマシンのリソースはかなり潤沢なので、関係なさそうな気がします。
2-2 については、strace で追跡すれば分析できそうです。

ということで、1-2, 1-3, 2-2 について、調査してみたいと思います。

(たぶん続く...)
Category: Linux
いちいち数えるの面倒だよ! ということで、よく使いそうなのでメモ。
perl -nle 'm/^(\s+)?(.+?)-(.+?)\s(.+)$/; print $1,$2,"-",$3," (",hex($3)-hex($2)+1," bytes) ",$4' < /proc/iomem
結果:
00000000-00000fff (4096 bytes) : reserved
00001000-0009d3ff (640000 bytes) : System RAM
0009d400-0009ffff (11264 bytes) : reserved
000c0000-000c7fff (32768 bytes) : Video ROM
000c8000-000c9dff (7680 bytes) : Adapter ROM
000ca000-000cafff (4096 bytes) : Adapter ROM
000dc000-000fffff (147456 bytes) : reserved
000f0000-000fffff (65536 bytes) : System ROM
00100000-bf79ffff (3211395072 bytes) : System RAM
01000000-014f72d4 (5206741 bytes) : Kernel code
014f72d5-01c066cf (7402491 bytes) : Kernel data
01d49000-0200c7e3 (2897892 bytes) : Kernel bss
bf7a0000-bf7acfff (53248 bytes) : ACPI Tables
bf7ad000-bf7adfff (4096 bytes) : ACPI Non-volatile Storage
bf7ae000-bf7fefff (331776 bytes) : reserved
bf7ff000-bf7fffff (4096 bytes) : RAM buffer
bf800000-bfffffff (8388608 bytes) : reserved
c0000000-c01fffff (2097152 bytes) : PCI Bus 0000:10
c0200000-c03fffff (2097152 bytes) : PCI Bus 0000:10
c0400000-c05fffff (2097152 bytes) : PCI Bus 0000:1a
c0600000-c07fffff (2097152 bytes) : PCI Bus 0000:1a
c0800000-c09fffff (2097152 bytes) : PCI Bus 0000:1e
c0a00000-c0bfffff (2097152 bytes) : PCI Bus 0000:20
c0c00000-c0dfffff (2097152 bytes) : PCI Bus 0000:20
dd000000-ddffffff (16777216 bytes) : PCI Bus 0000:1c
dd000000-ddffffff (16777216 bytes) : 0000:1c:00.0
de000000-de7fffff (8388608 bytes) : PCI Bus 0000:01
de000000-de7fffff (8388608 bytes) : 0000:01:00.0
de000000-de7fffff (8388608 bytes) : ib_mthca
de800000-df0fffff (9437184 bytes) : PCI Bus 0000:1c
de800000-deffffff (8388608 bytes) : 0000:1c:00.0
df000000-df003fff (16384 bytes) : 0000:1c:00.0
df010000-df01ffff (65536 bytes) : 0000:1c:00.0
df100000-df1fffff (1048576 bytes) : PCI Bus 0000:01
df100000-df1fffff (1048576 bytes) : 0000:01:00.0
df100000-df1fffff (1048576 bytes) : ib_mthca
df200000-df2fffff (1048576 bytes) : PCI Bus 0000:1e
df200000-df20ffff (65536 bytes) : 0000:1e:00.0
df200000-df20ffff (65536 bytes) : tg3
df502000-df5023ff (1024 bytes) : 0000:00:1a.0
df502000-df5023ff (1024 bytes) : ehci_hcd
df503000-df5033ff (1024 bytes) : 0000:00:1d.0
df503000-df5033ff (1024 bytes) : ehci_hcd
df504000-df5047ff (2048 bytes) : 0000:00:1f.2
df504000-df5047ff (2048 bytes) : ahci
df505000-df5050ff (256 bytes) : 0000:00:1f.3
e0000000-efffffff (268435456 bytes) : reserved
e0000000-efffffff (268435456 bytes) : pnp 00:01
e0000000-e2ffffff (50331648 bytes) : PCI MMCONFIG 0 [00-2f]
fc000000-fcffffff (16777216 bytes) : pnp 00:01
fe710000-fe710fff (4096 bytes) : pnp 00:01
fe711000-fe711fff (4096 bytes) : pnp 00:01
fe713000-fe713fff (4096 bytes) : pnp 00:01
fe800000-fe9fffff (2097152 bytes) : pnp 00:01
feb00000-febfffff (1048576 bytes) : pnp 00:01
fec00000-fec0ffff (65536 bytes) : reserved
fec00000-fec00fff (4096 bytes) : IOAPIC 0
fed00000-fed003ff (1024 bytes) : HPET 0
fed20000-fed44fff (151552 bytes) : pnp 00:01
fed45000-fed8ffff (307200 bytes) : pnp 00:01
fee00000-fee00fff (4096 bytes) : Local APIC
fee00000-fee00fff (4096 bytes) : reserved
ff000000-ffffffff (16777216 bytes) : reserved
100000000-83fffffff (31138512896 bytes) : System RAM
追記: +1 してなかったので、修正。
Category:
yum update したら怒られました。環境はタイトルの通り。
# yum update
Loaded plugins: fastestmirror, priorities, rhnplugin
Traceback (most recent call last):
File "/usr/bin/yum", line 29, in
yummain.user_main(sys.argv[1:], exit_code=True)
File "/usr/share/yum-cli/yummain.py", line 274, in user_main
errcode = main(args)
File "/usr/share/yum-cli/yummain.py", line 129, in main
result, resultmsgs = base.doCommands()
File "/usr/share/yum-cli/cli.py", line 432, in doCommands
self._getTs(needTsRemove)
File "/usr/lib/python2.6/site-packages/yum/depsolve.py", line 99, in _getTs
self._getTsInfo(remove_only)
File "/usr/lib/python2.6/site-packages/yum/depsolve.py", line 110, in _getTsInfo
pkgSack = self.pkgSack
File "/usr/lib/python2.6/site-packages/yum/__init__.py", line 882, in
pkgSack = property(fget=lambda self: self._getSacks(),
File "/usr/lib/python2.6/site-packages/yum/__init__.py", line 668, in _getSacks
self.repos.populateSack(whicepos)
File "/usr/lib/python2.6/site-packages/yum/repos.py", line 265, in populateSack
self.doSetup()
File "/usr/lib/python2.6/site-packages/yum/repos.py", line 72, in doSetup
self.ayum.plugins.run('prereposetup')
File "/usr/lib/python2.6/site-packages/yum/plugins.py", line 184, in run
func(conduitcls(self, self.base, conf, **kwargs))
File "/usr/share/yum-plugins/rhnplugin.py", line 121, in prereposetup_hook
str(e))
File "/usr/share/rhn/up2date_client/up2dateErrors.py", line 177, in __repr__
"The message was:\n") + self.errmsg
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)
rhnplugin が日本語のエラーメッセージ (UTF-8) を出そうとして、Python に怒られている模様。回避するには、英語ロカールにすればよろしい。
# LANG=en_US.UTF-8 yum update
Loaded plugins: fastestmirror, priorities, rhnplugin
There was an error communicating with RHN.
RHN Satellite or RHN Classic support will be disabled.
Error communicating with server. The message was:
No route to host
Loading mirror speeds from cached hostfile
* sl: ftp.ne.jp
* sl-fastbugs: ftp.ne.jp
* sl-security: ftp.ne.jp
file://var/cache/yum/x86_64/6.1/my-soft-channel/repodata/repomd.xml: [Errno 14] Could not open/read file://var/cache/yum/x86_64/6.1/my-soft-channel/repodata/repomd.xml
Trying other mirror.
Error: Cannot retrieve repository metadata (repomd.xml) for repository: my-soft-channel. Please verify its path and try again
って、何だか deja-vu ...

Pythonista でないのでよく判らないのですが、Python デフォルトのエンコードは ascii なのかな? こんなことをすると UTF-8 になるみたいだけれど、本質的に間違っている気がする。
cat << '_EOF_' > /usr/lib/python2.6/site-packages/utf8.py
import sys
sys.setdefaultencoding("UTF-8")
_EOF_
追記: ネット上を探した感じだと、sitecustomize.py という名前で上記対応をしている人が多いみたい。
Category: Computer
あけましておめでとうございます。今年もよろしくお願いいたします。

実は、年末に HDD 関連のトラブルに立て続けに巻き込まれまして...

- サーバの RAID-1 構成のドライブが 1 つ変な壊れ方をして、ファイルシステム損傷 (fsck で復旧)
- iMac (Mid 2007) の HDD で異音 & バッドセクタ大量発生、ブート後の動作が不安定に
- Time Machine 用に買った 1 TB の外付け HDD が初期不良で認識しない (交換してもらった)

という惨状で、新年早々、交換品を手配したり (この高い時期に...)、iMac の HDD を換装したりしてました。

iMac の分解については Wingspan さんなどのサイトを参考にさせていただきました。
このモデル、吸盤を使って液晶を覆うガラスを外すのが非常に面白いですね。

また、Mac の分解と言えばトルクスドライバですが、持ち合わせがなかったので下記商品を購入。値段が非常に手頃 (\345) ですが、ちゃんと働いてくれました。ただし、使うのは、T6, T8 の 2 種類のみ。
ルートアール 精密ドライバーセット(15種) PCDS-15
Category: Web
いくつか、類似ドメインが取得されてしまっているみたい。
うーん、お金の無駄だと思うけれど :-P

- kenichimaehashi.com.ph
- kenichimaehashi.tw
- kenichimaehashi.kr

あと、どこぞの論文で Lyrics Master が引用されていた (!)。今まで気づかなかったけど、面白そうな内容ですね。