zfs_4G_arc.sh
#!/bin/sh
# 061218: stw Added some comments
# 061127: stw Created
C_MAX_NEW=0x100000000
C_NEW=0x100000000
P_NEW=0x80000000
###
### Umount all ZFS filesystems
###
echo "Unmounting all ZFS file systems..."
zfs umount -fa
if [ $? -eq 0 ]
then
echo "ZFS unmount were successful"
echo
else
echo "ZFS unmounts failed, exiting"
exit 1
fi
###
### Get arc variable addresses
###
# C_MAX
C_MAX_ADDR=`mdb -k << EOF | awk '{ print $1 }'
arc::print -a struct arc c_max
EOF`
C_MAX_ORIG=`mdb -k << EOF | awk '{ print $3 }'
arc::print -x struct arc c_max
EOF`
# C
C_ADDR=`mdb -k << EOF | awk '{ print $1 }'
arc::print -a struct arc c
EOF`
C_ORIG=`mdb -k << EOF | awk '{ print $3 }'
arc::print -x struct arc c
EOF`
# P
P_ADDR=`mdb -k << EOF | awk '{ print $1 }'
arc::print -a struct arc p
EOF`
P_ORIG=`mdb -k << EOF | awk '{ print $3 }'
arc::print -x struct arc p
EOF`
echo "Original values read from kernel"
echo C_MAX_ADDR=$C_MAX_ADDR C_MAX_ORIG=$C_MAX_ORIG
echo C_ADDR=$C_ADDR C_ORIG=$C_ORIG
echo P_ADDR=$P_ADDR P_ORIG=$P_ORIG
echo
###
### Set the new values
###
echo "Setting new values..."
mdb -kw << EOF
${C_MAX_ADDR}/Z ${C_MAX_NEW}
${C_ADDR}/Z ${C_NEW}
${P_ADDR}/Z ${P_NEW}
EOF
echo "done!"
echo
###
### Get the new values
###
# C_MAX
C_MAX_SET=`mdb -k << EOF | awk '{ print $3 }'
arc::print -x struct arc c_max
EOF`
# C
C_SET=`mdb -k << EOF | awk '{ print $3 }'
arc::print -x struct arc c
EOF`
# P
P_SET=`mdb -k << EOF | awk '{ print $3 }'
arc::print -x struct arc p
EOF`
echo "New values read from kernel"
echo C_MAX_ADDR=$C_MAX_ADDR C_MAX_SET=$C_MAX_SET
echo C_ADDR=$C_ADDR C_SET=$C_SET
echo P_ADDR=$P_ADDR P_SET=$P_SET
echo
echo "Remounting all ZFS file systems..."
zfs mount -a
if [ $? -eq 0 ]
then
echo "ZFS mount were successful"
echo
else
echo "ZFS unmounts failed, please check"
exit 1
fi