biggest = MAX(biggest, ps->pages_present + ps->pages_swapped);
}
- printf(" in ram swapped total pid");
+ printf(" in ram swapped total pid");
if (opts->with_threads)
printf(" tid");
printf(" name\n");
if (total == 0)
continue;
- printf("%6lld %sB %6lld %sB %6lld %sB %5d ",
+ printf("%5lld %sB %5lld %sB %5lld %sB %5d ",
PAGE_TO_NICE(present), PAGE_TO_NICE_UNIT(present),
PAGE_TO_NICE(swapped), PAGE_TO_NICE_UNIT(swapped),
PAGE_TO_NICE(total), PAGE_TO_NICE_UNIT(total),
printf("Total %d processes\n", processes);
}
+
+static void _dump_process_maps(struct process *ps)
+{
+ struct maps *map;
+ long int swapped, present, total;
+ long int biggest = 0, second_biggest;
+ int count, processes = 0;
+
+ list_for_each_entry(map, &ps->maps->list, list) {
+ biggest = MAX(biggest, map->pages_present + map->pages_swapped);
+ }
+
+ printf("process: [%d] %s\n", ps->pid, ps->name);
+ printf(" size in ram swapped total name\n");
+restart:
+ second_biggest = 0;
+ count = 0;
+ list_for_each_entry(map, &ps->maps->list, list) {
+
+ present = map->pages_present;
+ swapped = map->pages_swapped;
+ total = present + swapped;
+
+ second_biggest = (total < biggest) &&
+ (second_biggest < total) ?
+ total : second_biggest;
+
+ if (total != biggest)
+ continue;
+
+ printf("%5lld %sB %5lld %sB %5lld %sB %5lld %sB %s\n",
+ NICE_DIV(map->size), NICE_UNIT(map->size),
+ PAGE_TO_NICE(present), PAGE_TO_NICE_UNIT(present),
+ PAGE_TO_NICE(swapped), PAGE_TO_NICE_UNIT(swapped),
+ PAGE_TO_NICE(total), PAGE_TO_NICE_UNIT(total),
+ map->name);
+
+ count++;
+ processes++;
+ }
+
+ if (count > 0 && biggest > 0) {
+ biggest = second_biggest;
+ goto restart;
+ }
+ printf("\n");
+}
+
+void dump_process_maps(struct process *process_list)
+{
+ struct process *ps;
+
+ if (list_empty(&process_list->list))
+ _dump_process_maps(process_list);
+
+ list_for_each_entry(ps, &process_list->list, list) {
+ _dump_process_maps(ps);
+ }
+}