Skip to content

Commit

Permalink
Auto generate hugepages.conf based on numa nodes present
Browse files Browse the repository at this point in the history
  • Loading branch information
cardigliano committed Nov 10, 2023
1 parent bf273e4 commit fd5b6b6
Showing 1 changed file with 19 additions and 7 deletions.
26 changes: 19 additions & 7 deletions package/usr/bin/pf_ringctl
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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}
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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}
Expand Down

0 comments on commit fd5b6b6

Please sign in to comment.