From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 204EEC7EE30 for ; Tue, 1 Jul 2025 09:46:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9D0EE6B0098; Tue, 1 Jul 2025 05:46:48 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 981816B00A7; Tue, 1 Jul 2025 05:46:48 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 897646B00A8; Tue, 1 Jul 2025 05:46:48 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 72E4D6B00A7 for ; Tue, 1 Jul 2025 05:46:48 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 0B6711403B6 for ; Tue, 1 Jul 2025 09:46:48 +0000 (UTC) X-FDA: 83615216496.06.85ACE43 Received: from mail-yb1-f180.google.com (mail-yb1-f180.google.com [209.85.219.180]) by imf27.hostedemail.com (Postfix) with ESMTP id 74B4C4000B for ; Tue, 1 Jul 2025 09:46:46 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=iE55vqeQ; spf=pass (imf27.hostedemail.com: domain of unixbhaskar@gmail.com designates 209.85.219.180 as permitted sender) smtp.mailfrom=unixbhaskar@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751363206; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=adw9AtmAKkR03qobX19/k7gE8iy5Pgo/IUh30/wiTNQ=; b=i2VDzE8SKb5xntXZpCvy3FuGodphokm2lYgSbIexpntPzmt7Z5apDV7jZraVlixQGq1UQK oMIDLDi5EJRs3vGmpVKHDzDzjp7gJNS6ulbQJHgDoVZTxgS5F2uVikRwPyn9nfoKTqPAJz 6xvYpJgzjSr5zZv0IP3+jTNqgiBJglE= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751363206; a=rsa-sha256; cv=none; b=XOtdBceh7HGCkmfhIkiaBG/zP9ZUB750p7ka6RAtQ24K0xNBIfL2lLavlCQUmb/LmdoW1L XD/ddPVFcZ5oDIof+jkj81qy2oB5s8GcYYyKgjdx+/dD7zZkHBv146mzliec9njg1BGZWB GF8/aP38pA5YeK8vFLG2e5Vce0LNgq0= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=iE55vqeQ; spf=pass (imf27.hostedemail.com: domain of unixbhaskar@gmail.com designates 209.85.219.180 as permitted sender) smtp.mailfrom=unixbhaskar@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-yb1-f180.google.com with SMTP id 3f1490d57ef6-e8600a33792so2161734276.0 for ; Tue, 01 Jul 2025 02:46:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751363205; x=1751968005; darn=kvack.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=adw9AtmAKkR03qobX19/k7gE8iy5Pgo/IUh30/wiTNQ=; b=iE55vqeQCT9ja25JZPzDHn1vXPRy5uuyfgO23CtFHo9YPKQFvUdPfpoNe2qc/6YoPn nCxNhGRtJrRRoYA9bZJJ2bSnvTS5spjZf2P0k5QxoGkN6BA3j8Wt3I81+WvjrlHWHWdz 4WvIPwoWvXvXKoOwUsZp6SvenXDW8XfOSCSTJD/C80IGp3ER9jZvGL3FP8w3MOjvVVmp hLWrgpBEq3dZAKBWrcW2GbzI8b7FSJ0z2LczjS+XjYMZ2wR8QNR7UBx6A6/IvaybRuYY tPRxG+LCCIbSa4p1VcZA0a4m+GadPr+w6G6MKdHGKMw5DdZTrELJJ+m/2T00yI9U3QHP r9Zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751363205; x=1751968005; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=adw9AtmAKkR03qobX19/k7gE8iy5Pgo/IUh30/wiTNQ=; b=E9G8Z+yS4oxpRVse6R+nRD/x1Rb2JKjppvUtysIGW3nwEtpXlbrSn4jCmUCVg0SoEK JOPK1igd4u8jEgbViB1nzkixLtSmo5jUsWK/TYNqCIzlx4k4SX74iBG5NmRQj/25iaGA 36WY4OTest9oDIkNHGDo8bv8BjH7Nv7kiVXf+R6dpHbUoCRT3wdskGfXe7wAbzYh2Uih yda4bxmBhN9OafDfxTvwCBhbNce/pDgTRSrE8TpgmcB0hMRmTK5J4SCVnrjj69yEHES2 E5iKoGttQ5kNBPuN1WLnIWgXX2oxZqbLKmQnTUn1OzUWISpR87XjiWuYJeSBisz/3p0W /QkA== X-Forwarded-Encrypted: i=1; AJvYcCWniOR6KQsxyuduo4kfV3XpURlTYem2AWy/yn01frdooKzUcz2akyHNFauraEWqkuUhpVn6fexUPw==@kvack.org X-Gm-Message-State: AOJu0YxUlg9pNfdr35Kbojpj4yevnt7NfIIrXyCqc4jnqkl51mmqsqKh LQEPpUMrNfR1xMbM/KG22oOp9hOolLmQ0q+si9+6UijsYeU2CIB+Q6Gj X-Gm-Gg: ASbGnctm9q3fQKW4h8CoZDO8tkCjaHTs/ZmwNpdJDIpvtzHfEZGBYVvZhwzoFl+JpJd 1ptZ+IwONB0rop7gJnIRgl6YWZ+cLev9IXM7TO9mbXgXGzhBLblUPHflF9PekNWNkPJxqb6+CNl vdFUuD12mcmnlT+BtIJ3NTxdGsqPNJbLhrxrGn5On6hJbCSfr/ywzQyHFACh2uqWA8FEugw9E+D RFwxi6PcYuP0cZggrAs2fzp7AGo4hW9j4CQ1s/DIB0kKfw9TFhmq3v9/Uk4+01E6yracV5MQfP3 ZHxRIt/7rOnxzKT073WUL6BZ66vqnGS5xfSsz2M60ZKgn060h6jJmSr8bAd/FbVPB9D45Rh8 X-Google-Smtp-Source: AGHT+IEZuU9iIlyPaR0v8qouv97qhBTEadqtDJk3Jq6/2x+BT69zQM1/zyy9cye5W8NDl27DEP2Flg== X-Received: by 2002:a05:690c:67ca:b0:70f:7483:5a34 with SMTP id 00721157ae682-715171aba9fmr258427827b3.32.1751363205282; Tue, 01 Jul 2025 02:46:45 -0700 (PDT) Received: from Gentoo.localdomain ([191.96.150.39]) by smtp.gmail.com with ESMTPSA id 00721157ae682-71515cc809dsm19225897b3.113.2025.07.01.02.46.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Jul 2025 02:46:44 -0700 (PDT) From: Bhaskar Chowdhury To: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: Bhaskar Chowdhury 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 Message-ID: <20250701094603.23933-1-unixbhaskar@gmail.com> X-Mailer: git-send-email 2.49.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 74B4C4000B X-Stat-Signature: ioopgd4irja96hjhw6fzezhetdnd9toj X-Rspam-User: X-HE-Tag: 1751363206-330146 X-HE-Meta: U2FsdGVkX1/6g4vsQ4sFshPPl9cAq7JFyd2wP/W38Fef1C/k+R5iRI8eLQ5jzf7e/vDh9CYJIcT+GpnkF5zlYBzu5AO1ygUAGp5K6nC1+DJV7p929f2PDcCxvrHusa6uXR6NWWgmXIcdIVLgN2M7mD3AetDwkeWYgoiMsmN/G3rX4pNxeu+pz+LZWTkpZt00ooaFv8pN4lDnX66/xQmxWPnAkwIhyffQrfnfomLbQ5db+iLKyUy71VpIFz82k/aE89kUUQXLRsYWD4/piqXiTTCxjZcLGhVbUey3uWROOR6rz9OOoVtL6cA8vrW3iK3LNG6y3YmkT7cawj5yZ6Yg4tb2wy1Em9dB+o+8tk0IxqrrjpAMXBx9JkDyQ+DkGzyVbEeJM5qUQ4uqAgzB1WghMxFmlIENt61TsKolb6kF17Z1jIx7tHGKEzvruq/FOrf2r6Z5qQn5+g4sfXgp+AlHF2hQznMHaQrqNR8nYMNRNpPxJfGluPAWh7GCcdeIN1yUNetC24TgI4B5knNMwsvSjlPvxD+Agt9/IQ3Wh9i98YvZSKhFGwY5DmbY2ztQDSYG1CEUWlYZpo/uElzZD3it1BHZoXLP6qoQoZkpBs2e/uXss+LXk2PngJvg5BNOwDwgWYhzM5D+xkUnLyUfC5s2yjLsX+huwRBkxwNtFbQ22/kV5buMBTwgi//YKro/IB2w2B6N3fePzYTP23qjvGux5LSjuKmRa7vdE84fD5Cq2NT2hA+2XtWHbUMhyM4wWf5UghsIIUe3B+95w8GjdFmyQ+vg8AP2EYtBCAp2QaVtfmDGKeCsagLJtAXMm0SG6wKNVY/jQAHFjA743KRuB4k2Yy88bhG7Qf3psz85KXbx689HW+4bkOZ5T1Wj4FwkkQ87Uv+FCcNeXsc2cRKKPmwUw7Pp53PS1w1lx3jv675QU7Hzi5yzvCwG3NMmLBclJZnNzcQ2k83n6g6QpJpEIo9 LMfov6qV L1mtz6YK8J9XENNMyctMhs2sycVHF5Snwj7UCEge05VpggeXTkSfNdlcP3g== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: 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 --- 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