FreeBSD PAE で ZFS に KVA_PAGES でもっとメモリを割り当てる2014年12月30日 14時02分52秒

FreeBSD の PAE カーネルで ZFS モジュールを使うで PAE カーネルにて ZFS を使えるようにはなっていた。しかし、これだけではカーネルメモリの割り当ては非 PAE からは増えない様だ。

カーネルへの仮想メモリ領域の割り当てを増やすのに KVA_PAGES を設定する必要がある。

sys/i386/conf/NOTE に以下のように書いてある。

# Change the size of the kernel virtual address space.  Due to
# constraints in loader(8) on i386, this must be a multiple of 4.
# 256 = 1 GB of kernel address space.  Increasing this also causes
# a reduction of the address space in user processes.  512 splits
# the 4GB cpu address space in half (2GB user, 2GB kernel).  For PAE
# kernels, the value will need to be double non-PAE.  A value of 1024
# for PAE kernels is necessary to split the address space in half.
# This will likely need to be increased to handle memory sizes >4GB.
# PAE kernels default to a value of 512.
#
options         KVA_PAGES=260
ただ、PAE カーネルでのデフォルトの値は記述と違い変わっていないようだ。両方とも 260 になっている。10.1 RELEASE で確認した。PAE カーネルを作って、大きい tmpfs 等を使っていたが、zfs もメモリの割り当てが小さいので気が付いた。

取り敢えず、KVA_PAGES=1024 で試した所、kmem の割り当てが増えているのが確認できた。sysctl で変更前と変更後を比較した。


@@ -2402,15 +2492,15 @@
 vm.v_pageout_free_min: 34
 vm.swap_enabled: 1
 vm.md_malloc_wait: 0
-vm.kmem_size: 429916160
+vm.kmem_size: 859832320
 vm.kmem_zmax: 65536
 vm.kmem_size_min: 12582912
-vm.kmem_size_max: 429916160
+vm.kmem_size_max: 859832320
 vm.kmem_size_scale: 3
-vm.kmem_map_size: 47108096
-vm.kmem_map_free: 382808064
+vm.kmem_map_size: 30310400
+vm.kmem_map_free: 829521920
 vm.swap_total: 2140618752
-vm.swap_reserved: 1034051584
+vm.swap_reserved: 929083392
 vm.overcommit: 0
 vm.swzone: 36175872
 vm.swap_maxpages: 4194304
...
 vfs.tmpfs.rename_restarts: 0
 vfs.tmpfs.memory_reserved: 4194304
-vfs.zfs.arc_max: 268697600
-vfs.zfs.arc_min: 33587200
+vfs.zfs.arc_max: 536870912
+vfs.zfs.arc_min: 67108864
 vfs.zfs.arc_average_blocksize: 8192
 vfs.zfs.arc_free_target: 6655
 vfs.zfs.arc_meta_used: 0
-vfs.zfs.arc_meta_limit: 67174400
+vfs.zfs.arc_meta_limit: 134217728
 vfs.zfs.l2arc_write_max: 8388608
 vfs.zfs.l2arc_write_boost: 8388608
 vfs.zfs.l2arc_headroom: 2

kmem と zarc がほぼ二倍の大きさになっている。