1
1
// SPDX-License-Identifier: BSD-3-Clause
2
- // Copyright (c) 2009-2018, Intel Corporation
2
+ // Copyright (c) 2009-2018,2022 Intel Corporation
3
3
// written by Steven Briscoe
4
4
5
5
#include < cstdlib>
@@ -540,6 +540,7 @@ namespace PCMDaemon {
540
540
541
541
PCMMemory& memory = sharedPCMState_->pcm .memory ;
542
542
memory.dramEnergyMetricsAvailable = pcmInstance_->dramEnergyMetricsAvailable ();
543
+ memory.pmmMetricsAvailable = pcmInstance_->PMMTrafficMetricsAvailable ();
543
544
544
545
const uint32 numSockets = sharedPCMState_->pcm .system .numOfSockets ;
545
546
@@ -554,11 +555,26 @@ namespace PCMDaemon {
554
555
float iMC_Wr_socket_chan[MAX_SOCKETS][MEMORY_MAX_IMC_CHANNELS];
555
556
float iMC_Rd_socket[MAX_SOCKETS];
556
557
float iMC_Wr_socket[MAX_SOCKETS];
558
+ float iMC_PMM_Rd_socket[MAX_SOCKETS];
559
+ float iMC_PMM_Wr_socket[MAX_SOCKETS];
557
560
558
561
for (uint32 skt (0 ); skt < numSockets; ++skt)
559
562
{
560
563
iMC_Rd_socket[skt] = 0.0 ;
561
564
iMC_Wr_socket[skt] = 0.0 ;
565
+ iMC_PMM_Rd_socket[skt] = 0.0 ;
566
+ iMC_PMM_Wr_socket[skt] = 0.0 ;
567
+
568
+ auto toBW = [&elapsedTime](const uint64 bytes)
569
+ {
570
+ return (float )(bytes / 1000000.0 / (elapsedTime / 1000.0 ));
571
+ };
572
+
573
+ if (memory.pmmMetricsAvailable )
574
+ {
575
+ iMC_PMM_Rd_socket[skt] = toBW (getBytesReadFromPMM (socketStatesBefore_[skt], socketStatesAfter_[skt]));
576
+ iMC_PMM_Wr_socket[skt] = toBW (getBytesWrittenToPMM (socketStatesBefore_[skt], socketStatesAfter_[skt]));
577
+ }
562
578
563
579
for (uint32 channel (0 ); channel < MEMORY_MAX_IMC_CHANNELS; ++channel)
564
580
{
@@ -572,8 +588,8 @@ namespace PCMDaemon {
572
588
continue ;
573
589
}
574
590
575
- iMC_Rd_socket_chan[skt][channel] = (float ) ( getMCCounter (channel,MEMORY_READ,serverUncoreCounterStatesBefore_[skt],serverUncoreCounterStatesAfter_[skt]) * 64 / 1000000.0 / (elapsedTime/ 1000.0 ));
576
- iMC_Wr_socket_chan[skt][channel] = (float ) ( getMCCounter (channel,MEMORY_WRITE,serverUncoreCounterStatesBefore_[skt],serverUncoreCounterStatesAfter_[skt]) * 64 / 1000000.0 / (elapsedTime/ 1000.0 ));
591
+ iMC_Rd_socket_chan[skt][channel] = (float )( toBW ( getMCCounter (channel, MEMORY_READ, serverUncoreCounterStatesBefore_[skt],serverUncoreCounterStatesAfter_[skt]) * 64 ));
592
+ iMC_Wr_socket_chan[skt][channel] = (float )( toBW ( getMCCounter (channel, MEMORY_WRITE, serverUncoreCounterStatesBefore_[skt],serverUncoreCounterStatesAfter_[skt]) * 64 ));
577
593
578
594
iMC_Rd_socket[skt] += iMC_Rd_socket_chan[skt][channel];
579
595
iMC_Wr_socket[skt] += iMC_Wr_socket_chan[skt][channel];
@@ -582,6 +598,8 @@ namespace PCMDaemon {
582
598
583
599
float systemRead (0.0 );
584
600
float systemWrite (0.0 );
601
+ float systemPMMRead (0.0 );
602
+ float systemPMMWrite (0.0 );
585
603
586
604
uint32 onlineSocketsI (0 );
587
605
for (uint32 skt (0 ); skt < numSockets; ++skt)
@@ -610,14 +628,20 @@ namespace PCMDaemon {
610
628
memory.sockets [onlineSocketsI].numOfChannels = currentChannelI;
611
629
memory.sockets [onlineSocketsI].read = iMC_Rd_socket[skt];
612
630
memory.sockets [onlineSocketsI].write = iMC_Wr_socket[skt];
613
- memory.sockets [onlineSocketsI].total = iMC_Rd_socket[skt] + iMC_Wr_socket[skt];
631
+ memory.sockets [onlineSocketsI].pmmRead = iMC_PMM_Rd_socket[skt];
632
+ memory.sockets [onlineSocketsI].pmmWrite = iMC_PMM_Wr_socket[skt];
633
+ memory.sockets [onlineSocketsI].total = iMC_Rd_socket[skt] + iMC_Wr_socket[skt] + iMC_PMM_Rd_socket[skt] + iMC_PMM_Wr_socket[skt];
634
+ const auto all = memory.sockets [onlineSocketsI].total ;
635
+ memory.sockets [onlineSocketsI].pmmMemoryModeHitRate = (all == 0.0 ) ? -1.0 : ((iMC_Rd_socket[skt] + iMC_Wr_socket[skt]) / all); // simplified approximation
614
636
if (memory.dramEnergyMetricsAvailable )
615
637
{
616
638
memory.sockets [onlineSocketsI].dramEnergy = getDRAMConsumedJoules (socketStatesBefore_[skt], socketStatesAfter_[skt]);
617
639
}
618
640
619
641
systemRead += iMC_Rd_socket[skt];
620
642
systemWrite += iMC_Wr_socket[skt];
643
+ systemPMMRead += iMC_PMM_Rd_socket[skt];
644
+ systemPMMWrite += iMC_PMM_Wr_socket[skt];
621
645
622
646
++onlineSocketsI;
623
647
}
0 commit comments