diff --git a/aliyunsmc-meminfo/Makefile b/aliyunsmc-meminfo/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..41977c76f5e3ab4c3df5ebbd6f2f982f6730ab28 --- /dev/null +++ b/aliyunsmc-meminfo/Makefile @@ -0,0 +1,19 @@ +VERSION ?= 0.0.99 +BINDIR ?= /usr/bin + +.PHONY: all + +all: aliyunsmc-meminfo + @echo " BUILD" + +aliyunsmc-meminfo: + @sed -e "s/@VERSION@/$(VERSION)/g" < aliyunsmc-meminfo.in > aliyunsmc-meminfo + @chmod +x aliyunsmc-meminfo + +clean: + @echo " CLEAN" + @rm -f aliyunsmc-meminfo + +install: aliyunsmc-meminfo + @echo " INSTALL" + @install aliyunsmc-meminfo $(BINDIR) \ No newline at end of file diff --git a/aliyunsmc-meminfo/aliyunsmc-meminfo.in b/aliyunsmc-meminfo/aliyunsmc-meminfo.in new file mode 100644 index 0000000000000000000000000000000000000000..82fb9c257109a65242418fa707ddce77d58e6232 --- /dev/null +++ b/aliyunsmc-meminfo/aliyunsmc-meminfo.in @@ -0,0 +1,98 @@ +#!/bin/bash + +# +# Copyright (c) 2025 Alibaba Group Holding Limited +# aliyunsmc-ueid is licensed under Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +# See the Mulan PSL v2 for more details. +# +# Authors: Guangguan Wang +# + +VERSION=@VERSION@ + +usage() { + if [ X"$1" != X"" ]; then + echo "aliyunsmc-meminfo error: $1" + fi + + echo " Usage: aliyunsmc-meminfo [OPTIONS]" + echo "" + echo " -v, --version show version info" + echo " -h, --help show this message" + echo "" + echo "Several meminfo types showed by this tool:" + echo " mtt-entry Memory Translation Table Entry in RDMA, every entry" + echo " can indicate 1 physical mem page(mostly 4KB page size)" + + exit 1 +} + +show_meminfo_hdr() { + printf "%-15s %-15s %-20s %-20s\n" "Item" "Type" "Total" "Used" +} + +printf_meminfo_item() { + item=$1 + type=$2 + total=$3 + used=$4 + printf "%-15s %-15s %-20d %-20d\n" $item $type $total $used +} + +get_erdma_dev_name() { + bdf=$1 + name_path="/sys/bus/pci/drivers/erdma/$bdf/infiniband" + if [ ! -d "$name_path" ]; then + echo $bdf + return 0 + fi + + full_path=$(echo "$name_path"/*) + if [ "$full_path" == "$name_path/*" ]; then + echo $bdf + else + echo $(basename "$full_path") + fi +} + +show_erdma_meminfo() { + erdma_debugfs="/sys/kernel/debug/erdma/" + if [ -d "$erdma_debugfs" ]; then + for dir in "$erdma_debugfs"/*/; do + bdf=$(basename "$dir") + erdma_dev=$(get_erdma_dev_name "$bdf") + content=$(cat "$dir/mtte_usage") + used="${content%/*}" + total="${content#*/}" + printf_meminfo_item $erdma_dev "mtt-entry" $total $used + done + fi +} + +if [[ $# -eq 0 ]]; then + show_meminfo_hdr + show_erdma_meminfo + exit 0 +fi + +while [[ $# -gt 0 ]]; do + case "$1" in + --version|-v) + echo "aliyunsmc-meminfo utility, aliyun-smc-extensions-$VERSION" + shift + ;; + --help|-h) + usage + ;; + *) + err="Unknown option: $1" + usage err + ;; + esac +done \ No newline at end of file