int comparemem(const void *a, const void *b)
{
- if (((const struct process *)a)->totalmem > ((const struct process *)b)->totalmem) {
+ if (((const struct process *)a)->rss > ((const struct process *)b)->rss) {
return -1;
- } else if (((const struct process *)a)->totalmem < ((const struct process *)b)->totalmem) {
+ } else if (((const struct process *)a)->rss < ((const struct process *)b)->rss) {
return 1;
} else {
return 0;
processes[j].pid = p[i].ki_pid;
processes[j].name = strndup(p[i].ki_comm, text_buffer_size);
processes[j].amount = 100.0 * p[i].ki_pctcpu / FSCALE;
- processes[j].totalmem = (float) (p[i].ki_rssize /
- (float) total_pages) * 100.0;
processes[j].vsize = p[i].ki_size;
processes[j].rss = (p[i].ki_rssize * getpagesize());
j++;
tmp = malloc(sizeof(struct process));
tmp->pid = processes[i].pid;
tmp->amount = processes[i].amount;
- tmp->totalmem = processes[i].totalmem;
tmp->name = strndup(processes[i].name, text_buffer_size);
tmp->rss = processes[i].rss;
tmp->vsize = processes[i].vsize;
tmp = malloc(sizeof(struct process));
tmp->pid = processes[i].pid;
tmp->amount = processes[i].amount;
- tmp->totalmem = processes[i].totalmem;
tmp->name = strndup(processes[i].name, text_buffer_size);
tmp->rss = processes[i].rss;
tmp->vsize = processes[i].vsize;
#if defined(FREEBSD_DEBUG)
printf("=====\nmem\n");
for (i = 0; i < 10; i++) {
- printf("%d: %s(%d) %.2f %ld %ld\n", i, mem[i]->name,
- mem[i]->pid, mem[i]->totalmem, mem[i]->vsize, mem[i]->rss);
+ printf("%d: %s(%d) %ld %ld\n", i, mem[i]->name,
+ mem[i]->pid, mem[i]->vsize, mem[i]->rss);
}
#endif
int comparemem(const void *a, const void *b)
{
- if (((struct process *) a)->totalmem > ((struct process *) b)->totalmem) {
+ if (((struct process *) a)->rss > ((struct process *) b)->rss) {
return -1;
}
- if (((struct process *) a)->totalmem < ((struct process *) b)->totalmem) {
+ if (((struct process *) a)->rss < ((struct process *) b)->rss) {
return 1;
}
processes[j].pid = p[i].p_pid;
processes[j].name = strndup(p[i].p_comm, text_buffer_size);
processes[j].amount = 100.0 * p[i].p_pctcpu / FSCALE;
- processes[j].totalmem = (float) (p[i].p_vm_rssize /
- (float) total_pages) * 100.0;
j++;
}
}
tmp = malloc(sizeof(struct process));
tmp->pid = processes[i].pid;
tmp->amount = processes[i].amount;
- tmp->totalmem = processes[i].totalmem;
tmp->name = strndup(processes[i].name, text_buffer_size);
ttmp = mem[i];
tmp = malloc(sizeof(struct process));
tmp->pid = processes[i].pid;
tmp->amount = processes[i].amount;
- tmp->totalmem = processes[i].totalmem;
tmp->name = strndup(processes[i].name, text_buffer_size);
ttmp = cpu[i];
* Anyone hoping to port wmtop should look here first. */
static int process_parse_stat(struct process *process)
{
- struct information *cur = &info;
char line[BUFFER_LEN] = { 0 }, filename[BUFFER_LEN], procname[BUFFER_LEN];
int ps;
unsigned long user_time = 0;
process->name = strndup(procname, text_buffer_size);
process->rss *= getpagesize();
- if (!cur->memmax) {
- update_total_processes();
- }
-
process->total_cpu_time = process->user_time + process->kernel_time;
- process->totalmem = (float) (((float) process->rss / cur->memmax) / 10);
if (process->previous_user_time == ULONG_MAX) {
process->previous_user_time = process->user_time;
}
/* mem comparison function for insert_sp_element */
static int compare_mem(struct process *a, struct process *b)
{
- if (a->totalmem < b->totalmem) {
+ if (a->rss < b->rss) {
return 1;
- } else if (a->totalmem > b->totalmem) {
+ } else if (a->rss > b->rss) {
return -1;
} else {
return 0;
needed[td->num]->pid);
break;
case TOP_MEM:
+ /* Calculate a percentage of residential mem from total mem available.
+ * Since rss is bytes and memmax kilobytes, dividing by 10 suffices here. */
snprintf(p, 7, "%6.2f",
- needed[td->num]->totalmem);
+ (float) ((float)needed[td->num]->rss / cur->memmax) / 10);
break;
case TOP_TIME:
timeval = format_time(
unsigned int time_stamp;
unsigned int counted;
unsigned int changed;
- float totalmem;
};
struct sorted_process {