kなんとかの日記 このページをアンテナに追加

2010-04-19

Mac OS X でUSBメモリのアンマウントをコマンドラインから行う

| 08:58 |  Mac OS X でUSBメモリのアンマウントをコマンドラインから行う - kなんとかの日記 を含むブックマーク

$ sudo diskutil umount /Volumes/NO\ NAME 
Password:
Volume NO NAME on disk1s1 unmounted

2009-02-24

Mac では top コマンドが役立たず

| 23:43 |  Mac では top コマンドが役立たず - kなんとかの日記 を含むブックマーク

Mac の top コマンドは役立たず。

  • top コマンド自体が CPU を 20 % も消費する。
  • CPU コアごとの負荷が見えない
  • 負荷がかかっているはずのプロセスが表示されない (例: ActivityMonitor では CPU を数 % 消費しているはずの Safari が top では表示されない)

これが表示例。top コマンドが 19.3 % 消費している。Linux だとこんなことはないのに。Micro kernel architecture の弊害なのかしら。

Processes:  79 total, 3 running, 76 sleeping... 270 threads  threads    19:02:28
Load Avg:  0.20,  0.34,  0.28    CPU usage:  5.26% user,  8.91% sys, 85.83% idle
SharedLibs: num =    7, resident =   35M code, 1560K data, 2296K linkedit.
MemRegions: num = 43520, resident =  938M + 6676K private,  252M shared.
PhysMem:  237M wired, 1025M active,  513M inactive, 2035M used,   13M free.
VM: 10G + 374M   249111(0) pageins, 494963(0) pageouts

  PID COMMAND      %CPU   TIME   #TH #PRTS #MREGS RPRVT  RSHRD  RSIZE  VSIZE
 6022 top         19.3%  0:01.74   1    18     35  860K   292K  1464K    18M 
 5942 mdworker     0.0%  0:00.52   3    51     48  816K  1680K  3176K    31M 
 3155 Emacs        0.1%  2:49.68   2    78    221   15M  8400K    24M   380M 
 2805 ssh-agent    0.0%  0:00.03   1    23     38     0   284K   468K    19M 
 2542 pmTool       0.0% 22:12.11   1    25     35  512K   800K  1408K    27M 
 2541 Activity M   0.3% 27:59.55   5   114    307 9628K    12M    17M   416M 
 2027 BathyScaph   0.0%  1:26.63   7   134    327 2368K  6532K    13M   383M 
 1181 bash         0.0%  0:00.20   1    14     19  8192   560K   164K    18M 
 1008 bash         0.0%  0:00.04   1    14     20  8192   560K   164K    18M 
 1007 login        0.0%  0:00.01   1    17     61   24K   280K   436K    19M 
  919 mysqld       0.0%  0:28.89   9    40     57  812K   188K  1040K    45M 
  900 sh           0.0%  0:00.01   1    13     19  8192   184K   164K    18M 
  863 bash         0.0%  0:00.07   1    14     20  192K   560K   640K    18M 
  862 login        0.0%  0:00.01   1    17     61   24K   280K   436K    19M 
  745 bash         0.0%  0:00.14   1    14     20   12K   560K   164K    18M 

NeoCatNeoCat 2009/02/25 10:31 Mac OSではメモリ使用情報を収集するのに時間がかかるらしく、これを top -RFX とオプション指定で抑制あげると負荷が下がります。あと、ソート順がCPU順でないので -u オプションもつけると良いと思います。

サスケットサスケット 2009/02/26 12:36 >つーか、『設計書作成やテストにおいて、その差の出なさ加減は顕著だ』なんて言ってる人間が存在すること自体が意味分からん。あまりにも斬新すぎる考え方なので、その根拠をほんと教えてほしい。

斬新どころか、属人性を排除しているんだから普通に差は付かないでしょ。

テスト項目なんて、属人性排除を排除して、「こうしてこうなったらOK」ってテスト計画書に書いてあるんだから、延々こなすだけ。
スーパープログラマー様はエンターキーを押す速度がそんなに速いのかと。

設計書(特に詳細な部分)も属人性排除してルールができている局面では差が付かない。
画面設計書で、画面に項目並べるのにそんなに差が出るのかと。


要するに、「属人性を排除する意味が無い」という前提で考えるからそうなる。
エントリのような思考で入るっているあなたは、意味が無いと思っているからきちんと人に依存する部分を普段から排除しようとしていないんだよ。前提が違うわけ。
で、あなたは排除できてないから「差が付く」と思ってしまう。


『設計書作成やテストにおいて、その差の出なさ加減は顕著だ』というよりは、『設計書作成やテストにおいて、属人性を排除しやすい(ので差の出なくなり加減が顕著だ)』
と読めばいいんじゃないか。

前提を誤ってはいけない。あなたが反論を述べている相手は属人性を排除することをメリットと取って実践しているんだ。
差をなくしている人、無くそうとしている人に何言ってんの。

「そのプロセスで属人性の排除はできない」という反論ならともかく、「差がでない(属人性の排除ができる)なんてありえない」なんて反論意味不明に過ぎる。




そもそもさ。
あなた自身「差がつかないようなところはたいがい自動化できてしまうから (最初から書いているけどね)。」と書いている以上、属人性を排除して機械的に誰がやっても同じ処理をこなすことにメリットを得ているんじゃないか。

あなたの論理なら自動化なんて定型処理しかできないバカ機械に任せないで、スーパープログラマー様が有り余る能力で5倍30倍で処理してくれるほうがいいんじゃないの?何であなたの論理下で自動化させているの?矛盾してるじゃん。

みーみー 2009/02/27 02:12 >>サスケット

>テスト項目なんて、属人性排除を排除して、「こうしてこうなったらOK」ってテスト計画書に書いてあるんだから、延々こなすだけ。
>スーパープログラマー様はエンターキーを押す速度がそんなに速いのかと。
テストってのはテスト仕様を作る(and 記述する)作業の事だ。テストの実行は自動テストしろよ。

>『設計書作成やテストにおいて、属人性を排除しやすい(ので差の出なくなり加減が顕著だ)』
と読めばいいんじゃないか。
設計とかどう考えても一番属人牲が残る所だろ。違うというなら、要求定義から設計を機械的にせいせいしてみろよ! というか、その方法を教えてくれマジで。

>そもそもさ。
>あなた自身「差がつかないようなところはたいがい自動化できてしまうから (最初から書いているけどね)。」と書いている以上、属人性を排除して機械的に誰がやっても同じ処理をこなすことにメリットを得ているんじゃないか
お前の国語力は0か? 主張してることは「属人せいが排除できるようなことは自動化できるのだから、残った人手でやる部分は属人性が強く出る所だから、人によって生産性の開きがでかい」という意味だろ?

批判するにしても、もうちょっとまともな論理で批判してやれよ。

サスケットサスケット 2009/02/27 08:54 はい、アウト。


>テストってのはテスト仕様を作る(and 記述する)作業の事だ。テストの実行は自動テストしろよ。

テスト計画は人に依存する。それはOK。
テストの実行は自動化可能=属人性を排除している

属人性を排除している

もう一度いいます。

自動化=属人性を排除している。


>設計とかどう考えても一番属人牲が残る所だろ。違うというなら、要求定義から設計を機械的にせいせいしてみろよ! というか、その方法を教えてくれマジで。

レベルの問題をわかってない。
属人性を排除=全部機械化、全部何も考えなくていいというわけじゃない。

△人に依存する場所をゼロ
△人に依存する場所を減少

でも属人性を排除している。
具体的にいえば、ルール化できることはするわけだ。設計書作成の規約を作ることで規約にのっとる部分が『属人性の排除』となる。ということは書いたてるだろちゃんと。→ルールができている局面では
国語能力の前に注意力を鍛えなさい。あるいは、あなたが単に『属人性の排除』をするためにどうするかという経験が無いだけ。『属人性の排除』=機械的とか短絡的杉。




>お前の国語力は0か? 主張してることは「属人せいが排除できるようなことは自動化できるのだから、残った人手でやる部分は属人性が強く出る所だから、人によって生産性の開きがでかい」という意味だろ?


ワーイ、自動化するんだ?自動化するんだ?自動化するんだ?
なんだやっぱり「属人性を排除している」んじゃないか。
私は(残ったところを人がやるのは当然だけど)『属人性の排除が必要』と言ってるんだから、それでいいんだよ。

きみ、これ読んでないんじゃないの?

>『優秀な人の能力を引き出す』『属人性の排除は間違い』というだけのことが

>じゃあこれでどう?
>従来のソフトウェア工学は、属人性を排除しようとしている点において、決定的に間違っている
>これならキミでも同意できるんじゃない? 先の文章に同意しているのであれば。

この人は『属人性の排除は間違い』と言ってるんだよ。
私はそれを否定してるんだよ。

「属人せいが排除できるようなことは自動化できる」とか・・・排除できたら駄目だろこの人的に。
この人は『属人性の排除は間違い』と『明記』しているんだから。明記している。もう一度言うけど、『属人性の排除は間違い』と書いてある。国語能力の前に注意力を鍛えなさい。擁護とみせかけて首絞めてやるなよ。やっぱり『属人性の排除は必要』なんだよねー。


もう一度言うけど『属人性の排除は必要』

故にアウト。

サスケットサスケット 2009/02/27 08:56 ごめんなさい、こうだね。

△人に依存する場所をゼロ
○人に依存する場所を減少

鴨澤眞夫鴨澤眞夫 2009/02/27 13:18 topはそもそも「負荷が高くて自分が一番上に来ちゃうからtopと名付けた」と聞いたことがありますが…それはさておき。
ウチでは
top -ocpu -s5
をtopのaliasにしています。-ocpuでCPU時間によるソート、-s5で5秒後とのサンプリングです。

これでもやはりCPUコアごとの負荷は出ませんが、1個のCPUに対する負荷として出てくるので、たいがいは間に合っています。

2008-11-22

Mac Ports の Ruby が遅かったのは修正されたみたい

| 10:20 |  Mac Ports の Ruby が遅かったのは修正されたみたい - kなんとかの日記 を含むブックマーク

MacPorts でインストールした Ruby は遅いらしいの続報。

Ruby port のバージョンがあがって、修正された模様。

手元の環境では、ruby@1.8.7-p72_1 だと問題があり、ruby@1.8.7-p72_2 だと修正されていた。


### ruby port のバージョンを確認
$ port installed | grep ruby
  ruby @1.8.7-p22_3+thread_hooks
  ruby @1.8.7-p72_0+thread_hooks
  ruby @1.8.7-p72_1+thread_hooks (active)
  ruby @1.8.7-p72_2+thread_hooks
### ruby@1.8.7-p72_1 は遅い
$ /opt/local/bin/ruby -s fib.rb -N=33
fib(33) 22.030000   8.170000  30.200000 ( 30.411051)
### バージョンをあげてみる
$ sudo port deactivate ruby@1.8.7-p72_1+thread_hooks
--->  Deactivating ruby 1.8.7-p72_1+thread_hooks
$ sudo port activate ruby@1.8.7-p72_2+thread_hooks
--->  Activating ruby 1.8.7-p72_2+thread_hooks
### ruby@1.8.7-p72_2 は速くなった
$ /opt/local/bin/ruby -s fib.rb -N=33
fib(33)  4.450000   0.010000   4.460000 (  4.491818)
### しかも自前コンパイルより若干速い
$ /usr/local/bin/ruby -s fib.rb -N=33
fib(33)  4.490000   0.010000   4.500000 (  4.517858)

MacPorts でインストールした Ruby は遅いらしい経由で、自分も試してみました。ベンチマーク計測にはkwatchさんのところで掲載されていたものを使用しました。

...(snip)...

どちらの環境でもMacPortsをクリーンインストールするところから試したのですが、Intel iMac では差がなく PowerBook G4だけ3倍くらい遅いのが気になります。kwatchさんの結果とずいぶん違っていて、正直よくわからないorz

MacPorts でインストールした Ruby は遅い? - Watsonのメモ

というわけなので、Intel iMac では ruby@1.8.7-p72_2 が、PowerBook には ruby@1.8.7-p72_1 が使われているんじゃないでしょうか。

WatsonWatson 2008/11/24 12:59 続報ありがとうございます。PowerBook G4環境でも ruby @1.8.7-p72_2 を使用して試しております。

2008-11-17

MacPorts でインストールした Ruby は遅いらしい

| 00:35 |  MacPorts でインストールした Ruby は遅いらしい - kなんとかの日記 を含むブックマーク

Ruby のメーリングリストで出た話題。

MacPorts でインストールした Ruby は遅いらしい。

というわけで、MacOS X 10.5 Leopard で確かめてみた。

$ /usr/bin/ruby -v           # MacOS X 付属
ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0]
$ /usr/local/bin/ruby -v     # 自前でコンパイル&インストール
ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9.4.0]
$ /opt/local/bin/ruby -v     # MacPorts でインストール
ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9]

まずは fibonacci で確かめてみる。

def fib(n)
  n <= 1 ? 1 : fib(n-1) + fib(n-2)
end

if __FILE__ == $0
  require 'benchmark'
  n = $N ? $N.to_i : 30
  Benchmark.benchmark do |x|
    x.report("fib(#{n})") do
      fib(n)
    end
  end
end

実行結果。

$ /usr/bin/ruby -s fib.rb -N=33
fib(33)  4.560000   0.010000   4.570000 (  4.611006)
$ /usr/local/bin/ruby -s fib.rb -N=33
fib(33)  4.490000   0.010000   4.500000 (  4.557644)
$ /opt/local/bin/ruby -s fib.rb -N=33
fib(33) 22.220000   8.220000  30.440000 ( 30.747271)

結果は、自前コンパイル >= Mac付属 >> MacPorts という結果に。むう、MacPorts Ruby は確かに 5 倍近く遅い。


次に、もっと現実寄りのテストを求めて、Erubis 付属のベンチマークを試してみる。

erubis$ /usr/bin/ruby -rubygems bench.rb -n 10000  Erubis::Eruby
*** ntimes=10000, testmode=execute
                                    user     system      total        real
Erubis::Eruby                   7.490000   0.210000   7.700000 (  7.805032)
erubis$ /usr/local/bin/ruby -rubygems bench.rb -n 10000  Erubis::Eruby
*** ntimes=10000, testmode=execute
                                    user     system      total        real
Erubis::Eruby                   7.330000   0.230000   7.560000 (  7.709817)
erubis$ /opt/local/bin/ruby -rubygems bench.rb -n 10000  Erubis::Eruby
*** ntimes=10000, testmode=execute
                                    user     system      total        real
Erubis::Eruby                  10.220000   1.450000  11.670000 ( 11.880084)

ベンチマーク結果は、自前コンパイル >= Mac付属 >> MacPorts という結果に。

MacPorts Ruby は確かに遅い。ただ、fibonacci ほどの差はついてないから、あんまり問題にならなかったんだろう。


次に Erubis の、eRuby ファイルの parse 部分だけをテストしてみる。これは主に正規表現のマッチング速度が重要になるはず。

erubis$ /usr/bin/ruby -rubygems bench.rb -n 10000 -m convert Erubis::Eruby
*** ntimes=10000, testmode=convert
                                    user     system      total        real
Erubis::Eruby                   2.700000   0.200000   2.900000 (  2.939682)

erubis$ /usr/local/bin/ruby -rubygems bench.rb -n 10000 -m convert Erubis::Eruby
*** ntimes=10000, testmode=convert
                                    user     system      total        real
Erubis::Eruby                   2.810000   0.200000   3.010000 (  3.056374)

erubis$ /opt/local/bin/ruby -rubygems bench.rb -n 10000 -m convert Erubis::Eruby
*** ntimes=10000, testmode=convert
                                    user     system      total        real
Erubis::Eruby                   5.020000   1.130000   6.150000 (  6.827484)

こんどは Mac付属 >= 自前コンパイル >> MacPorts という結果に。むう、MacPorts が遅いのはかわらないが、自前コンパイルが Mac 付属に負けてしまった。何度かやってみたけど、誤差の範囲ではなかった。


というわけで、結論:

  • MacPorts でインストールした Ruby は、確かに遅い。
  • ただし、現実的なアプリケーション*1では体感できるほどの差はないかもしれない。

*1:Erubis のベンチマーク程度で「現実的なアプリケーション」というのもおかしいけど。

2008-10-25

MacPorts で active でないバージョンの port をアンインストールする

| 09:17 |  MacPorts で active でないバージョンの port をアンインストールする - kなんとかの日記 を含むブックマーク

MacPorts では、port install や port upgrade で新しいバージョンの port がインストールされるときに、古いバージョンも残ったままになるようだ。

### 複数のsubversionがインストールされているが、
### 使われているのは 1.5.3_0+mod_dav_svn だけ
$ port installed subversion
The following ports are currently installed:
  subversion @1.4.6_1+mod_dav_svn
  subversion @1.5.0_1+mod_dav_svn
  subversion @1.5.1_0+mod_dav_svn
  subversion @1.5.2_0+mod_dav_svn
  subversion @1.5.2_1+mod_dav_svn
  subversion @1.5.3_0+mod_dav_svn (active)

export MAPATH=$MANPATH:/opt/local/share/man man 1 port としてマニュアルを見ると、port uninstall -u を使えば、使われていない (= active でない) バージョンの port をアンインストールできるとある。

しかし実際に試してみると、エラーになってうまくいかない。

### 使われているもの以外をアンインストールしたいけどエラー
$ sudo port uninstall -u subversion
--->  The following versions of subversion are currently installed:
--->    subversion @1.4.6_1+mod_dav_svn
--->    subversion @1.5.0_1+mod_dav_svn
--->    subversion @1.5.1_0+mod_dav_svn
--->    subversion @1.5.2_0+mod_dav_svn
--->    subversion @1.5.2_1+mod_dav_svn
--->    subversion @1.5.3_0+mod_dav_svn (active)
Error: port uninstall failed: Registry error: Please specify the full version as recorded in the port registry.

しょうがないので、shell で削除。

$ port installed subversion | grep '@' | grep -v '(active)' | xargs -L 1 sudo port uninstall

今後のためにshell script化。

#/bin/sh

###
### port-uninstall-u : uninstall non-active ports
###
### usage: sudo port-uninstall-u name1 name2 ...
###

for i in $*; do
  port installed $i | grep '@' | grep -v '(active)' | xargs -L 1 port uninstall
done

elimelim 2008/10/25 10:11 自分は port -f uninstall inactive しています。
依存の解決が辞書順らしく、-f 付けないと、b.+ 的な名前のパッケージがが a.+ 的な名前のパッケージに依存している時に警告出して止まっちゃいます…… :(

naoki-knaoki-k 2009/09/16 18:27 sudo port uninstall -u subversion
ではなく
sudo port -u uninstall subversion
でどうでしょ?