Changes in kernel/generic/src/sysinfo/stats.c [a0ce870:96b02eb9] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/sysinfo/stats.c
ra0ce870 r96b02eb9 170 170 * Note that it may be infinitely better to let the address space 171 171 * management code compute these statistics as it proceeds instead of 172 * having them calculated over and over again here.172 * having them calculated here over and over again here. 173 173 */ 174 174 … … 199 199 } 200 200 201 /** Get the resident (used) size of a virtual address space202 *203 * @param as Address space.204 *205 * @return Size of the resident (used) virtual address space (bytes).206 *207 */208 static size_t get_task_resmem(as_t *as)209 {210 size_t result = 0;211 212 /*213 * We are holding some spinlocks here and therefore are not allowed to214 * block. Only attempt to lock the address space and address space area215 * mutexes conditionally. If it is not possible to lock either object,216 * allow the statistics to be inexact by skipping the respective object.217 *218 * Note that it may be infinitely better to let the address space219 * management code compute these statistics as it proceeds instead of220 * having them calculated over and over again here.221 */222 223 if (SYNCH_FAILED(mutex_trylock(&as->lock)))224 return result * PAGE_SIZE;225 226 /* Walk the B+ tree of AS areas */227 link_t *cur;228 for (cur = as->as_area_btree.leaf_head.next;229 cur != &as->as_area_btree.leaf_head; cur = cur->next) {230 btree_node_t *node =231 list_get_instance(cur, btree_node_t, leaf_link);232 233 unsigned int i;234 for (i = 0; i < node->keys; i++) {235 as_area_t *area = node->value[i];236 237 if (SYNCH_FAILED(mutex_trylock(&area->lock)))238 continue;239 240 /* Walk the B+ tree of resident pages */241 link_t *rcur;242 for (rcur = area->used_space.leaf_head.next;243 rcur != &area->used_space.leaf_head; rcur = rcur->next) {244 btree_node_t *rnode =245 list_get_instance(rcur, btree_node_t, leaf_link);246 247 unsigned int j;248 for (j = 0; j < rnode->keys; j++)249 result += (size_t) rnode->value[i];250 }251 252 mutex_unlock(&area->lock);253 }254 }255 256 mutex_unlock(&as->lock);257 258 return result * PAGE_SIZE;259 }260 261 201 /* Produce task statistics 262 202 * … … 275 215 str_cpy(stats_task->name, TASK_NAME_BUFLEN, task->name); 276 216 stats_task->virtmem = get_task_virtmem(task->as); 277 stats_task->resmem = get_task_resmem(task->as);278 217 stats_task->threads = atomic_get(&task->refcount); 279 218 task_get_accounting(task, &(stats_task->ucycles),
Note:
See TracChangeset
for help on using the changeset viewer.