1099a9838a
of those statistics to the e1000 model.
367 lines
9.8 KiB
C++
367 lines
9.8 KiB
C++
/*
|
|
* Copyright (c) 2004-2005 The Regents of The University of Michigan
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are
|
|
* met: redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer;
|
|
* redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution;
|
|
* neither the name of the copyright holders nor the names of its
|
|
* contributors may be used to endorse or promote products derived from
|
|
* this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* Authors: Nathan Binkert
|
|
* Lisa Hsu
|
|
*/
|
|
|
|
#include "dev/etherdevice.hh"
|
|
#include "sim/stats.hh"
|
|
|
|
void
|
|
EtherDevice::regStats()
|
|
{
|
|
txBytes
|
|
.name(name() + ".txBytes")
|
|
.desc("Bytes Transmitted")
|
|
.prereq(txBytes)
|
|
;
|
|
|
|
rxBytes
|
|
.name(name() + ".rxBytes")
|
|
.desc("Bytes Received")
|
|
.prereq(rxBytes)
|
|
;
|
|
|
|
txPackets
|
|
.name(name() + ".txPackets")
|
|
.desc("Number of Packets Transmitted")
|
|
.prereq(txBytes)
|
|
;
|
|
|
|
rxPackets
|
|
.name(name() + ".rxPackets")
|
|
.desc("Number of Packets Received")
|
|
.prereq(rxBytes)
|
|
;
|
|
|
|
txIpChecksums
|
|
.name(name() + ".txIpChecksums")
|
|
.desc("Number of tx IP Checksums done by device")
|
|
.precision(0)
|
|
.prereq(txBytes)
|
|
;
|
|
|
|
rxIpChecksums
|
|
.name(name() + ".rxIpChecksums")
|
|
.desc("Number of rx IP Checksums done by device")
|
|
.precision(0)
|
|
.prereq(rxBytes)
|
|
;
|
|
|
|
txTcpChecksums
|
|
.name(name() + ".txTcpChecksums")
|
|
.desc("Number of tx TCP Checksums done by device")
|
|
.precision(0)
|
|
.prereq(txBytes)
|
|
;
|
|
|
|
rxTcpChecksums
|
|
.name(name() + ".rxTcpChecksums")
|
|
.desc("Number of rx TCP Checksums done by device")
|
|
.precision(0)
|
|
.prereq(rxBytes)
|
|
;
|
|
|
|
txUdpChecksums
|
|
.name(name() + ".txUdpChecksums")
|
|
.desc("Number of tx UDP Checksums done by device")
|
|
.precision(0)
|
|
.prereq(txBytes)
|
|
;
|
|
|
|
rxUdpChecksums
|
|
.name(name() + ".rxUdpChecksums")
|
|
.desc("Number of rx UDP Checksums done by device")
|
|
.precision(0)
|
|
.prereq(rxBytes)
|
|
;
|
|
|
|
descDmaReads
|
|
.name(name() + ".descDMAReads")
|
|
.desc("Number of descriptors the device read w/ DMA")
|
|
.precision(0)
|
|
;
|
|
|
|
descDmaWrites
|
|
.name(name() + ".descDMAWrites")
|
|
.desc("Number of descriptors the device wrote w/ DMA")
|
|
.precision(0)
|
|
;
|
|
|
|
descDmaRdBytes
|
|
.name(name() + ".descDmaReadBytes")
|
|
.desc("number of descriptor bytes read w/ DMA")
|
|
.precision(0)
|
|
;
|
|
|
|
descDmaWrBytes
|
|
.name(name() + ".descDmaWriteBytes")
|
|
.desc("number of descriptor bytes write w/ DMA")
|
|
.precision(0)
|
|
;
|
|
|
|
txBandwidth
|
|
.name(name() + ".txBandwidth")
|
|
.desc("Transmit Bandwidth (bits/s)")
|
|
.precision(0)
|
|
.prereq(txBytes)
|
|
;
|
|
|
|
rxBandwidth
|
|
.name(name() + ".rxBandwidth")
|
|
.desc("Receive Bandwidth (bits/s)")
|
|
.precision(0)
|
|
.prereq(rxBytes)
|
|
;
|
|
|
|
totBandwidth
|
|
.name(name() + ".totBandwidth")
|
|
.desc("Total Bandwidth (bits/s)")
|
|
.precision(0)
|
|
.prereq(totBytes)
|
|
;
|
|
|
|
totPackets
|
|
.name(name() + ".totPackets")
|
|
.desc("Total Packets")
|
|
.precision(0)
|
|
.prereq(totBytes)
|
|
;
|
|
|
|
totBytes
|
|
.name(name() + ".totBytes")
|
|
.desc("Total Bytes")
|
|
.precision(0)
|
|
.prereq(totBytes)
|
|
;
|
|
|
|
totPacketRate
|
|
.name(name() + ".totPPS")
|
|
.desc("Total Tranmission Rate (packets/s)")
|
|
.precision(0)
|
|
.prereq(totBytes)
|
|
;
|
|
|
|
txPacketRate
|
|
.name(name() + ".txPPS")
|
|
.desc("Packet Tranmission Rate (packets/s)")
|
|
.precision(0)
|
|
.prereq(txBytes)
|
|
;
|
|
|
|
rxPacketRate
|
|
.name(name() + ".rxPPS")
|
|
.desc("Packet Reception Rate (packets/s)")
|
|
.precision(0)
|
|
.prereq(rxBytes)
|
|
;
|
|
|
|
postedSwi
|
|
.name(name() + ".postedSwi")
|
|
.desc("number of software interrupts posted to CPU")
|
|
.precision(0)
|
|
;
|
|
|
|
totalSwi
|
|
.name(name() + ".totalSwi")
|
|
.desc("total number of Swi written to ISR")
|
|
.precision(0)
|
|
;
|
|
|
|
coalescedSwi
|
|
.name(name() + ".coalescedSwi")
|
|
.desc("average number of Swi's coalesced into each post")
|
|
.precision(0)
|
|
;
|
|
|
|
postedRxIdle
|
|
.name(name() + ".postedRxIdle")
|
|
.desc("number of rxIdle interrupts posted to CPU")
|
|
.precision(0)
|
|
;
|
|
|
|
totalRxIdle
|
|
.name(name() + ".totalRxIdle")
|
|
.desc("total number of RxIdle written to ISR")
|
|
.precision(0)
|
|
;
|
|
|
|
coalescedRxIdle
|
|
.name(name() + ".coalescedRxIdle")
|
|
.desc("average number of RxIdle's coalesced into each post")
|
|
.precision(0)
|
|
;
|
|
|
|
postedRxOk
|
|
.name(name() + ".postedRxOk")
|
|
.desc("number of RxOk interrupts posted to CPU")
|
|
.precision(0)
|
|
;
|
|
|
|
totalRxOk
|
|
.name(name() + ".totalRxOk")
|
|
.desc("total number of RxOk written to ISR")
|
|
.precision(0)
|
|
;
|
|
|
|
coalescedRxOk
|
|
.name(name() + ".coalescedRxOk")
|
|
.desc("average number of RxOk's coalesced into each post")
|
|
.precision(0)
|
|
;
|
|
|
|
postedRxDesc
|
|
.name(name() + ".postedRxDesc")
|
|
.desc("number of RxDesc interrupts posted to CPU")
|
|
.precision(0)
|
|
;
|
|
|
|
totalRxDesc
|
|
.name(name() + ".totalRxDesc")
|
|
.desc("total number of RxDesc written to ISR")
|
|
.precision(0)
|
|
;
|
|
|
|
coalescedRxDesc
|
|
.name(name() + ".coalescedRxDesc")
|
|
.desc("average number of RxDesc's coalesced into each post")
|
|
.precision(0)
|
|
;
|
|
|
|
postedTxOk
|
|
.name(name() + ".postedTxOk")
|
|
.desc("number of TxOk interrupts posted to CPU")
|
|
.precision(0)
|
|
;
|
|
|
|
totalTxOk
|
|
.name(name() + ".totalTxOk")
|
|
.desc("total number of TxOk written to ISR")
|
|
.precision(0)
|
|
;
|
|
|
|
coalescedTxOk
|
|
.name(name() + ".coalescedTxOk")
|
|
.desc("average number of TxOk's coalesced into each post")
|
|
.precision(0)
|
|
;
|
|
|
|
postedTxIdle
|
|
.name(name() + ".postedTxIdle")
|
|
.desc("number of TxIdle interrupts posted to CPU")
|
|
.precision(0)
|
|
;
|
|
|
|
totalTxIdle
|
|
.name(name() + ".totalTxIdle")
|
|
.desc("total number of TxIdle written to ISR")
|
|
.precision(0)
|
|
;
|
|
|
|
coalescedTxIdle
|
|
.name(name() + ".coalescedTxIdle")
|
|
.desc("average number of TxIdle's coalesced into each post")
|
|
.precision(0)
|
|
;
|
|
|
|
postedTxDesc
|
|
.name(name() + ".postedTxDesc")
|
|
.desc("number of TxDesc interrupts posted to CPU")
|
|
.precision(0)
|
|
;
|
|
|
|
totalTxDesc
|
|
.name(name() + ".totalTxDesc")
|
|
.desc("total number of TxDesc written to ISR")
|
|
.precision(0)
|
|
;
|
|
|
|
coalescedTxDesc
|
|
.name(name() + ".coalescedTxDesc")
|
|
.desc("average number of TxDesc's coalesced into each post")
|
|
.precision(0)
|
|
;
|
|
|
|
postedRxOrn
|
|
.name(name() + ".postedRxOrn")
|
|
.desc("number of RxOrn posted to CPU")
|
|
.precision(0)
|
|
;
|
|
|
|
totalRxOrn
|
|
.name(name() + ".totalRxOrn")
|
|
.desc("total number of RxOrn written to ISR")
|
|
.precision(0)
|
|
;
|
|
|
|
coalescedRxOrn
|
|
.name(name() + ".coalescedRxOrn")
|
|
.desc("average number of RxOrn's coalesced into each post")
|
|
.precision(0)
|
|
;
|
|
|
|
coalescedTotal
|
|
.name(name() + ".coalescedTotal")
|
|
.desc("average number of interrupts coalesced into each post")
|
|
.precision(0)
|
|
;
|
|
|
|
postedInterrupts
|
|
.name(name() + ".postedInterrupts")
|
|
.desc("number of posts to CPU")
|
|
.precision(0)
|
|
;
|
|
|
|
droppedPackets
|
|
.name(name() + ".droppedPackets")
|
|
.desc("number of packets dropped")
|
|
.precision(0)
|
|
;
|
|
|
|
coalescedSwi = totalSwi / postedInterrupts;
|
|
coalescedRxIdle = totalRxIdle / postedInterrupts;
|
|
coalescedRxOk = totalRxOk / postedInterrupts;
|
|
coalescedRxDesc = totalRxDesc / postedInterrupts;
|
|
coalescedTxOk = totalTxOk / postedInterrupts;
|
|
coalescedTxIdle = totalTxIdle / postedInterrupts;
|
|
coalescedTxDesc = totalTxDesc / postedInterrupts;
|
|
coalescedRxOrn = totalRxOrn / postedInterrupts;
|
|
|
|
coalescedTotal = (totalSwi + totalRxIdle + totalRxOk + totalRxDesc +
|
|
totalTxOk + totalTxIdle + totalTxDesc +
|
|
totalRxOrn) / postedInterrupts;
|
|
|
|
txBandwidth = txBytes * Stats::constant(8) / simSeconds;
|
|
rxBandwidth = rxBytes * Stats::constant(8) / simSeconds;
|
|
totBandwidth = txBandwidth + rxBandwidth;
|
|
totBytes = txBytes + rxBytes;
|
|
totPackets = txPackets + rxPackets;
|
|
|
|
txPacketRate = txPackets / simSeconds;
|
|
rxPacketRate = rxPackets / simSeconds;
|
|
}
|