Antes de Solaris 11 (11.2), si queríamos modificar el tamaño de memoria disponible para la caché de ZFS ARC (Adaptive replacement cache), había que hacerlo de forma estática añadiendo el parámetro zfs_arc_max en /etc/system
, lo que implicaba sí o sí, reiniciar el sistema.
Por suerte, en las nuevas versiones de Solaris 11 ya está disponible la forma de modificar la reserva de memoria dinámicamente sin necesidad de reiniciar el SO. Recordad, que por defecto no hay límite de memoria para la ZFS ARC cache, lo que puede provocar un uso muy elevado de RAM en el sistema y que esta no esté disponible inmediatamente para procesos de usuario (hay algo de latencia entre que se libera de la cache y pasa a estar libre. El uso del parámetro de kernel zfs_arc_max
ya está obsoleto.
La forma de cambiar dinámicamente esta reserva es mediante el parámetro user_reserve_hint_pct
, que define el porcentaje de memoria que reservamos para usuario, es decir, que no será utilizada para otras funciones como la ZFS ARC. Por defecto es del 0% así que siempre será recomendable ajustarlo según requerimientos.
Oracle facilita un script propio para aplicar el porcentaje de reserva de forma muy sencilla. El script set_user_reserve.sh
se puede encontrar en la metalink de Oracle:»Memory Management Between ZFS and Applications in Oracle Solaris 11.2 (Doc ID 1663862.1)». El uso es tan sencillo como especificar mediante el parámetro -f
el porcentaje a reservar:
~# ./set_user_reserve.sh -fp 80 Current user_reserve_hint_pct value is 0. Adjusting user_reserve_hint_pct from 0 to 0 Adjustment of user_reserve_hint_pct to 80 successful. Make the setting persistent across reboot by adding to /etc/system * Tuning based on MOS note 1663862.1, script version 1.2 * added Tuesday, June 4, 2019 08:43:04 AM EST by system administrator : set user_reserve_hint_pct=80
En el ejemplo anterior hemos pasado de 0% a 80%, lo que implica que sólo un 20% de la memoria del sistema estará disponible para ZFS ARC. El script modifica el parámetro en caliente y también lo añade a /etc/system
para que sea persistente tras reiniciar.
Tras aplicar el cambio, podréis ver el cambio de uso de RAM:
~# echo "::memstat" | mdb -k Page Summary Pages Bytes %Tot ---------------------------- ---------------- ---------------- ---- Kernel 746345 5.6G 5% Defdump prealloc 237850 1.8G 2% ZFS 660317 5.0G 4% Anon 1830371 13.9G 12% Exec and libs 64977 507.6M 0% Page cache 64408 503.1M 0% Free (cachelist) 1283167 9.7G 8% Free (freelist) 10841205 82.7G 69% Total 15728640 120G