diff --git a/package/usr/bin/pf_ringctl b/package/usr/bin/pf_ringctl index d88e5072f2..ff57e9c139 100755 --- a/package/usr/bin/pf_ringctl +++ b/package/usr/bin/pf_ringctl @@ -19,7 +19,6 @@ DRIVERS_FLAVOR=("zc") DKMS_DRIVERS=('e1000e' 'igb' 'ixgbe' 'ixgbevf' 'i40e' 'iavf' 'ice') ERROR=0 DRIVER_INSTALLED=0 -OLD_HUGEPAGES_CONFIG="${PF_RING_CONFIG_DIR}/hugepages" HUGEPAGES_CONFIG="${PF_RING_CONFIG_DIR}/hugepages.conf" HUGEPAGES_SIZE=`grep Hugepagesize /proc/meminfo | cut -d ':' -f 2|sed 's/kB//g'|sed 's/ //g'` # KB HUGEPAGES_MOUNTPOINT="/dev/hugepages" @@ -30,7 +29,7 @@ DRIVER_FORCESTART_FILE="${PF_RING_CONFIG_DIR}/forcestart" # touch to load zc eve DO_NOT_LOAD_HUGEPAGES=0 # set to 1 to disable hugepages preallocation LOAD_HUGEPAGES=0 INTERFACES_CONFIG="${PF_RING_CONFIG_DIR}/interfaces.conf" -MEM_AVAIL=1048576 # 1GB Hugepages (this avoids consuming all memory at boot time, causing kernel panic) +HUGEPAGES_MEM=1048576 # 1GB Hugepages (this avoids consuming all memory at boot time, causing kernel panic) # Including interfaces conf containing MANAGEMENT_INTERFACES, CAPTURE_INTERFACES [ -f ${INTERFACES_CONFIG} ] && . ${INTERFACES_CONFIG} @@ -147,10 +146,10 @@ check_hugepages() { [ -z "${HUGEPAGES_NUMBER}" ] || HUGEPAGES_TOTAL=$(( HUGEPAGES_TOTAL + ${HUGEPAGES_NUMBER/hugepagenumber=/} )) done < ${HUGEPAGES_CONFIG} else - HUGEPAGES_TOTAL=$(( MEM_AVAIL / HUGEPAGES_SIZE )) + HUGEPAGES_TOTAL=$(( HUGEPAGES_MEM / HUGEPAGES_SIZE )) fi - #check if huge pages are already loaded and the number of pages are greater than defined or minimum value + # Check if hugepages are already loaded and the number of pages are greater than defined or minimum value if [ `cat /sys/kernel/mm/hugepages/hugepages-${HUGEPAGES_SIZE}kB/nr_hugepages` -gt ${HUGEPAGES_TOTAL} ] && [ `grep ${HUGEPAGES_MOUNTPOINT} /proc/mounts | wc -l` -gt 0 ]; then LOAD_HUGEPAGES=0 return @@ -162,6 +161,14 @@ unload_hugepages() { echo 0 > /sys/kernel/mm/hugepages/hugepages-${HUGEPAGES_SIZE}kB/nr_hugepages } +create_hugepages_config() { + HUGEPAGES_PER_NODE=$(( HUGEPAGES_MEM / HUGEPAGES_SIZE )) + for node in "/sys/devices/system/node/node"*; do + nodeid=${node:29} + echo "node=${nodeid} hugepagenumber=${HUGEPAGES_PER_NODE}" >> ${HUGEPAGES_CONFIG} + done +} + load_hugepages() { check_hugepages HUGEPAGES_NUMBER=0 @@ -170,6 +177,10 @@ load_hugepages() { return fi + if [ ! -f ${HUGEPAGES_CONFIG} ]; then + create_hugepages_config + fi + MOUNT_OPTION="" if [ -f ${HUGEPAGES_CONFIG} ]; then while read node ; do @@ -188,13 +199,14 @@ load_hugepages() { done <<< "$(cat ${HUGEPAGES_CONFIG})" else # set it to default # Computing max available - #MEM_AVAIL=`grep MemFree /proc/meminfo | cut -d ':' -f 2|sed 's/kB//g'|sed 's/ //g'`; - #MEM_AVAIL=$(( MEM_AVAIL - 524288 )) - HUGEPAGES_NUMBER=$(( MEM_AVAIL / HUGEPAGES_SIZE )) + #HUGEPAGES_MEM=`grep MemFree /proc/meminfo | cut -d ':' -f 2|sed 's/kB//g'|sed 's/ //g'`; + #HUGEPAGES_MEM=$(( HUGEPAGES_MEM - 524288 )) + HUGEPAGES_NUMBER=$(( HUGEPAGES_MEM / HUGEPAGES_SIZE )) if [[ ${HUGEPAGES_NUMBER} -gt 0 ]]; then echo ${HUGEPAGES_NUMBER} > /sys/kernel/mm/hugepages/hugepages-${HUGEPAGES_SIZE}kB/nr_hugepages fi fi + if [ `grep ${HUGEPAGES_MOUNTPOINT} /proc/mounts | wc -l` -eq 0 ]; then if [ ! -d ${HUGEPAGES_MOUNTPOINT} ]; then mkdir ${HUGEPAGES_MOUNTPOINT}