Sometimes (especially with slower computers with a lot of memory, or
just computers with *a lot* of memory) it can take quite a while until
all the processing is done. Print brief status notes to the user
stating which pid's data we are now processing. This allows the user
to know how far we are going.
Signed-off-by: Timo Kokkonen <kaapeli@itanic.dy.fi>
count = bintree_walk(&pf->tree, &af.ops);
count = bintree_walk(&pf->tree, &af.ops);
for (i = 0; i < KPAGEFLAGS_NUM; i++) {
if (!af.kpageflag[i])
continue;
for (i = 0; i < KPAGEFLAGS_NUM; i++) {
if (!af.kpageflag[i])
continue;
long int swapped, present, unique, total;
long int biggest = 0, second_biggest;
int count, processes = 0;
long int swapped, present, unique, total;
long int biggest = 0, second_biggest;
int count, processes = 0;
/*
* walk through all processes, find the one with most present
* pages
*/
/*
* walk through all processes, find the one with most present
* pages
*/
+ printf("\rAnalyzing pages for process: ");
list_for_each_entry(ps, &process_list->list, list) {
list_for_each_entry(ps, &process_list->list, list) {
+ for (i = 0; i < len; i++)
+ putchar('\b');
+ len = printf("% 5d", ps->pid);
+ fflush(stdout);
+
memset(&af, 0, sizeof(af));
af.ops.callback = count_pages;
af.pid = ps->pid;
memset(&af, 0, sizeof(af));
af.ops.callback = count_pages;
af.pid = ps->pid;
ps->pages_unique = af.pages_unique;
biggest = MAX(biggest, ps->pages_present + ps->pages_swapped);
}
ps->pages_unique = af.pages_unique;
biggest = MAX(biggest, ps->pages_present + ps->pages_swapped);
}
+ for (i = 0; i < len; i++)
+ putchar('\b');
+ printf("Done \n\n");
printf(" RSS swapped USS total pid");
if (opts->with_threads)
printf(" RSS swapped USS total pid");
if (opts->with_threads)
memset(&process_list, 0, sizeof(process_list));
INIT_LIST_HEAD(&process_list.list);
memset(&process_list, 0, sizeof(process_list));
INIT_LIST_HEAD(&process_list.list);
+ printf("Scanning all process IDs\n");
+
if (scan_all_pids(&pf, &process_list, &opts))
return 1;
if (scan_all_pids(&pf, &process_list, &opts))
return 1;
+ printf("Updating kpageflags\n");
+ printf("Preparing to print out results\n");
if (opts.parse_mask & PARSE_DUMP)
dump_process_maps(&pf, &process_list, &opts);
else
if (opts.parse_mask & PARSE_DUMP)
dump_process_maps(&pf, &process_list, &opts);
else
DIR *dir = NULL;
int pid;
int count = 0;
DIR *dir = NULL;
int pid;
int count = 0;
if (is_parse_option(opts, PARSE_PID)) {
list_for_each_entry_safe(pidlist, n, &opts->pidlist, list) {
if (is_parse_option(opts, PARSE_PID)) {
list_for_each_entry_safe(pidlist, n, &opts->pidlist, list) {
if (is_parse_option(opts, PARSE_MAP_NAME) &&
!is_parse_option(opts, PARSE_PID)) {
if (is_parse_option(opts, PARSE_MAP_NAME) &&
!is_parse_option(opts, PARSE_PID)) {
+ printf("Scanning page mappings for process: ");
while (1) {
pid = get_next_pid(&dir);
if (pid <= 0)
break;
while (1) {
pid = get_next_pid(&dir);
if (pid <= 0)
break;
+
+ for (i = 0; i < len; i++)
+ putchar('\b');
+ len = printf("% 5d", pid);
+ fflush(stdout);
+
read_pageframe_with_threads(pid, pf, process_list,
opts);
}
read_pageframe_with_threads(pid, pf, process_list,
opts);
}
+
+ for (i = 0; i < len; i++)
+ putchar('\b');
+ printf("Done \n");
+ len = 0;
}
/* Do not add new pages in the tree after the initial scan */
opts->parse_mask |= PARSE_NOADD_TREE;
}
/* Do not add new pages in the tree after the initial scan */
opts->parse_mask |= PARSE_NOADD_TREE;
+ printf("Scanning page mappings for process: ");
while (1) {
pid = get_next_pid(&dir);
if (pid <= 0)
break;
while (1) {
pid = get_next_pid(&dir);
if (pid <= 0)
break;
+
+ for (i = 0; i < len; i++)
+ putchar('\b');
+ len = printf("% 5d", pid);
+ fflush(stdout);
+
read_pageframe_with_threads(pid, pf, process_list, opts);
}
read_pageframe_with_threads(pid, pf, process_list, opts);
}
+ for (i = 0; i < len; i++)
+ putchar('\b');
+ printf("Done \n");