2011-09-26

Dell XPS 15z をトリプルブートにする

Dell XPS 15z をアメリカから個人輸入した。ASCII 配列のキーボードが欲しかったから。このマシンに Windows 7 と Ubuntu を入れようかなと思っているところに Windows 8 の Developer Preview 版が公開されたのでトリプルブート設定に挑戦した。

まず Ubuntu Server 11.04 のインストールディスクで起動し、パーティションを設定する。最近の Windows は先頭に謎のパーティションを必要とするらしいので、あらかじめ Windows 用のパーティションを用意しておくのではなく、フリー領域にしておいて Windows インストーラに勝手にやらせるのがいいと思いそうした。

# dd if=/dev/zero of=/dev/sda bs=512 count=512
# parted
(parted) mktable msdos
(parted) mkpart primary 473gib 600gib
(parted) mkpart extended 600gib -0gib
(parted) mkpart logical 683gib 685gib
(parted) mkpart logical 600gib 683gib

ところで、この 600gib 〜 683 gib のパーティションが謎で、こちらを 683gib 〜 685gib より先に作ると、なぜかギャップができてしまう。また、Windows をインストールするとフリー領域に化けてしまう。原因は全くわからず。

最初に Windows 7 のインストールを行う。パーティションを指定してインストールする画面に行って、先ほど用意したフリー領域を指定する。あとは放っておくだけ。

再び Ubuntu Server 11.04 のインストールディスクで起動し、473gib 〜 600gib のパーティションを削除する。

Windows Develooper Preview のインストールディスクはあらかじめ作成しておく。Mac で作成したのだが、Win-Mac 両用の DVD を焼くのはいくつか設定が必要。また、この DVD にはいくつかバージョンがあって、開発環境込みの場合は片面2層の DVD-R が必要なので注意。

Windows Develooper Preview のインストールディスクで起動し、パーティションを指定してインストールする画面に行って、先ほど用意したフリー領域を指定する。あとは放っておくだけ。これで Windows 7 - Windows 8 のデュアルブート体制が完成。なかなかおしゃれなOS選択画面が出てくる。マウスで選択までできてしまう。ただしこの選択画面までかなり時間がかかるのが謎。

次に Ubuntu Desktop 11.04 インストーラで Ubuntu をインストールする。最新ノートなので生のインストーラでは画面が真っ暗になってしまう。ブート時にすぐに何かキーを押していると、ブートオプションが選択できる画面になる。[Install Ubuntu] のところまでカーソルを持って行き F6 を押して acpi=off にチェックを入れる。ESC を押してから ENTER を押してインストールを開始する。トラックパッドも動作しないので USB マウスを挿してから行わなければならない。

インストール後の起動にも acpi=off が必要なので grub 画面で e を押してオプションを指定して起動する。いつものごとく、以下を行った。

  • aptitude
  • vim
  • etckeeper
  • aptitude update && aptitude safe-upgrade

そして grub にオプションの指定を設定する。

$ sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pcie_aspm=force acpi=noirq i915.semaphores=1"
$ sudo update-grub

再起動するとうまくログイン画面まで行くはず。

あとは、nvidia の proprietary ドライバを入れたのだが、これはうまく動作しない。また、Intel HD 3000 と nouveau の切り替えが /sys/kernel/debug/vgaswitcheroo/switch ファイルへの echo でできると読んだのだが、そんなファイルは存在しなかった。

当初の目的であるトリプルブートは、特に何もしなくとも上記の順番でインストールすれば達成できた。

References

Dell XPS 15z での Ubuntu 11.04 の挙動については HardwareSupport/Machines/Laptops/Dell/XPS/15z - Ubuntu Wiki

2011-09-10

CUDAのカーネル関数を長時間実行するとエラーになる問題

自宅に設置したスーパーワークステーションの環境設定も終わって、早速CUDAプログラミングで遊んでみた。Massiveな並列計算をする前に、GPU自体の計算ってどのくらい速いかを見てやろうと思ってテストプログラムを作ってみた。

__global__ void kernel_test()
{
    // 重い計算
}

    // ...
    kernel_test<<<grid, block>>>();
    cudaMemcpy(/* ... */);
    // ...

計算のパラメータとして定数Nを用意してやっていろいろ変えて遊んでみた。小さいNの時は問題なく動くのだが、Nをちょっと大きくすると以下のようなエラーが出てうまくいかない。

Cuda error in file 'test.cu' in line 8 : the launch timed out and was terminated.

変だなーと思って会社のCUDAマシンで実行したところ問題ない。う〜む壊れているのかと思っていろいろ検索してみたところ原因が判明。家のマシンはTeslaが2枚ささっているのだが、そのうち1つをディスプレイデバイスとして使っている。このデバイス上で一定時間カーネル関数が実行されたままになるとwatch dog timerによって実行が中断されるとのこと。

CUDA SDKに倣ったプログラム環境でcutilを用いている以下のような場合:

#include <cutil.h>
int main(int argc, char *argv[])
{
    CUT_DEVICE_INIT(argc, argv);
    // ...
}

コマンドライン引数として--device=1を与えることで2枚目のディスプレイにつながっていないTeslaを利用するように指定できる。

References

CUDA program causes nvidia driver to crash - Stack Overflow

2011-09-04

Ubuntu 11.04でeSATA外付けHDにソフトウェアRAID 5を構築する

今回入手したHP Z800に、今度はeSATA接続で大容量の外付けHDを接続し、ソフトウェアRAID 5で運用してNASその他として利用することを考える。用意したものは以下の通り。

まずeSATAボードPEX-PE30SをPCIeスロットにセットする。HD × 5は裸族のインテリジェントビルCRIB535EUFに詰め込むだけ。CRIB535EUFはRAID機能を内蔵しているが、今回はそれは使わないのでRAID無しモードに裏面のディップスイッチをセットする。

両者を接続して起動すると、以前RAID 1を構築した内蔵HDが/dev/sdf, /dev/sdgとなり、今回接続したHDが/dev/sdasdeと認識された。このようなことがあるために、/etc/fstabなどでは/dev/sdaなどと直接指定するのでなく、ファイルシステムのUUIDで指定しておくべきだ。

そしてRAID 5を構築するため以下のコマンドを実行する。

$ sudo mdadm --create /dev/md4 --level=5 -n 5 --metadata=0.9 /dev/sd[abcde]
$ cat /proc/mdstat

ここから長い長い再構築プロセスが始まる。mdstatの出力を見ると、spareがどうとかこうとか出力され、特にスペアディスクなどを指定していないのにと困惑するが、man mdadmによるといったんスペアがあることにしたほうが構築が速く済むということなので心配しないでいい。再構築には多分20時間くらいかかった。再構築が終了したら、構成を保存する。

$ sudo vi /etc/mdadm/mdadm.conf
{ 以前のARRAY行を削除する }
$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
$ sudo update-initramfs -u
$ sudo reboot

後はファイルシステムを構築しマウントして終わり。

$ sudo mkfs -t ext4 /dev/md4
$ sudo blkid /dev/md4
$ sudo vi /etc/fstab
$ sudo mount -a

後日談

ある夜、サーバ置き場になっている書庫からボーという音がしていたのでのぞいてみると、ソフトウェアRAID 5で運用している裸族のインテリジェントビルのアクセスランプが全部赤くなっていてアクセスが連続して起きていた。これは何事?と思って調べてみた。

$ cat /proc/mdstat
md4 : active raid5 sda[0] sdb[1] sde[4] sdd[3] sdc[2]
      7814057984 blocks level 5, 512k chunk, algorithm 2 [5/5] [UUUUU]
      [=========>...........]  check = 49.8% (974687636/1953514496) finish=658.9min speed=24756K/sec

なんとRAIDの再構築が進行中だった。もう壊れたのか?と思ってよく見てみると、壊れたことを示すFAILなどの文字が無い。あちこち検索したところ、/etc/cron.d/mdadmによる設定によって週に一回/usr/share/mdadm/checkarrayが実行されることが判明した。そしてよく目をこらしてmdstatの出力を見るとcheck =となっていて、再構築ではなくチェックが進行中なだけであった。でも週1で20数時間かけてチェックするのもどうかな...

(2011/10/2追記)/etc/cron.d/mdadmをよく見ると、[ $(date +\%d) -le 7 ]というチェックが入っていて、月一度の実行だった。