From: Bhaskar Chowdhury <unixbhaskar@gmail.com>
To: akpm@linux-foundation.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org
Cc: Bhaskar Chowdhury <unixbhaskar@gmail.com>
Subject: [PATCH] tools: mm: Added modern version of shell quote and a stranza for required command check
Date: Tue, 1 Jul 2025 15:07:08 +0530 [thread overview]
Message-ID: <20250701094603.23933-1-unixbhaskar@gmail.com> (raw)
Three things precisely:
Replaed backquote with dollar-parentheses ...that is modern way of quoting in
shell script.
Added a stranza of missing/required command for the operation, in this case
gnuplot and that too in the command shell path.
And lastly, command with -v print the path of command i.e location for the
command to be executed.
Signed-off-by: Bhaskar Chowdhury <unixbhaskar@gmail.com>
---
tools/mm/slabinfo-gnuplot.sh | 45 +++++++++++++++++++++++++-----------
1 file changed, 31 insertions(+), 14 deletions(-)
diff --git a/tools/mm/slabinfo-gnuplot.sh b/tools/mm/slabinfo-gnuplot.sh
index 873a892147e5..de621963b3d1 100644
--- a/tools/mm/slabinfo-gnuplot.sh
+++ b/tools/mm/slabinfo-gnuplot.sh
@@ -38,6 +38,23 @@ usage()
echo "-r %d,%d - use data samples from a given range"
}
+
+# This varialble could have space separated commands
+my_needed_commands="gnuplot"
+
+missing_counter=0
+for needed_command in $my_needed_commands; do
+ if ! hash "$needed_command" >/dev/null 2>&1; then
+ printf "Command not found in PATH: %s\n" "$needed_command" >&2
+ ((missing_counter++))
+ fi
+done
+
+if ((missing_counter > 0)); then
+ printf "Minimum %d commands are missing in PATH, aborting\n" "$missing_counter" >&2
+ exit 1
+fi
+
check_file_exist()
{
if [ ! -f "$1" ]; then
@@ -58,13 +75,13 @@ do_slabs_plotting()
check_file_exist "$file"
- out_file=`basename "$file"`
+ out_file=$(basename "$file")
if [ $xmax -ne 0 ]; then
range="$range::$xmax"
lines=$((xmax-xmin))
fi
- wc_lines=`cat "$file" | wc -l`
+ wc_lines=$(cat "$file" | wc -l)
if [ $? -ne 0 ] || [ "$wc_lines" -eq 0 ] ; then
wc_lines=$lines
fi
@@ -78,7 +95,7 @@ do_slabs_plotting()
xtic_rotate=90
fi
-gnuplot -p << EOF
+$(command -v gnuplot) -p << EOF
#!/usr/bin/env gnuplot
set terminal png enhanced size $width,$height large
@@ -113,14 +130,14 @@ do_totals_plotting()
for i in "${t_files[@]}"; do
check_file_exist "$i"
- file="$file"`basename "$i"`
+ file="$file"$(basename "$i")
gnuplot_cmd="$gnuplot_cmd '$i' $range using 1 title\
'$i Memory usage' with lines,"
gnuplot_cmd="$gnuplot_cmd '' $range using 2 title \
'$i Loss' with lines,"
done
-gnuplot -p << EOF
+$(command -v gnuplot) -p << EOF
#!/usr/bin/env gnuplot
set terminal png enhanced size $width,$height large
@@ -148,26 +165,26 @@ do_preprocess()
# use only 'TOP' slab (biggest memory usage or loss)
let lines=3
- out=`basename "$in"`"-slabs-by-loss"
- `cat "$in" | grep -A "$lines" 'Slabs sorted by loss' |\
+ out=$(basename "$in")"-slabs-by-loss"
+ $(cat "$in" | grep -A "$lines" 'Slabs sorted by loss' |\
grep -E -iv '\-\-|Name|Slabs'\
- | awk '{print $1" "$4+$2*$3" "$4}' > "$out"`
+ | awk '{print $1" "$4+$2*$3" "$4}' > "$out")
if [ $? -eq 0 ]; then
do_slabs_plotting "$out"
fi
let lines=3
- out=`basename "$in"`"-slabs-by-size"
- `cat "$in" | grep -A "$lines" 'Slabs sorted by size' |\
+ out=$(basename "$in")"-slabs-by-size"
+ $(cat "$in" | grep -A "$lines" 'Slabs sorted by size' |\
grep -E -iv '\-\-|Name|Slabs'\
- | awk '{print $1" "$4" "$4-$2*$3}' > "$out"`
+ | awk '{print $1" "$4" "$4-$2*$3}' > "$out")
if [ $? -eq 0 ]; then
do_slabs_plotting "$out"
fi
- out=`basename "$in"`"-totals"
- `cat "$in" | grep "Memory used" |\
- awk '{print $3" "$7}' > "$out"`
+ out=$(basename "$in")"-totals"
+ $(cat "$in" | grep "Memory used" |\
+ awk '{print $3" "$7}' > "$out")
if [ $? -eq 0 ]; then
t_files[0]=$out
do_totals_plotting
--
2.49.0
next reply other threads:[~2025-07-01 9:46 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-01 9:37 Bhaskar Chowdhury [this message]
2025-07-01 10:57 ` Christoph Berg
[not found] ` <aGPEPxNkvtK3xRgk@Gentoo>
2025-07-01 21:32 ` Andrew Morton
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250701094603.23933-1-unixbhaskar@gmail.com \
--to=unixbhaskar@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox