コンテンツ
あまり知られてない(ような気がする)sshの多重接続
OpenSSH 5.6/5.6p1リリースの記事をチェックしているとき、リリースノートの「多重(multiplex)接続」ってなんじゃこれ、と思い調べてみたんですが、なかなかに有用なのでちょいとまとめてみました。というか、元ネタはこちらのSSH: Tips And Tricks You Needという記事です。
多重接続というのは、1本のSSHコネクションで複数のセッションを同時に張るという感じのもの。たとえば、OS Xでターミナルを複数開き、それぞれのターミナルウィンドウで1つのサーバーに対しsshコマンドで接続を行った場合、通常はサーバー側では複数のsshdが起動し、それぞれのsshクライアントと通信を行います。いっぽう、多重接続を利用すると1つのsshdが複数のsshと通信する形となり、サーバー側のリソースをより効率的に利用できる、というわけ。
設定は簡単で、クライアント側の.sshディレクトリに設定ファイルと一時ディレクトリを用意するだけ。
$ cd ~/.ssh $ mkdir connections $ chmod 700 connections/ $ vim config
~/.ssh/configの内容は下記のとおり。
Host * ControlMaster auto ControlPath ~/.ssh/connections/%r_%h_%p
あとは、通常通りsshでサーバーに接続するだけ。これだけで、体感できるほど2つめ以降の接続が高速化されます。下記は5つのSSHセッションを張った状態で、6つめのセッションを張ろうとした際の実行速度ベンチマーク。
多重化なし: $ time ssh hylom.******.com uptime 08:13:53 up 22 days, 10:18, 6 users, load average: 0.00, 0.00, 0.00 real 0m2.123s user 0m0.015s sys 0m0.010s
多重化あり: Last login: Tue Aug 24 17:15:34 on ttys006 $ time ssh hylom.******.com uptime 08:18:53 up 22 days, 10:23, 6 users, load average: 0.00, 0.00, 0.00 real 0m0.278s user 0m0.006s sys 0m0.007s
多重化により、だいたい7.6倍くらい速くなっています。ちなみに、この状態で「ps ux」を実行してみるとこんな感じに。
$ ps ux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND hylom 17182 0.2 0.2 8292 1580 ? S 08:21 0:00 sshd: hylom@pts hylom 17183 0.0 0.2 2968 1584 pts/0 Ss+ 08:21 0:00 -sh hylom 17188 0.0 0.2 2968 1584 pts/1 Ss+ 08:21 0:00 -sh hylom 17193 0.0 0.2 2968 1584 pts/2 Ss+ 08:21 0:00 -sh hylom 17198 0.0 0.2 2968 1588 pts/3 Ss+ 08:21 0:00 -sh hylom 17203 0.0 0.2 2968 1580 pts/4 Ss+ 08:21 0:00 -sh hylom 17208 1.0 0.3 3484 1856 pts/5 Ss 08:21 0:00 -sh hylom 17213 0.0 0.1 2432 908 pts/5 R+ 08:21 0:00 ps ux
sshdは1つだけで、接続毎にシェルだけが起動されるようになっていることが確認できます。
gitメモ:ブランチを切ってないのにやばいコードを書いちゃった場
gitを使ってコードの管理をしている場合において、実験的なコードを書く場合はソースコードを編集する前にブランチを作成しておくのが基本だ。しかし、ついブランチを作成し忘れたままでコードを変更してしまった、というパターンがある。
この場合、下記のようにgit stashでいったん変更点を保存した上で直前のcommitに戻し、新たなブランチを作成してそこでgit stash applyを行えばよい。
$ git stash $ git checkout hogehoge -b $ git stash apply $ git add hogehoge foobar $ git commit
git stash、便利だ。
iPhone 4およびiPad向け動画をHandBrakeで作る
先日、私の手元にもiPhone 4が到着。ということで、一部から要望を受けていたHandBrakeのiPhone 4用プロファイルをちょっと調査・研究してみた。
iPhone 4の動画再生機能については、Webサイトにその仕様が掲載されている(日本語のiPhoneページ)。ただし、日本語ページには一部誤訳というか不明瞭な表記があるたので、英語版iPhoneページを確認するほうが確実。これによると、iPhone 4の動画再生仕様は下記の通り。
- H.264:最大720p、30fps。Main Profile(レベル3.1まで、音声はAAC-LCで最大160kbs、48kHz、ステレオ)対応。ファイルフォーマットは.m4v、.mp4、.mov
- MPEG-4:最大2.5Mbps、640×480ピクセル、30fps。Simple Profile(音声はAAC-LCでチャンネルあたり最大160kbps、48kHz、ステレオ)対応。ファイルフォーマットは.m4v、.mp4、.mov
- MotionJPEG(M-JPEG):最大35Mbps、1280×720ピクセル、30fps。音声はulawもしくはPCMステレオ。ファイルオーマットは.avi
iPhone 4の画面サイズは960×640。そのため、縦に持った際は幅640に、横に持った際は幅960に自動的に拡大/縮小されて表示される。また、iPhone 4のドックコネクタ経由での出力では1024×768サイズの出力に対応している模様。
ちなみに、iPhone 4の動画再生仕様はiPadとまったく同一のようだ。なお、iPadの画面サイズは1024×768である。
さて、iPhone 4で動画を見る場合、わざわざ容量がかさむMPEG-4を積極的に使う必要はない。そのため、下記ではH.264についてのみ考察を行っていく。
上記のとおり、iPhone 4はスペック上はHigh Profileには対応していない。しかし、試して見たところHandBrake 0.9.4のプリセットである「High Profile」でエンコードした動画も問題なく再生できてしまった。High ProfileとMain Profileの違いは8×8DCTブロックやカスタム量子化マトリックス(CQM)、Cb/Cr別のQP制御、モノクロ(4:0:0)対応だが、実際8×8DCT以外については、設定の難しさの割に効果は微妙なところではある(そのうえHandBrakeでは設定できない)。
High Profile非対応という機器でも8×8DCT対応のものはあるので、iPhone 4/iPadもそうなのだろう。HandBrakeでは「High Profile向け」と表示される「Pyramidal B-Frames」については、High ProfileでもOffになっているので気にしないことにする。
ということで、とりあえずHandBrakeでiPhone 4およびiPad向けのエンコードを行う場合、プリセットのHigh Profile設定を利用すれば問題ないようだ。
対応する縦横サイズやビットレートに関連する「レベル」については次の機会に。
LinuxとFreeBSDのベンチマーク比較
やや旧聞となるが、PhoronixがLinuxとFreeBSDのベンチマーク比較を行っている(Debian Linux Benchmarked Against Debian GNU/kFreeBSD & FreeBSD)。比較対象はDebian kFreeBSD 7.3、Debian kFreeBSD 8.0、Debian GNU/Linux(カーネル2.6.32)、FreeBSD 7.3、FreeBSD 8.0。
「Debian kFreeBSD」はカーネルとしてFreeBSD、ユーザーランドとしてDebianを採用したものだ。Debian GNU/LinuxとDebian kFreeBSDはカーネルだけが異なり、またDebian kFreeBSDとFreeBSDはユーザーランドだけが異なる。これらを比較することで、ユーザーランドもしくはカーネルだけの性能比較が行える(と期待できる)点で興味深いベンチマークである。
ベンチマーク結果であるが、gzipでの圧縮やGnuPGでの暗号化、MAFFT(分子生物学向けの核酸・アミノ酸アライメント作成ツール)、GraphicsMagickによる画像のリサイズ処理、Himeno BenchmarkについてはDebian kFreeBSDやDebian GNU/Linuxが高パフォーマンス、という結果だった。いっぽう、C-Rayでの3DグラフィックレンダリングについてはFreeBSD 7.3/8.0が高速な傾向が見られている。
また、Debian GNU/LinuxがFreeBSDやDebian kFreeBSDよりも高速だったのはdCrawによるRAW画像の現像処理、Sudokut(数独演算アプリ)、SQLiteのインサート処理。
このようにベンチマークごとに結果はばらばらであり、DebianのユーザーランドとFreeBSDのユーザーランドのどちらが高速か、またLinuxカーネルとFreeBSDのカーネルのどちらが高速かは単純には言えないという、なんともモヤモヤとした結論となっている。このベンチマークでは実行マシンとしてThinkPad R52とThinkPad T61を使用しているが、マシンによって結果が違うのも微妙なところだ。
ただし、マルチスレッドによるI/O処理ベンチマークについては、特にランダムWriteについてはLinuxカーネルのほうがパフォーマンスを発揮する傾向があるようだ。
激安・低サポートのVPS「prgmr.com」を借りる
最近、月額490円からの「ServersMan@VPS」が話題だ。ほかにも980円からの「FC2 VPS」など、低価格のVPSはいくつかあるが、それ以前から存在する低価格のVPSサービスとして一部の間で知られていたのが「prgmr.com」である。
prgmr.comはXenを使用したVPSで価格は$5/月からと低価格なのが魅力の1つだが、安さだけなら国内のVPSサービスと大きくは変わらない。ではなぜprgmr.comが注目されているのかというと、そのアレなたたずまいと、サポートの簡素さによるところが大きい。prgmr.comのトップページにはほかのVPSサービスのような画像による装飾は一切なく、アスキーアートで書かれた「prgmr.com」というバナーと「We don’t assume you are stupid.」という文言、そして料金やXenベースVPSの特徴が紹介されているのみ。一般人ならとりあえずこのサイトが何であるかも理解できないだろう、という作りである。
このようにアレゲ感たっぷりのprgmr.comであるが、その一方でかなり自由度は高く、OSはDebian GNU/Linux、Ubuntu 10.04、CentOS 5.5が選択できるほか、AMD64アーキテクチャのXen上で動作するOSなら(自力で)任意のOSがインストールできる(可能性がある)、追加料金なしでグローバルIP付与と、独自のサーバー管理&Xenが分かる人にとってはかなり魅力的であったりする。
ということで一部の人には魅力的なこのprgmr.com、ちょくちょく新規受付を開始しては定員に達して終了を繰り返しており、いつでも申し込みできるというわけではないのだが、ウォッチしていたらたまたま申し込み可能になっていたため、$12/月でメモリ512MiB、ディスク12GiB、月間ネットワーク転送量80GiBのプランを申しこんでみた。
Webでの申し込み後、メールでSSH公開鍵を送付。サーバー設定は必要十分
Webで利用したいプランを選択し、オンラインフォームに必要事項を記入して申し込むと、下記のように利用したいディストリビューションとOpenSSH公開鍵を送信しろ、という旨のメールが来る。
you ordered a xen vps, 512MiB ram, 12GiB Disk 80 GiB transfer Xen VPS, $12/month username hylom
Before I can set you up, I need to know what distro you would like and an OpenSSH format public key (on a *NIX, run ssh-keygen and send me either the id_dsa.pub or id_rsa.pub file in an attachment)
あとはこのメールの返信として公開鍵を添付し、Debian GNU/Linuxを使いたいという旨を伝えるだけだ。
Hi,
I want to use Debian GNU/Linux, and here’s my SSH public key.
Please check it.
設定が完了すると、その旨がメールで連絡される。また、しばらくすると金払ってねメールがやってくる模様。料金の支払いはPayPal。
続く。