[Crash-utility] [PATCH] Extensions: swap_usage: Add thread group leader support
Dave Anderson
anderson at redhat.com
Thu Feb 20 18:59:09 UTC 2014
Posted to the extensions page:
http://people.redhat.com/anderson/extensions.html#PSWAP
Thanks,
Dave
----- Original Message -----
> Provide the -G option to display the swap consumption
> of the thread group leader in a thread group.
>
> For example:
>
> crash> pswap -k -G | head
> PID SWAP COMM
> 1 136k systemd
> 469 284k zsh
> 599 148k systemd-journal
> 608 1192k lvmetad
> 637 1712k systemd-udevd
> 822 308k auditd
> 836 104k audispd
> 838 156k sedispatch
> 842 92k alsactl
>
> The complete file can be found here:
>
> http://people.redhat.com/~atomlin/crash/extensions/swap_usage.c
>
> Signed-off-by: Aaron Tomlin <atomlin at redhat.com>
> ---
> extensions/swap_usage.c | 70
> ++++++++++++++++++++++++++++++++++++++++++-------
> 1 file changed, 60 insertions(+), 10 deletions(-)
>
> diff --git a/extensions/swap_usage.c b/extensions/swap_usage.c
> index 4f92e8c..d9467ca 100644
> --- a/extensions/swap_usage.c
> +++ b/extensions/swap_usage.c
> @@ -19,6 +19,7 @@
> #include "defs.h"
>
> #define DISPLAY_KB (0x2)
> +#define DISPLAY_TG (0x4)
>
> #ifdef ARM
> #define _PAGE_FILE (1 << 2)
> @@ -138,8 +139,8 @@ show_swap_usage(struct task_context *tc, ulong exists,
> ulong flag)
> if (flag & DISPLAY_KB)
> swap_usage <<= (PAGESHIFT()-10);
>
> - fprintf(fp, "%5ld %5ld%s%5s\n",
> - tc->pid, swap_usage, (flag & DISPLAY_KB) ? "k\t" : "\t", tc->comm);
> + fprintf(fp, "%3ld %6ld%s%5s\n", tc->pid, swap_usage,
> + (flag & DISPLAY_KB) ? "k\t" : "\t", tc->comm);
> }
>
>
> @@ -151,6 +152,7 @@ cmd_pswap(void)
> int c;
> ulong value;
> ulong flag = 0;
> + ulong tgid;
> int subsequent = 0;
> ulong exists = MEMBER_NOT_FOUND;
>
> @@ -159,11 +161,14 @@ cmd_pswap(void)
> exists = MEMBER_FOUND;
> }
>
> - while ((c = getopt(argcnt, args, "k")) != EOF) {
> + while ((c = getopt(argcnt, args, "kG")) != EOF) {
> switch (c) {
> case 'k':
> flag |= DISPLAY_KB;
> break;
> + case 'G':
> + flag |= DISPLAY_TG;
> + break;
> default:
> argerrs++;
> break;
> @@ -177,9 +182,16 @@ cmd_pswap(void)
> PRINT_HEADER();
> tc = FIRST_CONTEXT();
> for (i = 0; i < RUNNING_TASKS(); i++, tc++) {
> - if (!is_kernel_thread(tc->task))
> - show_swap_usage(tc, exists, flag);
> - }
> + if (!is_kernel_thread(tc->task)) {
> + if (flag & DISPLAY_TG) {
> + tgid = task_tgid(tc->task);
> + if (tc->pid != tgid)
> + continue;
> + tc = tgid_to_context(tgid);
> + }
> + show_swap_usage(tc, exists, flag);
> + }
> + }
> return;
> }
>
> @@ -189,6 +201,12 @@ cmd_pswap(void)
> case STR_PID:
> for (tc = pid_to_context(value); tc; tc = tc->tc_next) {
> if (!is_kernel_thread(tc->task)) {
> + if (flag & DISPLAY_TG) {
> + tgid = task_tgid(tc->task);
> + if (tc->pid != tgid)
> + continue;
> + tc = tgid_to_context(tgid);
> + }
> show_swap_usage(tc, exists, flag);
> } else {
> error(INFO, "only specify a user task or pid: %s\n",
> @@ -200,6 +218,12 @@ cmd_pswap(void)
> case STR_TASK:
> for (; tc; tc = tc->tc_next) {
> if (!is_kernel_thread(tc->task)) {
> + if (flag & DISPLAY_TG) {
> + tgid = task_tgid(tc->task);
> + if (tc->pid != tgid)
> + continue;
> + tc = tgid_to_context(tgid);
> + }
> show_swap_usage(tc, exists, flag);
> } else {
> error(INFO, "only specify a user task or pid: %s\n",
> @@ -222,19 +246,45 @@ cmd_pswap(void)
> char *help_pswap[] = {
> "pswap",
> "Returns the actual swap consumption of a user process",
> - "[-k] [pid | taskp]",
> + "[-k -G] [pid | taskp]",
>
> " This command obtains the swap consumption (in pages) of a user
> process.",
> - " The -k option can be used to print in kilobytes.\n"
> + " The process list may be restricted with the following options:\n",
> + " -k print in kilobytes.\n"
> + " -G show only the thread group leader in a thread group.\n"
> + " ",
> " If no arguments are specified, every user process will be checked.",
> " Supported on ARM, X86, X86_64, ALPHA, IA64 and S390 only.",
> "\nEXAMPLE",
> " Show the swap consumption for pid 1232, 1353 and 2275:\n",
> " crash> pswap 1232 1353 2275",
> - " PID SWAP COMM",
> + " PID SWAP COMM",
> " 1232 34 auditd",
> " 1353 526 vi",
> " 2275 30237 gnome-shell",
> - " crash>",
> + " crash>",
> + " ",
> + " Show the swap consumption for thread group leaders only:\n",
> + " crash> pswap -G",
> + " PID SWAP COMM",
> + " 469 71 zsh",
> + " 599 37 systemd-journal",
> + " 608 298 lvmetad",
> + " 637 428 systemd-udevd",
> + " 822 77 auditd",
> + " 836 26 audispd",
> + " 838 39 sedispatch",
> + " 842 23 alsactl",
> + " 844 44 bluetoothd",
> + " 851 46 rtkit-daemon",
> + " 852 59 accounts-daemon",
> + " 855 23 avahi-daemon",
> + " 857 96 rsyslogd",
> + " 858 179 restorecond",
> + " 859 144 smartd",
> + " 862 33 irqbalance",
> + " 867 41 systemd-logind",
> + " 868 37 dbus-daemon",
> + " crash>",
> NULL
> };
> --
> 1.8.5.3
>
> --
> Crash-utility mailing list
> Crash-utility at redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility
>
More information about the Crash-utility
mailing list