Ubuntuのswapfileにプライオリティを設定して疑似RAID0の高速化をする

Tensorflowで巨大なデータを学習させる時、物理メモリが足りなかったので仮想メモリを増やしたくなった。

しかし、swapfileの読み書きが思っていたよりも遅く、高速化したくなった。

マシンにはNVMeが1台、SSDが2台搭載されていたので、並列にswapを作成出来ればI/Oパフォーマンスが上がるのでは?と思って調べてみた。

スワップ - ArchWiki

ストライピング
スワップの性能を上げるために RAID を使う必要はありません。/etc/fstab ファイルでスワップの優先度が同じに設定されている場合、複数のデバイスにスワップをストライプ処理するのはカーネルだけで行うことができます。

mdadmでswap用のパーティションのためにRAID0を組まなくても、priorityを設定するだけでいいらしい。

$ sudo vim /etc/fstab
/dev/sda3 none swap defaults,pri=0 0 0
/home/hoge/ssd1/swapfile none swap defaults,pri=0 0 0
/home/hoge/ssd2/swapfile none swap defaults,pri=0 0 0
$ swapon
NAME                         TYPE      SIZE  USED PRIO
/dev/sda3                    partition  16G 13.7G    0
/home/hoge/ssd1/swapfile     file       16G 41.7G    0
/home/hoge/ssd2/swapfile     file       16G 41.8G    0

priorityが揃った。

試しにswaponをwatchしてみると、確かに均等に書き込まれているのがわかる。

ちなみにTensorflowで学習中にnmonでnvmeへの書き込み速度を見ると140MB/secほどであった。

残りのSSD2つもおおよそ同じ値が出ているので、約400MB/secがswapのI/Oに生じている様子。

特に動作が重くなった様子もなく、デスクトップ操作もsshもいつも通りの感覚で操作出来ていた。SSDすごい。

swapfileへのアクセスはシーケンシャルなのか、ランダムアクセスなのか、どっちなんだろう?

コメント

タイトルとURLをコピーしました