예제 #1
0
            public NetIfaceTracker(string partID, NetworkInterface netIface, int netIfaceNum, ulong statisticsGroupsFileIndexUserRowFlagBits)
            {
                originalNetIface = netIface;
                this.netIfaceNum = netIfaceNum;

                name = netIface.Name;

                groupInfo = new MDRF.Writer.GroupInfo()
                {
                    Name = "{0}.{1:d2}.Stats".CheckedFormat(partID, netIfaceNum),
                    FileIndexUserRowFlagBits = statisticsGroupsFileIndexUserRowFlagBits,
                    GroupBehaviorOptions     = MDRF.Writer.GroupBehaviorOptions.UseVCHasBeenSetForTouched | MDRF.Writer.GroupBehaviorOptions.IncrSeqNumOnTouched,
                    GroupPointInfoArray      = new []
                    {
                        linkUpGPI,
                        opStatGPI,
                        rxBytesGPI, txBytesGPI,
                        rxUnicastPktsGPI, txUnicastPktsGPI,
                        rxNonUnicastPktsGPI, txNonUnicastPktsGPI,
                        txQueueLenGPI,
                        rxPktDiscardsGPI, rxPktErrorsGPI, rxPktUnkProtosGPI,
                        txPktDiscardsGPI, txPktErrorsGPI,
                        rxByteRateGPI, txByteRateGPI,
                        rxUnicastPktRateGPI, txUnicastPktRateGPI,
                        rxNonUnicastPktRateGPI, txNonUnicastPktRateGPI,
                    },
                };
            }
예제 #2
0
        public PerformanceCountersPart(PerformanceCountersPartConfig config, PartsLib.Tools.MDRF.Writer.IMDRFWriter mdrfWriter)
            : base(config.PartID, initialSettings: SimpleActivePartBaseSettings.DefaultVersion0.Build(waitTimeLimit: (0.10).FromSeconds(), goOnlineAndOfflineHandling: GoOnlineAndGoOfflineHandling.All))
        {
            Config          = new PerformanceCountersPartConfig(config);
            this.mdrfWriter = mdrfWriter;

            // we trigger acquiring a new sample two times a second
            sampleIntervalTimer = new QpcTimer()
            {
                TriggerInterval = Config.SampleInterval, AutoReset = true
            }.Start();

            performanceCounterTrackerArray = Config.PerformanceCounterSpecArray.Select(pcs => new PerformanceCounterTracker(Log, pcs)).ToArray();

            pccTupleArray = performanceCounterTrackerArray.GroupBy(pct => pct.pcc, (pcc, pctSet) => Tuple.Create(pcc, pctSet.ToArray())).ToArray();

            groupInfo = new MDRF.Writer.GroupInfo()
            {
                Name = "{0}.Grp".CheckedFormat(PartID),
                GroupBehaviorOptions     = MDRF.Writer.GroupBehaviorOptions.UseVCHasBeenSetForTouched | MDRF.Writer.GroupBehaviorOptions.IncrSeqNumOnTouched,
                FileIndexUserRowFlagBits = (ulong)Config.PerformanceCounterGroupsFileIndexUserRowFlagBits,
                GroupPointInfoArray      = performanceCounterTrackerArray.Select(pct => pct.gpInfo).ToArray(),
            };

            mdrfWriter.Add(groupInfo);

            noMDRFLogger = new Logging.Logger(PartID).SetDefaultNamedValueSetForEmitter(Logging.LogGate.All, new NamedValueSet()
            {
                { "noMDRF" }
            });
        }
예제 #3
0
 public ActiveSetItemTracker(string groupName, ulong activeSetGroupsFileIndexUserRowFlagBits)
 {
     GroupInfo = new MDRF.Writer.GroupInfo()
     {
         Name = groupName,
         GroupBehaviorOptions     = MDRF.Writer.GroupBehaviorOptions.UseVCHasBeenSetForTouched | MDRF.Writer.GroupBehaviorOptions.IncrSeqNumOnTouched,
         GroupPointInfoArray      = new[] { pidGPI, cpuPerEstGPI, userCpuPerEstGPI, cpuTicksGPI, userCpuTicksGPI, vmSizeGPI, wsSizeGPI, handlesGPI },
         FileIndexUserRowFlagBits = activeSetGroupsFileIndexUserRowFlagBits,
     };
 }
예제 #4
0
            public ActiveSetMapGroupTracker(int configuredActiveSetSize, string groupName, ulong activeSetMapGroupFileIndexUserRowFlagBits)
            {
                gpiPairArray = Enumerable.Range(1, configuredActiveSetSize).Select(setNum => new GPIPair(setNum)).ToArray();

                GroupInfo = new MDRF.Writer.GroupInfo()
                {
                    Name = groupName,
                    GroupBehaviorOptions     = MDRF.Writer.GroupBehaviorOptions.UseVCHasBeenSetForTouched | MDRF.Writer.GroupBehaviorOptions.IncrSeqNumOnTouched,
                    GroupPointInfoArray      = gpiPairArray.SelectMany(pair => new [] { pair.pidGPI, pair.nameGPI }).ToArray(),
                    FileIndexUserRowFlagBits = activeSetMapGroupFileIndexUserRowFlagBits,
                };
            }
예제 #5
0
        public MDRFHistogramGroupSource(string groupName, Histogram histogram, ulong fileIndexUserRowFlagBits = 0, INamedValueSet extraClientNVS = null, IEnumerable <PartsLib.Tools.MDRF.Writer.GroupPointInfo> extraGPISet = null)
        {
            GroupInfo = new MDRF.Writer.GroupInfo()
            {
                Name = groupName,
                GroupBehaviorOptions     = MDRF.Writer.GroupBehaviorOptions.UseVCHasBeenSetForTouched | MDRF.Writer.GroupBehaviorOptions.IncrSeqNumOnTouched,
                FileIndexUserRowFlagBits = fileIndexUserRowFlagBits,
                GroupPointInfoArray      = new[] { countGPI, minGPI, maxGPI, avgGPI, sdGPI, medianEstGPI, percentile5EstGPI, percentile95EstGPI, binsGPI }.Concat(extraGPISet ?? emptyGPIArray).ToArray(),
                ClientNVS = new NamedValueSet()
                {
                    { "Histogram" }, { "NumBins", histogram.NumBins }, { "BinBoundaryArray", histogram.BinBoundaryArray }
                }.MergeWith(extraClientNVS ?? NamedValueSet.Empty, NamedValueMergeBehavior.AddNewItems).MakeReadOnly(),
            };

            Histogram         = histogram;
            lastBinCountArray = Histogram.BinCountArray.MakeCopyOf();

            UpdateGroupItems();
            GroupInfo.Touched = true;
        }
예제 #6
0
        public FileRWPerformancePart(string partID, FileRWPerformancePartConfig config, PartsLib.Tools.MDRF.Writer.IMDRFWriter mdrfWriter)
            : base(partID, initialSettings: SimpleActivePartBaseSettings.DefaultVersion0.Build(waitTimeLimit: (0.10).FromSeconds(), goOnlineAndOfflineHandling: GoOnlineAndGoOfflineHandling.All))
        {
            Config          = new FileRWPerformancePartConfig(config);
            this.mdrfWriter = mdrfWriter;

            // we trigger acquiring a new sample two times a second
            sampleIntervalTimer = new QpcTimer()
            {
                TriggerInterval = Config.SampleInterval, AutoReset = true
            }.Start();
            aggregationIntervalTimer = new QpcTimer()
            {
                TriggerInterval = Config.AggregationInterval, AutoReset = true
            }.Start();

            AddExplicitDisposeAction(() => Release());

            ahReadNormal   = new Histogram(hReadNormal);
            ahReadThrough  = new Histogram(hReadThrough);
            ahWriteThrough = new Histogram(hWriteThrough);

            avgRatesGroup = new MDRF.Writer.GroupInfo()
            {
                Name = "{0}.avgRates".CheckedFormat(PartID),
                GroupBehaviorOptions     = MDRF.Writer.GroupBehaviorOptions.UseVCHasBeenSetForTouched | MDRF.Writer.GroupBehaviorOptions.IncrSeqNumOnTouched,
                FileIndexUserRowFlagBits = (ulong)Config.AggregateGroupsFileIndexUserRowFlagBits,
                GroupPointInfoArray      = new MDRF.Writer.GroupPointInfo[]
                {
                    peakReadNormalRateGPI = new MDRF.Writer.GroupPointInfo()
                    {
                        Name = "peakReadRate", ValueCST = ContainerStorageType.Double, VC = new ValueContainer(0.0)
                    },
                    peakReadThroughRateGPI = new MDRF.Writer.GroupPointInfo()
                    {
                        Name = "peakReadThroughRate", ValueCST = ContainerStorageType.Double, VC = new ValueContainer(0.0)
                    },
                    peakWriteThroughRateGPI = new MDRF.Writer.GroupPointInfo()
                    {
                        Name = "peakWriteThroughRate", ValueCST = ContainerStorageType.Double, VC = new ValueContainer(0.0)
                    },
                },
                Touched = true,
            };

            accumTupleArray = new Tuple <MDRFHistogramGroupSource, MDRFHistogramGroupSource> []
            {
                Tuple.Create(new MDRFHistogramGroupSource("{0}.hReadNormal".CheckedFormat(PartID), hReadNormal, Config.SampleGroupsFileIndexUserRowFlagBits),
                             new MDRFHistogramGroupSource("{0}.ahReadNormal".CheckedFormat(PartID), ahReadNormal, Config.AggregateGroupsFileIndexUserRowFlagBits)),
                Tuple.Create(new MDRFHistogramGroupSource("{0}.hReadThrough".CheckedFormat(PartID), hReadThrough, Config.SampleGroupsFileIndexUserRowFlagBits),
                             new MDRFHistogramGroupSource("{0}.ahReadThrough".CheckedFormat(PartID), ahReadThrough, Config.AggregateGroupsFileIndexUserRowFlagBits)),
                Tuple.Create(new MDRFHistogramGroupSource("{0}.hWriteThrough".CheckedFormat(PartID), hWriteThrough, Config.SampleGroupsFileIndexUserRowFlagBits),
                             new MDRFHistogramGroupSource("{0}.ahWriteThrough".CheckedFormat(PartID), ahWriteThrough, Config.AggregateGroupsFileIndexUserRowFlagBits)),
            };

            IEnumerable <Tuple <MDRFHistogramGroupSource, MDRFHistogramGroupSource> > registerGroupsSet = ((Config.UseFileFlagNoBuffering) ? accumTupleArray : new [] { accumTupleArray[0], accumTupleArray[2] });

            mdrfWriter.Add(avgRatesGroup);
            mdrfWriter.AddRange(registerGroupsSet.Select(t => t.Item1.GroupInfo).Concat(registerGroupsSet.Select(t => t.Item2.GroupInfo)));

            noMDRFLogger = new Logging.Logger(PartID).SetDefaultNamedValueSetForEmitter(Logging.LogGate.All, new NamedValueSet()
            {
                { "noMDRF" }
            });
        }