ラズパイ(Raspbian Jessie)とスワップメモリ容量の変更(環境設定の続き)

過去記事についても分割・統合して整理する予定。


以前はどうだったのかよくわかりませんが、現在のRaspbian は初期設定の状態でChromiumGoogle Chromeオープンソース版)がインストールされているので、Youtubeの動画が見れたり、それなり普段使いの環境になります。

さりげなくFlash再生プラグインが導入済みなのである程度はFlashゲームも遊べたりします。

ただ、メインメモリ容量が1GBなうえにスワップメモリ容量も少ないのでChromeでたくさんタブを開くとかなりの確率でハングします。そこで対処法としてSwapをの容量を変更します。

スワップの設定

理由はわかりませんが、dphys-swapfileというプログラムにより管理されています。

初期状態では100MBになっていて、調子に乗ってChromiumでタブをたくさん開くとハングアップ。

GUIベースで作業したいとか、サイズの大きい画像ファイルを扱う場合は物理メモリと同じぐらいのサイズに設定しておきたい。

サーバー用途ならSwapなしでも大丈夫な場合もあるので用途に応じて容量は調整する必要があります。また、microSD の寿命から考えると、USBメモリを接続してそっちにSwap領域を作ってメインのmicroSDへの負荷を減らすのも一つの方法。

dphys-swapfileについてざっくり整理すると以下のようになります。

  • インストール直後の初期設定:100MB
  • 明示的に上限値を変更しない限り、2GB以下の値に切り捨て
  • MB単位で指定する方法と、実メモリの容量に対する倍率を指定する方法の二通り

ラズパイ3の搭載メモリは1024MB。実際にカーネルが認識するのはこの値からGPU用に割り当てた容量を引いた値になる。

固定値を指定する方法

エディタで/etc/dphys-swapfileを開き、CONF_SWAPSIZE という行の値を変更。例えば2048MB(2GB)なら以下のように変更。

CONF_SWAPSIZE=2048

設定したいSwapのサイズをMB単位で指定。

$ sudo systemctl stop dphys-swapfile
$ sudo systemctl start dphys-swapfile

systemctl経由でstop/start する。実際に呼び出されるのは/etc/init.d/dphys-swapfile。 なお、swapの容量を変更した直後は内部でddコマンドが呼び出されるので非常に時間がかかります。

最後にfree -hで意図した容量に設定されているか確認。

$ free -h
             total       used       free     shared    buffers     cached
Mem:          862M       833M        28M       6.3M        36M       656M
-/+ buffers/cache:       140M       721M
Swap:         2.0G         0B       2.0G

-hは人間が読みやすい単位で出力するというオプション。

freeコマンドに-mオプションを指定するケースをよく見かけるのでついでに書いておくと、-b-k-m-g--teraオプションでそれぞれバイト、キロバイト、メガバイト、ギガバイト、テラバイトの単位で出力(小数点以下切り捨て) )。デフォルトはキロバイト単位。ちなみに-tはトータル容量表示。

倍率指定による方法

もし倍率指定で設定する場合は。修正箇所は、

  1. CONF_SWAPSIZE=100 という行をコメントアウト
  2. CONF_SWAPFACTOR=2 という行の行頭のコメント記号を削除

これでカーネルが認識しているメモリ量の2倍に設定される。もしGPUへの割り当てメモリを頻繁に変えるなら固定値にしておいた方がいいと思います。

注意点

もし2048(2GB)以上の値を設定するなら、CONF_MAXSWAP=2048という行の行等のコメントを削除、等号の右側の2048という値を4096などの大きい値にする。

このパラメータを指定しない場合、古い32ビットカーネルを考慮しているのか、2048より大きい値を指定しても自動的に2048(2GB)にセットされるので注意。

どこかのサイトで2GB以上に設定できないという話はこの設定を変更していないせいだろうと思います。

そのほか

もちろんWebサイトによってはユーザーエージェントで弾かれたりします。

スワップの容量を増やした状態でもmicroSDへのデータアクセスの最中にプチフリのような現象が発生したり、色々ツライ場面は多々あります。

コンパイルの待ち時間に暇つぶししたりする分には十分です。購入当初の目論見とは違うところで活躍していますがまあドンマイってことで。

たかだかスワップ容量の変更にグダグダと書けるとは自分でも意外ですが以上です。