Skip to content

Commit

Permalink
tools/vm/page_owner_sort.c: support sorting by stack trace
Browse files Browse the repository at this point in the history
This adds the ability to sort by stacktraces.  This is helpful when
comparing multiple dumps of page_owner taken at different times, since
blocks will not be reordered if they were allocated/free'd.

Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: Sean Anderson <[email protected]>
Cc: Zhenliang Wei <[email protected]>
Cc: Changhee Han <[email protected]>
Cc: Tang Bin <[email protected]>
Cc: Zhang Shengju <[email protected]>
Cc: Stephen Rothwell <[email protected]>
Cc: Yinan Zhang <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Forty-Bot authored and torvalds committed Mar 25, 2022
1 parent ba5a396 commit 82f5ebc
Showing 1 changed file with 14 additions and 9 deletions.
23 changes: 14 additions & 9 deletions tools/vm/page_owner_sort.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ struct block_list {
int page_num;
};

static int sort_by_memory;
static regex_t order_pattern;
static struct block_list *list;
static int list_size;
Expand Down Expand Up @@ -134,13 +133,16 @@ static void add_list(char *buf, int len)

static void usage(void)
{
printf("Usage: ./page_owner_sort [-m] <input> <output>\n"
"-m Sort by total memory. If this option is unset, sort by times\n"
printf("Usage: ./page_owner_sort [OPTIONS] <input> <output>\n"
"-m Sort by total memory.\n"
"-s Sort by the stack trace.\n"
"-t Sort by times (default).\n"
);
}

int main(int argc, char **argv)
{
int (*cmp)(const void *, const void *) = compare_num;
FILE *fin, *fout;
char *buf;
int ret, i, count;
Expand All @@ -149,10 +151,16 @@ int main(int argc, char **argv)
int err;
int opt;

while ((opt = getopt(argc, argv, "m")) != -1)
while ((opt = getopt(argc, argv, "mst")) != -1)
switch (opt) {
case 'm':
sort_by_memory = 1;
cmp = compare_page_num;
break;
case 's':
cmp = compare_stacktrace;
break;
case 't':
cmp = compare_num;
break;
default:
usage();
Expand Down Expand Up @@ -221,10 +229,7 @@ int main(int argc, char **argv)
}
}

if (sort_by_memory)
qsort(list2, count, sizeof(list[0]), compare_page_num);
else
qsort(list2, count, sizeof(list[0]), compare_num);
qsort(list2, count, sizeof(list[0]), cmp);

for (i = 0; i < count; i++)
fprintf(fout, "%d times, %d pages:\n%s\n",
Expand Down

0 comments on commit 82f5ebc

Please sign in to comment.