# HG changeset patch # User yutaka@localhost.localdomain # Date 1289192543 -32400 # Node ID 19a57960c4367635656d73c4009734e1f77e794d # Parent 5245cf19775d8577d680fc424607e3a444429e8b add task list mail time profile. diff -r 5245cf19775d -r 19a57960c436 TaskManager/Cell/spe/CellDmaManager.cc --- a/TaskManager/Cell/spe/CellDmaManager.cc Sun Nov 07 22:18:41 2010 +0900 +++ b/TaskManager/Cell/spe/CellDmaManager.cc Mon Nov 08 14:02:23 2010 +0900 @@ -88,6 +88,7 @@ void CellDmaManager::mail_write_queue(memaddr data) { (this->*start_dmawait_profile)(); + if (0 != spu_readchcnt(SPU_WrOutMbox)) { if (mail_queue->count()) { spu_write_out_mbox((uint32)data); @@ -122,21 +123,46 @@ spu_write_out_mbox((uint32)data); (this->*end_dmawait_profile)(&global_mail_time); + + } memaddr CellDmaManager::mail_read() { + + (this->*start_dmawait_profile)(); memaddr data = (memaddr)spu_read_in_mbox(); + #if 0 if (ABIBIT>32) { data += (spu_read_in_mbox()<<32); } #endif (this->*end_dmawait_profile)(&global_mail_time); + + + return data; } +memaddr CellDmaManager::task_list_mail_read() +{ + + unsigned long long wait = 0; + + (this->*start_dmawait_profile)(); + memaddr data = (memaddr)spu_read_in_mbox(); + (this->*end_dmawait_profile)(&wait); + + task_list_mail_time += wait; + global_mail_time += wait; + + return data; +} + + + void CellDmaManager::dma_loadList(ListDataPtr list, void *buff, uint32 mask) { mfc_getl(buff, 0, list->element, sizeof(mfc_list_element_t)*list->length, @@ -163,6 +189,7 @@ global_mail_time = 0; global_wait_time = 0; task_array_load_time = 0; + task_list_mail_time = 0; start_dmawait_profile = &CellDmaManager::do_start_dmawait_profile; end_dmawait_profile = &CellDmaManager::do_end_dmawait_profile; @@ -183,8 +210,10 @@ void CellDmaManager::do_start_dmawait_profile() { + wait_time = spu_readch(SPU_RdDec); global_busy_time += busy_time - wait_time; + spu_writech(SPU_WrDec, 0xffffffff); // Measurement of mainMem_alloc @@ -225,11 +254,13 @@ s->printf("spu%d: busy_time = %lld" " wait_time = %lld(%.3g%%), " " mail_time = %lld(%.3g%%), " - " busy_ratio = %.3g%%" - " array_load_time = %lld\n" + " task_list_mail_time = %lld, " + " busy_ratio = %.3g%%, " + " array_load_time = %lld, " " mainMem_alloc_time = %lld\n" ,cpu, global_busy_time, - global_wait_time, d, global_mail_time, m, r, + global_wait_time, d, global_mail_time, m, + task_list_mail_time, r, task_array_load_time, mainMemalloc_time); @@ -237,6 +268,7 @@ global_mail_time = 0; global_wait_time = 0; task_array_load_time = 0; + task_list_mail_time = 0; mainMemalloc_time = 0; alloc_flag = 0; } diff -r 5245cf19775d -r 19a57960c436 TaskManager/Cell/spe/CellDmaManager.h --- a/TaskManager/Cell/spe/CellDmaManager.h Sun Nov 07 22:18:41 2010 +0900 +++ b/TaskManager/Cell/spe/CellDmaManager.h Mon Nov 08 14:02:23 2010 +0900 @@ -29,6 +29,7 @@ unsigned int wait_time, busy_time, alloc_busy_time; unsigned long long global_busy_time, global_wait_time, global_mail_time, mainMemalloc_time; unsigned long long task_array_load_time; + unsigned long long task_list_mail_time; /* functions */ void dma_load(void *buf, memaddr addr, uint32 size, uint32 mask); @@ -47,6 +48,7 @@ void mail_write_queue(memaddr data); void mail_write_finish_list(memaddr data); memaddr mail_read(); + memaddr task_list_mail_read(); void dma_loadList(ListDataPtr list, void *buff, uint32 mask); void dma_storeList(ListDataPtr, void *buff, uint32 mask); diff -r 5245cf19775d -r 19a57960c436 TaskManager/Fifo/FifoDmaManager.h --- a/TaskManager/Fifo/FifoDmaManager.h Sun Nov 07 22:18:41 2010 +0900 +++ b/TaskManager/Fifo/FifoDmaManager.h Mon Nov 08 14:02:23 2010 +0900 @@ -34,6 +34,7 @@ void mail_write_queue(memaddr data) { mail_queue1->send(data); } void mail_write_finish_list(memaddr data) { mail_queue1->send(data); } memaddr mail_read() { return mail_queue2->recv(); } + memaddr task_list_mail_read() { return mail_queue2->recv(); } void mail_write_from_host(memaddr data) { mail_queue2->send(data); } memaddr mail_read_from_host() { return mail_queue1->recv(); } diff -r 5245cf19775d -r 19a57960c436 TaskManager/kernel/schedule/DmaManager.h --- a/TaskManager/kernel/schedule/DmaManager.h Sun Nov 07 22:18:41 2010 +0900 +++ b/TaskManager/kernel/schedule/DmaManager.h Mon Nov 08 14:02:23 2010 +0900 @@ -35,6 +35,7 @@ virtual void mail_write_queue(memaddr data) {} virtual void mail_write_finish_list(memaddr data) {} virtual memaddr mail_read() { return 0; } + virtual memaddr task_list_mail_read() { return 0; } // API for MFC list DMA transfer virtual void dma_loadList(ListDataPtr list, void *,uint32 mask) {} diff -r 5245cf19775d -r 19a57960c436 TaskManager/kernel/schedule/SchedMail.cc --- a/TaskManager/kernel/schedule/SchedMail.cc Sun Nov 07 22:18:41 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedMail.cc Mon Nov 08 14:02:23 2010 +0900 @@ -7,7 +7,8 @@ SchedMail::next(Scheduler *scheduler, SchedTaskBase *p) { - params_addr = scheduler->mail_read(); + //params_addr = scheduler->mail_read(); + params_addr = scheduler->task_list_mail_read(); __debug("[SchedMail:%s]\n", __FUNCTION__); diff -r 5245cf19775d -r 19a57960c436 TaskManager/kernel/schedule/Scheduler.cc --- a/TaskManager/kernel/schedule/Scheduler.cc Sun Nov 07 22:18:41 2010 +0900 +++ b/TaskManager/kernel/schedule/Scheduler.cc Mon Nov 08 14:02:23 2010 +0900 @@ -174,6 +174,12 @@ return connector->mail_read(); } +memaddr +Scheduler::task_list_mail_read() +{ + return connector->task_list_mail_read(); +} + /* diff -r 5245cf19775d -r 19a57960c436 TaskManager/kernel/schedule/Scheduler.h --- a/TaskManager/kernel/schedule/Scheduler.h Sun Nov 07 22:18:41 2010 +0900 +++ b/TaskManager/kernel/schedule/Scheduler.h Mon Nov 08 14:02:23 2010 +0900 @@ -126,6 +126,7 @@ void mail_write_queue(memaddr data); void mail_write_finish_list(memaddr data); memaddr mail_read(); + memaddr task_list_mail_read(); void dma_loadList(ListDataPtr list, void *, uint32 mask); void dma_storeList(ListDataPtr list, void *, uint32 mask);