From e881f8ce2a68dcd13ad74c96efd58e6b2246d8a8 Mon Sep 17 00:00:00 2001 From: Ron Dreslinski Date: Wed, 29 Mar 2006 14:27:10 -0500 Subject: Add some basic statistics to the disk model --HG-- extra : convert_revision : 0f3a45745b0122de64a2f434604a474df04f2938 --- dev/ide_disk.cc | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'dev/ide_disk.cc') diff --git a/dev/ide_disk.cc b/dev/ide_disk.cc index 41400c590..c13556ed6 100644 --- a/dev/ide_disk.cc +++ b/dev/ide_disk.cc @@ -377,6 +377,37 @@ IdeDisk::dmaPrdReadDone() doDmaWrite(); } +void +IdeDisk::regStats() +{ + using namespace Stats; + dmaReadFullPages + .name(name() + ".dma_read_full_pages") + .desc("Number of full page size DMA reads (not PRD).") + ; + dmaReadBytes + .name(name() + ".dma_read_bytes") + .desc("Number of bytes transfered via DMA reads (not PRD).") + ; + dmaReadTxs + .name(name() + ".dma_read_txs") + .desc("Number of DMA read transactions (not PRD).") + ; + + dmaWriteFullPages + .name(name() + ".dma_write_full_pages") + .desc("Number of full page size DMA writes.") + ; + dmaWriteBytes + .name(name() + ".dma_write_bytes") + .desc("Number of bytes transfered via DMA writes.") + ; + dmaWriteTxs + .name(name() + ".dma_write_txs") + .desc("Number of DMA write transactions.") + ; +} + void IdeDisk::doDmaRead() { @@ -399,6 +430,10 @@ IdeDisk::doDmaRead() dmaInterfaceBytes = bytesInPage; + if (bytesInPage == TheISA::VMPageSize) + dmaReadFullPages++; + dmaReadBytes += bytesInPage; + dmaReadTxs++; dmaInterface->doDMA(Read, dmaAddr, bytesInPage, curTick + totalDiskDelay, &dmaReadEvent); } else { @@ -430,6 +465,11 @@ IdeDisk::dmaReadDone() bytesInPage = bytesInDmaPage(curAddr, bytesLeft); dmaInterfaceBytes += bytesInPage; + if (bytesInPage == TheISA::VMPageSize) + dmaReadFullPages++; + dmaReadBytes += bytesInPage; + dmaReadTxs++; + dmaInterface->doDMA(Read, dmaAddr, bytesInPage, curTick, &dmaReadEvent); @@ -504,6 +544,11 @@ IdeDisk::doDmaWrite() dmaInterfaceBytes = bytesInPage; + if (bytesInPage == TheISA::VMPageSize) + dmaWriteFullPages++; + dmaWriteBytes += bytesInPage; + dmaWriteTxs++; + dmaInterface->doDMA(WriteInvalidate, dmaAddr, bytesInPage, curTick + totalDiskDelay, &dmaWriteEvent); @@ -535,6 +580,11 @@ IdeDisk::dmaWriteDone() bytesInPage = bytesInDmaPage(curAddr, bytesLeft); dmaInterfaceBytes += bytesInPage; + if (bytesInPage == TheISA::VMPageSize) + dmaWriteFullPages++; + dmaWriteBytes += bytesInPage; + dmaWriteTxs++; + dmaInterface->doDMA(WriteInvalidate, dmaAddr, bytesInPage, curTick, &dmaWriteEvent); -- cgit v1.2.3