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