Changeset 88dea9d in mainline for kernel/generic/src/proc
- Timestamp:
- 2010-04-17T16:28:49Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 30a5470
- Parents:
- 5ba201d (diff), 95319bd (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- kernel/generic/src/proc
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/proc/scheduler.c
r5ba201d r88dea9d 202 202 */ 203 203 204 spinlock_lock(&CPU->lock); 205 CPU->idle = true; 206 spinlock_unlock(&CPU->lock); 204 207 cpu_sleep(); 205 208 goto loop; … … 313 316 spinlock_lock(&THREAD->lock); 314 317 315 /* Update thread accounting */316 THREAD-> cycles += get_cycle() - THREAD->last_cycle;318 /* Update thread kernel accounting */ 319 THREAD->kcycles += get_cycle() - THREAD->last_cycle; 317 320 318 321 #ifndef CONFIG_FPU_LAZY -
kernel/generic/src/proc/task.c
r5ba201d r88dea9d 186 186 ta->context = CONTEXT; 187 187 ta->capabilities = 0; 188 ta->cycles = 0; 189 188 ta->ucycles = 0; 189 ta->kcycles = 0; 190 191 ta->ipc_info.call_sent = 0; 192 ta->ipc_info.call_recieved = 0; 193 ta->ipc_info.answer_sent = 0; 194 ta->ipc_info.answer_recieved = 0; 195 ta->ipc_info.irq_notif_recieved = 0; 196 ta->ipc_info.forwarded = 0; 197 190 198 #ifdef CONFIG_UDEBUG 191 199 /* Init debugging stuff */ … … 324 332 * already disabled. 325 333 * 326 * @param t Pointer to task.327 * 328 * @ return Number of cycles used by the task and all its threads329 * so far.330 * 331 */ 332 uint64_t task_get_accounting(task_t *t) 333 { 334 /* Accumulated value of task */335 uint64_t ret = t->cycles;334 * @param t Pointer to thread. 335 * @param ucycles Out pointer to sum of all user cycles. 336 * @param kcycles Out pointer to sum of all kernel cycles. 337 * 338 */ 339 void task_get_accounting(task_t *t, uint64_t *ucycles, uint64_t *kcycles) 340 { 341 /* Accumulated values of task */ 342 uint64_t uret = t->ucycles; 343 uint64_t kret = t->kcycles; 336 344 337 345 /* Current values of threads */ … … 345 353 if (thr == THREAD) { 346 354 /* Update accounting of current thread */ 347 thread_update_accounting( );355 thread_update_accounting(false); 348 356 } 349 ret += thr->cycles; 357 uret += thr->ucycles; 358 kret += thr->kcycles; 350 359 } 351 360 spinlock_unlock(&thr->lock); 352 361 } 353 362 354 return ret; 363 *ucycles = uret; 364 *kcycles = kret; 355 365 } 356 366 … … 419 429 spinlock_lock(&t->lock); 420 430 421 uint64_t cycles; 422 char suffix; 423 order(task_get_accounting(t), &cycles, &suffix); 424 425 #ifdef __32_BITS__ 426 printf("%-6" PRIu64 " %-12s %-3" PRIu32 " %10p %10p %9" PRIu64 427 "%c %7ld %6ld", t->taskid, t->name, t->context, t, t->as, cycles, 428 suffix, atomic_get(&t->refcount), atomic_get(&t->active_calls)); 431 uint64_t ucycles; 432 uint64_t kcycles; 433 char usuffix, ksuffix; 434 task_get_accounting(t, &ucycles, &kcycles); 435 order(ucycles, &ucycles, &usuffix); 436 order(kcycles, &kcycles, &ksuffix); 437 438 #ifdef __32_BITS__ 439 printf("%-6" PRIu64 " %-12s %-3" PRIu32 " %10p %10p %9" PRIu64 "%c %9" 440 PRIu64 "%c %7ld %6ld", t->taskid, t->name, t->context, t, t->as, 441 ucycles, usuffix, kcycles, ksuffix, atomic_get(&t->refcount), 442 atomic_get(&t->active_calls)); 429 443 #endif 430 444 431 445 #ifdef __64_BITS__ 432 printf("%-6" PRIu64 " %-12s %-3" PRIu32 " %18p %18p %9" PRIu64 433 "%c %7ld %6ld", t->taskid, t->name, t->context, t, t->as, cycles, 434 suffix, atomic_get(&t->refcount), atomic_get(&t->active_calls)); 446 printf("%-6" PRIu64 " %-12s %-3" PRIu32 " %18p %18p %9" PRIu64 "%c %9" 447 PRIu64 "%c %7ld %6ld", t->taskid, t->name, t->context, t, t->as, 448 ucycles, usuffix, kcycles, ksuffix, atomic_get(&t->refcount), 449 atomic_get(&t->active_calls)); 435 450 #endif 436 451 … … 455 470 456 471 #ifdef __32_BITS__ 457 printf("taskid name ctx address as 458 " cyclesthreads calls callee\n");459 printf("------ ------------ --- ---------- ---------- 460 " ---------- ------- ------ ------>\n");472 printf("taskid name ctx address as " 473 " ucycles kcycles threads calls callee\n"); 474 printf("------ ------------ --- ---------- ----------" 475 " ---------- ---------- ------- ------ ------>\n"); 461 476 #endif 462 477 463 478 #ifdef __64_BITS__ 464 printf("taskid name ctx address as 465 " cyclesthreads calls callee\n");466 printf("------ ------------ --- ------------------ ------------------ 467 " ---------- ------- ------ ------>\n");479 printf("taskid name ctx address as " 480 " ucycles kcycles threads calls callee\n"); 481 printf("------ ------------ --- ------------------ ------------------" 482 " ---------- ---------- ---------- ------- ------ ------>\n"); 468 483 #endif 469 484 -
kernel/generic/src/proc/thread.c
r5ba201d r88dea9d 132 132 spinlock_lock(&THREAD->lock); 133 133 if (!THREAD->uncounted) { 134 thread_update_accounting(); 135 uint64_t cycles = THREAD->cycles; 136 THREAD->cycles = 0; 134 thread_update_accounting(true); 135 uint64_t ucycles = THREAD->ucycles; 136 THREAD->ucycles = 0; 137 uint64_t kcycles = THREAD->kcycles; 138 THREAD->kcycles = 0; 139 137 140 spinlock_unlock(&THREAD->lock); 138 141 139 142 spinlock_lock(&TASK->lock); 140 TASK->cycles += cycles; 143 TASK->ucycles += ucycles; 144 TASK->kcycles += kcycles; 141 145 spinlock_unlock(&TASK->lock); 142 146 } else … … 323 327 t->thread_arg = arg; 324 328 t->ticks = -1; 325 t->cycles = 0; 329 t->ucycles = 0; 330 t->kcycles = 0; 326 331 t->uncounted = uncounted; 327 332 t->priority = -1; /* start in rq[0] */ … … 614 619 thread_t *t = avltree_get_instance(node, thread_t, threads_tree_node); 615 620 616 uint64_t cycles; 617 char suffix; 618 order(t->cycles, &cycles, &suffix); 621 uint64_t ucycles, kcycles; 622 char usuffix, ksuffix; 623 order(t->ucycles, &ucycles, &usuffix); 624 order(t->kcycles, &kcycles, &ksuffix); 619 625 620 626 #ifdef __32_BITS__ 621 printf("%-6" PRIu64" %-10s %10p %-8s %10p %-3" PRIu32 " %10p %10p %9" PRIu64 "%c ", 622 t->tid, t->name, t, thread_states[t->state], t->task, 623 t->task->context, t->thread_code, t->kstack, cycles, suffix); 627 printf("%-6" PRIu64" %-10s %10p %-8s %10p %-3" PRIu32 " %10p %10p %9" 628 PRIu64 "%c %9" PRIu64 "%c ", t->tid, t->name, t, 629 thread_states[t->state], t->task, t->task->context, t->thread_code, 630 t->kstack, ucycles, usuffix, kcycles, ksuffix); 624 631 #endif 625 632 626 633 #ifdef __64_BITS__ 627 printf("%-6" PRIu64" %-10s %18p %-8s %18p %-3" PRIu32 " %18p %18p %9" PRIu64 "%c ", 628 t->tid, t->name, t, thread_states[t->state], t->task, 629 t->task->context, t->thread_code, t->kstack, cycles, suffix); 634 printf("%-6" PRIu64" %-10s %18p %-8s %18p %-3" PRIu32 " %18p %18p %9" 635 PRIu64 "%c %9" PRIu64 "%c ", t->tid, t->name, t, 636 thread_states[t->state], t->task, t->task->context, t->thread_code, 637 t->kstack, ucycles, usuffix, kcycles, ksuffix); 630 638 #endif 631 639 … … 661 669 #ifdef __32_BITS__ 662 670 printf("tid name address state task " 663 "ctx code stack cyclescpu "671 "ctx code stack ucycles kcycles cpu " 664 672 "waitqueue\n"); 665 673 printf("------ ---------- ---------- -------- ---------- " 666 "--- ---------- ---------- ---------- ---- "674 "--- ---------- ---------- ---------- ---------- ---- " 667 675 "----------\n"); 668 676 #endif … … 670 678 #ifdef __64_BITS__ 671 679 printf("tid name address state task " 672 "ctx code stack cyclescpu "680 "ctx code stack ucycles kcycles cpu " 673 681 "waitqueue\n"); 674 682 printf("------ ---------- ------------------ -------- ------------------ " 675 "--- ------------------ ------------------ ---------- ---- "683 "--- ------------------ ------------------ ---------- ---------- ---- " 676 684 "------------------\n"); 677 685 #endif … … 706 714 * interrupts must be already disabled. 707 715 * 708 */ 709 void thread_update_accounting(void) 716 * @param user True to update user accounting, false for kernel. 717 */ 718 void thread_update_accounting(bool user) 710 719 { 711 720 uint64_t time = get_cycle(); 712 THREAD->cycles += time - THREAD->last_cycle; 721 if (user) { 722 THREAD->ucycles += time - THREAD->last_cycle; 723 } else { 724 THREAD->kcycles += time - THREAD->last_cycle; 725 } 713 726 THREAD->last_cycle = time; 714 727 }
Note:
See TracChangeset
for help on using the changeset viewer.