changeset 1024:19a57960c436

add task list mail time profile.
author yutaka@localhost.localdomain
date Mon, 08 Nov 2010 14:02:23 +0900
parents 5245cf19775d
children cb170249c752
files TaskManager/Cell/spe/CellDmaManager.cc TaskManager/Cell/spe/CellDmaManager.h TaskManager/Fifo/FifoDmaManager.h TaskManager/kernel/schedule/DmaManager.h TaskManager/kernel/schedule/SchedMail.cc TaskManager/kernel/schedule/Scheduler.cc TaskManager/kernel/schedule/Scheduler.h
diffstat 7 files changed, 48 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- 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;
 }
--- 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);
 
--- 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(); }
--- 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) {}
--- 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__);
 
--- 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();
+}
+
 
 
 /*
--- 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);