예제 #1
0
파일: DataNode.cs 프로젝트: hch-im/ptopw
 public DataNode()
 {
     time = 0;
     pData = new ArrayList();
     sData = null;
     pEnergy = new Hashtable();
     sEnergy = null;
 }
예제 #2
0
        private void addOrUpdateSystemCounters(SystemEnergy se)
        {
            try
            {
                int i;
                if (sysCounters == null)
                {
                    sysCounters = new PerformanceCounter[SYSTEM_COUNTER_NUM];

                    for (i = 0; i < SYSTEM_COUNTER_NUM; i++)
                    {
                        sysCounters[i] = new PerformanceCounter(PTOPW_CATEGORY, (String)counterNames[i], "_Total", false);
                        sysCounters[i].RawValue = 0;
                    }
                }

                i = 0;
                sysCounters[i++].RawValue = (long)(se.totalActivePower() * 1000);//uw
                sysCounters[i++].RawValue = (long)(se.cpuPower * 1000);//uw
                sysCounters[i++].RawValue = (long)(se.memPower * 1000);//uw
                sysCounters[i++].RawValue = (long)(se.diskPower * 1000);//uw
                sysCounters[i++].RawValue = (long)(se.nicPower * 1000);//uw
            }
            catch (System.Exception ex)
            {
                throw new MyException(ex.Message, MyException.MSG_UPDATE_COUNTER_ERROR);
            }
        }
예제 #3
0
파일: MainWindow.cs 프로젝트: hch-im/ptopw
        private void calButton_Click(object sender, EventArgs e)
        {
            if("".Equals(timeTextBox.Text.Trim()))
            {
                MessageBox.Show("Please input the time!", "Alert",
                    MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                return;
            }

            long time = 0;

            try{
                time = Convert.ToInt32(timeTextBox.Text);
            }catch(Exception ex)
            {
                MessageBox.Show("Please input a correct time!","Alert",
                    MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                return;
             }

            clearView();
            ArrayList al = dc.retrieveData(time * 1000);
            Hashtable engList = new Hashtable();
            SystemEnergy tse = new SystemEnergy();
            //calculate
            foreach(DataNode dn in al)
            {
                tse.cpuEng += dn.sEnergy.cpuEng;
                tse.diskEng += dn.sEnergy.diskEng;
                tse.memEng += dn.sEnergy.memEng;
                tse.nicEng += dn.sEnergy.nicEng;

                foreach(ProcessEnergy pe in dn.pEnergy.Values)
                {
                    ProcessEnergy tpe = null;
                    if(engList.ContainsKey(pe.GetID()))
                    {
                        tpe = (ProcessEnergy)engList[pe.GetID()];
                    }
                    else
                    {
                        tpe = new ProcessEnergy();
                        tpe.no = pe.no;
                        tpe.name = pe.name;
                        engList.Add(pe.no, tpe);
                    }

                    tpe.cpuEng += pe.cpuEng;
                    tpe.diskEng += pe.diskEng;
                    tpe.memEng += pe.memEng;
                    tpe.nicEng += pe.nicEng;
                }
            }
            //display
            cpuEnergyLabel.Text = string.Format(DOUBLE_FORMAT, tse.cpuEng);
            memEnergyLabel.Text = string.Format(DOUBLE_FORMAT, tse.memEng);
            diskEnergyLabel.Text = string.Format(DOUBLE_FORMAT, tse.diskEng);
            wnicEnergyLabel.Text = string.Format(DOUBLE_FORMAT, tse.nicEng);

            ArrayList list = new ArrayList(engList.Values);
            if (list.Count == 0) return;
            list.Sort(compare);

            foreach (ProcessEnergy eng in list)
            {
                Object[] objs = new Object[8];
                double total = eng.cpuEng + eng.memEng + eng.diskEng + eng.nicEng;
                objs[1] = NonEmptyString(string.Format(DOUBLE_FORMAT, total));
                objs[2] = NonEmptyString(string.Format(DOUBLE_FORMAT, eng.cpuEng));
                objs[3] = NonEmptyString(string.Format(DOUBLE_FORMAT, eng.memEng));
                objs[4] = NonEmptyString(string.Format(DOUBLE_FORMAT, eng.diskEng));
                objs[5] = NonEmptyString(string.Format(DOUBLE_FORMAT, eng.nicEng));

                objs[0] = NonEmptyString(eng.name);
                processDataGridView.Rows.Add(objs);
             }
        }
예제 #4
0
파일: EnergyModel.cs 프로젝트: hch-im/ptopw
 public void systemEnergy(SystemInfo info, SystemEnergy se)
 {
     MaxFrequency = info.pro.MaxClockSpeed;
     DiskEnergy(info.percentDiskIdleTime, info.percentDiskReadTime,
         info.percentDiskWriteTime, info.timeInterval, se);
     NICEnergy(info.nrecv, info.nsend, info.timeInterval, se);
     MemoryEnergy(info.memRead, info.memWrite, info.memCopy, info.timeInterval,info.pageSize, se);
     CPUEnergy(info.cpuFrequency, info.cpuTime, info.timeInterval, info.pro.NumberOfCores, se);
 }
예제 #5
0
파일: EnergyModel.cs 프로젝트: hch-im/ptopw
 public void processEnergy(ProcessInfo info, SystemEnergy se, SystemInfo sinfo,ProcessEnergy pe)
 {
     pCPUEnergy(info, pe, sinfo, se);
     pNICEnergy(info, pe, se, sinfo);
     pDiskEnergy(info, pe, se, sinfo);
     pMemoryEnergy(info, pe, se, sinfo);
 }
예제 #6
0
파일: EnergyModel.cs 프로젝트: hch-im/ptopw
        void pNICEnergy(ProcessInfo pinfo, ProcessEnergy peng, SystemEnergy seng, SystemInfo sinfo)
        {
            if(pinfo.networkActive && sinfo.NetActiveProcessNum > 0)
            {
                peng.nicEng = seng.nicEng / sinfo.NetActiveProcessNum;
            }
            else{
                peng.nicEng = 0;
            }

            peng.nicPower = peng.nicEng * 1000 / sinfo.timeInterval;
        }
예제 #7
0
파일: EnergyModel.cs 프로젝트: hch-im/ptopw
 void pMemoryEnergy(ProcessInfo pinfo, ProcessEnergy peng, SystemEnergy seng, SystemInfo sinfo)
 {
     peng.memEng = seng.memEng *
             ((pinfo.dwrite + pinfo.dread) * 1.0 / (sinfo.diskRead + sinfo.diskWrite));
     peng.memPower = peng.memEng * 1000 / sinfo.timeInterval;
 }
예제 #8
0
파일: EnergyModel.cs 프로젝트: hch-im/ptopw
 void pCPUEnergy(ProcessInfo info, ProcessEnergy pe, SystemInfo sinfo, SystemEnergy se)
 {
     pe.cpuEng = se.cpuEng * info.cpuTime / (sinfo.cpuTime);
     pe.cpuPower = pe.cpuEng * 1000 / sinfo.timeInterval;
 }
예제 #9
0
파일: EnergyModel.cs 프로젝트: hch-im/ptopw
        //ms
        void NICEnergy(double drecv, double dsend, double interval, SystemEnergy se)
        {
            if((drecv + dsend) == 0)
            {
                se.nicEng = WirelessNICIdlePower * interval / 1000;
            }
            else
            {
                se.nicEng = ((drecv / (drecv + dsend) * WirelessReceivePower)
                            + (dsend / (drecv + dsend) * WirelessTransmitPower))
                            * interval / 1000;
            }

            se.nicPower = se.nicEng / (interval / 1000);
        }
예제 #10
0
파일: EnergyModel.cs 프로젝트: hch-im/ptopw
        void MemoryEnergy(double memread, double memwrite, double memcopy,double interval, int pagesize, SystemEnergy se)
        {
            double indata = ((memread * interval/1000) * pagesize)/1024;//MB, memory write
            double outdata = ((memwrite * interval/1000) * pagesize)/1024;//MB, memory read
            double copydata = ((memcopy * interval / 1000) * pagesize);//MB, memory read
            double t = (indata / MemReadSpeed + outdata / MemWriteSpeed + copydata / MemCopySpeed)*1000;//ms
            double idlet = interval - t;
            if (t > interval)//may happen
            {
                t = interval;
                idlet = 0;
            }

            se.memEng = ((t * MemWritePower) + (idlet * MemIdlePower)) / 1000;//joule
            se.memPower = se.memEng / (interval/1000);//watt
        }
예제 #11
0
파일: EnergyModel.cs 프로젝트: hch-im/ptopw
 //ms
 void DiskEnergy(UInt64 idle, UInt64 read, UInt64 write, double interval, SystemEnergy se)
 {
     se.diskEng = (((read*DiskReadPower)
                    + (write*DiskWritePower) + (idle*DiskIdlePower)) * 1.0 /(idle + read + write)) * interval/1000;
     se.diskPower = se.diskEng * 1000 / interval;
 }
예제 #12
0
파일: EnergyModel.cs 프로젝트: hch-im/ptopw
        void CPUEnergy(double CurrentFrequency, double cpuTime, double Interval, uint coreNum, SystemEnergy se)
        {
            se.cpuEng = (MinCPUPower*Interval/1000) +
                        alpha * (
                            (MaxCPUPower - MinCPUPower) * (CurrentFrequency / MaxFrequency) * cpuTime / coreNum / 1000
                            );

            se.cpuPower = se.cpuEng * 1000 / Interval;
        }