RAMディスクを手軽に使いたい。とおもったときにtmpfs
がある。
tmpfs をマウントする。
sudo mount -t tmpfs -o size=20G,mode=1777 storage/app/work/
tmpfs を名前付きでマウントする
名前をつけたら,dfなどをしたときに、tmpfs 表記じゃなくなる。
sudo mount -t tmpfs -o size=20G,mode=1777 yourname storage/app/work/
fstab でマウントする。
fstab に書いてマウントする /tmp
を tmpfs
へマウントする場合
echo tmpfs /tmp tmpfs mode=1777,nosuid,nodev 0 0 >> /etc/fstab
いくつかの注意点
systemd.mountが動いているような、systemd 環境だと /tmp
にマウントしたら起動時に失敗する。(shm, /tmp はsystemd管理下にある。)
systemd を使ってる場合で、デスクトップ ubuntu のような場合は、tmp.mount のsystemdユニットがあるので、いったんこれをDisabled/mask にしないと起動時におかしなことになるわけです。
size=XXX はRAM の50~60%になる。それ以上も指定できるがスワップすると思っておく。
tmpfs を使い切るとスワップに書き出すので、swap をちゃんと確保しておく。swapがないとディスクフルで止まるはず。(検証してない)
tmpfs に書いて放置してても RAMには居座り続ける。24時間以上使ってなかったらSWAPに放り出してほしいとかそういう事はできない。
動画エンコードが早くなる
ffmpeg のエンコードは、ディスクのR/Wが遅いためにIO待ちになってることがおおい。
たとえば、同一のディスクからREAD・WRITEしている場合、つまりエンコードとデコードが同じディスクを使ってる場合
このように、同じディスク書き出す場合はIOを奪い合いになる。
ffmpeg -i /mnt/xxx.mp4 -opts /mnt/xxx.ts
x265にエンコードする際で、movflag fast 処理をしてない場合は、前秒のデータを見に行ったりするのでハードディスクのヘッダは書き込みと読み込みで飛び回ることになり、HDDの場合はtmpfsを使ったほうが圧倒的にエンコードが早くなることを念頭に置いておく。
htop で確認する。
htop の黄色の部分が、tmpfsが使ってる領域がカウントされてる部分です。(すべての黄色がすべてのtmpfsとは限らない。tmpfsは黄色で表示される部分に含まれる ということである。)
1G を tmpfs で使えば、メモリは1GB使われる
速度について
intel i7 6700k
tmpfs に書き出した場合( ddr3 )
nvme に書き出した場合( pcie 16 , SPCC M.2 PCIe SSD)
raspi4 でも試す。
raspi4 で試した場合(ddr4)
nvme に書き出した場合
速度は3倍程度変わる。
nvme に比べて3倍位でている。今回試したのは、メモリが安くて捨て値になってるDDR3なので、そこまでめちゃくちゃ速い訳では無いが、それでも、nvmeよりずっと速い。
raspi4 のddr4 より、古いintel i7 6700 のddr3 のほうがハイスコアなのはおもしろいね。raspi4 のddr4 って性能速度ではなく普及価格帯によりコストダウンのためってわかる。
メモリを活用
メモリは、SSDストレージと違って寿命を気にせずに使えるので、大量に搭載しておもちゃにしておくのがいいと思う。
2023-12-13 追記
raspi4 と intel cpu がごちゃまぜに測定結果を掲載してたのを修正。