この質問は、スワップファイルをtmpfsに移動するとパフォーマンスが向上するという同僚の冗談から来ました。もちろん、これが可能であっても良い考えではありません。ただ知りたいのですが、これは可能でしょうか?
私は現在Ubuntu 14.04を使用していますが、ほとんどのLinux / Unixシステムでもプロセスが似ていると思います。これが私がすることです:
> mkdir /mnt/tmp
> mount -t tmpfs -o size=10m tmpfs /mnt/tmp
> dd if=/dev/zero of=/mnt/tmp/swapfile bs=1024 count=10240
> chmod 600 /mnt/tmp/swapfile
> mkswap /mnt/tmp/swapfile
# So far, so good!
> swapon /mnt/tmp/swapfile
swapon: /mnt/tmp/swapfile: swapon failed: Invalid argument
もしそうなら、LinuxまたはUnixのどちらでもRAMのファイル/パーティションにスワップを設定できますか?Invalid argument
上記で発生したエラーを解決する方法はありますか?
もう一度言いますが、これが実際の問題を解決するとは期待していません。ただ楽しい実験だと思います。
ベストアンサー1
これは不可能です。swapon
システムコールには、readpage
ファイルシステムbmap
によって実装された(間接)呼び出しが必要です。
http://lxr.free-electrons.com/source/mm/swapfile.c?v=4.0#L2412
if (!mapping->a_ops->readpage) {
error = -EINVAL;
goto bad_swap;
}
しかし、それらのどれも実装されていません。一時ファイルシステム、対応する項目がありませんaddress_space_operations
。http://lxr.free-electrons.com/source/mm/shmem.c?v=4.0#L3104
同じ理由で、tmpfsはループマウントを保存できず、ramfsも機能しません(bmap
呼び出さない)