From: Audra Mitchell <audra@redhat.com>
To: linux-mm@kvack.org
Cc: raquini@redhat.com, akpm@linux-foundation.org, djakov@kernel.org,
vbabka@suse.cz, linux-kernel@vger.kernel.org
Subject: [PATCH 4/5] tools/mm: Fix the default case for page_owner_sort
Date: Fri, 13 Oct 2023 15:03:48 -0400 [thread overview]
Message-ID: <20231013190350.579407-5-audra@redhat.com> (raw)
In-Reply-To: <20231013190350.579407-1-audra@redhat.com>
With the additional commands and timestamps added to the tool, the default
case (-t) has been broken. Now that the allocation timestamps are saved
outside of the txt field, allow us to properly sort the data by number of
times the record has been seen. Furthermore prevent the misuse of the
commandline arguments so only one compare option can be used.
Signed-off-by: Audra Mitchell <audra@redhat.com>
---
tools/mm/page_owner_sort.c | 61 +++++++++++++++++++++++++++++++++-----
1 file changed, 53 insertions(+), 8 deletions(-)
diff --git a/tools/mm/page_owner_sort.c b/tools/mm/page_owner_sort.c
index 7ddabcb3a073..5a260096ebaa 100644
--- a/tools/mm/page_owner_sort.c
+++ b/tools/mm/page_owner_sort.c
@@ -66,6 +66,16 @@ enum SORT_ORDER {
SORT_ASC = 1,
SORT_DESC = -1,
};
+enum COMP_FLAG {
+ COMP_NO_FLAG = 0,
+ COMP_ALLOC = 1<<0,
+ COMP_PAGE_NUM = 1<<1,
+ COMP_PID = 1<<2,
+ COMP_STACK = 1<<3,
+ COMP_NUM = 1<<4,
+ COMP_TGID = 1<<5,
+ COMP_COMM = 1<<6
+};
struct filter_condition {
pid_t *pids;
pid_t *tgids;
@@ -644,7 +654,7 @@ int main(int argc, char **argv)
{
FILE *fin, *fout;
char *buf, *ext_buf;
- int i, count;
+ int i, count, compare_flag;
struct stat st;
int opt;
struct option longopts[] = {
@@ -656,31 +666,33 @@ int main(int argc, char **argv)
{ 0, 0, 0, 0},
};
+ compare_flag = COMP_NO_FLAG;
+
while ((opt = getopt_long(argc, argv, "admnpstP", longopts, NULL)) != -1)
switch (opt) {
case 'a':
- set_single_cmp(compare_ts, SORT_ASC);
+ compare_flag |= COMP_ALLOC;
break;
case 'd':
debug_on = true;
break;
case 'm':
- set_single_cmp(compare_page_num, SORT_DESC);
+ compare_flag |= COMP_PAGE_NUM;
break;
case 'p':
- set_single_cmp(compare_pid, SORT_ASC);
+ compare_flag |= COMP_PID;
break;
case 's':
- set_single_cmp(compare_stacktrace, SORT_ASC);
+ compare_flag |= COMP_STACK;
break;
case 't':
- set_single_cmp(compare_num, SORT_DESC);
+ compare_flag |= COMP_NUM;
break;
case 'P':
- set_single_cmp(compare_tgid, SORT_ASC);
+ compare_flag |= COMP_TGID;
break;
case 'n':
- set_single_cmp(compare_comm, SORT_ASC);
+ compare_flag |= COMP_COMM;
break;
case 1:
filter = filter | FILTER_PID;
@@ -728,6 +740,39 @@ int main(int argc, char **argv)
exit(1);
}
+ /* Only one compare option is allowed, yet we also want handle the
+ * default case were no option is provided, but we still want to
+ * match the behavior of the -t option (compare by number of times
+ * a record is seen
+ */
+ switch (compare_flag) {
+ case COMP_ALLOC:
+ set_single_cmp(compare_ts, SORT_ASC);
+ break;
+ case COMP_PAGE_NUM:
+ set_single_cmp(compare_page_num, SORT_DESC);
+ break;
+ case COMP_PID:
+ set_single_cmp(compare_pid, SORT_ASC);
+ break;
+ case COMP_STACK:
+ set_single_cmp(compare_stacktrace, SORT_ASC);
+ break;
+ case COMP_NO_FLAG:
+ case COMP_NUM:
+ set_single_cmp(compare_num, SORT_DESC);
+ break;
+ case COMP_TGID:
+ set_single_cmp(compare_tgid, SORT_ASC);
+ break;
+ case COMP_COMM:
+ set_single_cmp(compare_comm, SORT_ASC);
+ break;
+ default:
+ usage();
+ exit(1);
+ }
+
fin = fopen(argv[optind], "r");
fout = fopen(argv[optind + 1], "w");
if (!fin || !fout) {
--
2.41.0
next prev parent reply other threads:[~2023-10-13 19:05 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-13 19:03 [PATCH 0/5] Fix page_owner's use of free timestamps Audra Mitchell
2023-10-13 19:03 ` [PATCH 1/5] mm/page_owner: Remove free_ts from page_owner output Audra Mitchell
2023-10-17 8:07 ` Vlastimil Babka
2023-10-13 19:03 ` [PATCH 2/5] tools/mm: Remove references to free_ts from page_owner_sort Audra Mitchell
2023-10-17 8:10 ` Vlastimil Babka
2023-10-13 19:03 ` [PATCH 3/5] tools/mm: Filter out timestamps for correct collation Audra Mitchell
2023-10-17 8:12 ` Vlastimil Babka
2023-10-13 19:03 ` Audra Mitchell [this message]
2023-10-17 8:13 ` [PATCH 4/5] tools/mm: Fix the default case for page_owner_sort Vlastimil Babka
2023-10-13 19:03 ` [PATCH 5/5] tools/mm: Update the usage output to be more organized Audra Mitchell
2023-10-17 8:13 ` Vlastimil Babka
2023-10-16 11:55 ` [PATCH 0/5] Fix page_owner's use of free timestamps Rafael Aquini
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=20231013190350.579407-5-audra@redhat.com \
--to=audra@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=djakov@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=raquini@redhat.com \
--cc=vbabka@suse.cz \
/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