Пример #1
0
        public IntelCpu(CpuidProcessorInfo cpuInfo)
            : base(cpuInfo)
        {
            ModelName = cpuInfo[0, 0].Name;
            FullName  = cpuInfo[0, 0].BrandName;

            DetectMicroarchitecture();
            DetectTimeStampCounterMultiper();
        }
Пример #2
0
        public override void TickSpecificLoad(CpuidProcessorInfo info)
        {
            var tscSupport = info.IsTimeStampCounterSupported && info.TimeStampCounterFrequency > 0;

            double newBusClock = 0;

            foreach (var coreFrequencySensor in _coreFrequenciesSensors)
            {
                coreFrequencySensor.SetActive(tscSupport);
                if (!tscSupport)
                {
                    continue;
                }

                uint eax = 0, edx = 0;
                if (Msr.ReadTx(IntelCpu.Ia32PerfStatus, ref eax, ref edx,
                               (UIntPtr)(1UL << (int)Cpu.GetCpuidProcessorInfo()[0, 0].ThreadIndex)))
                {
                    newBusClock = Cpu.GetCpuidProcessorInfo().TimeStampCounterFrequency / Cpu.TimeStampCounterMultiper;
                    switch (Cpu.Microarchitecture)
                    {
                    case MicroArchitecture.Nehalem: {
                        var multiplier = eax & 0xff;
                        coreFrequencySensor.Update((float)(multiplier * newBusClock));
                    } break;

                    case MicroArchitecture.SandyBridge:
                    case MicroArchitecture.IvyBridge:
                    case MicroArchitecture.Haswell:
                    case MicroArchitecture.Broadwell:
                    case MicroArchitecture.Silvermont:
                    case MicroArchitecture.Skylake: {
                        var multiplier = (eax >> 8) & 0xff;
                        coreFrequencySensor.Update((float)(multiplier * newBusClock));
                    } break;

                    default: {
                        var multiplier = ((eax >> 8) & 0x1f) + 0.5 * ((eax >> 14) & 1);
                        coreFrequencySensor.Update((float)(multiplier * newBusClock));
                    } break;
                    }
                }
                else
                {
                    // If IA32_PERF_STATUS is not available, assume TSC frequency
                    coreFrequencySensor.Update((float)Cpu.GetCpuidProcessorInfo().TimeStampCounterFrequency);
                }
            }

            if (newBusClock > 0)
            {
                _baseClock.Update((float)newBusClock);
            }

            _baseClock.SetActive(newBusClock > 0);
            IsSensorActive = newBusClock > 0;
        }
Пример #3
0
        public override void TickSpecificLoad(CpuidProcessorInfo info)
        {
            foreach (var coreTempSensor in _cpuThreadsTemp)
            {
                coreTempSensor.Update(Cpu);
            }

            _cpuPackageTemp.Update(Cpu);
        }
Пример #4
0
 public override void TickSpecificLoad(CpuidProcessorInfo info)
 {
     foreach (var sensor in _powerSensors)
     {
         if (sensor != null && sensor.IsActive())
         {
             sensor.Update(_energyUnitMultiplier);
         }
     }
 }
Пример #5
0
        protected GenericCpu(CpuidProcessorInfo cpuInfo)
        {
            ProcessorCpuid = cpuInfo;

            AvaliableSensors = new Dictionary <SensorType, List <BaseCpuSensor> >();
            foreach (SensorType type in Enum.GetValues(typeof(SensorType)))
            {
                AvaliableSensors[type] = new List <BaseCpuSensor>();
            }
        }
Пример #6
0
        public override void TickSpecificLoad(CpuidProcessorInfo info)
        {
            UpdateLoadData();

            for (var coreId = 0; coreId < _coreSensors.Length; coreId++)
            {
                _coreSensors[coreId].Update(_coreLoads[coreId]);
                _coreSensors[coreId].SetActive(IsSensorActive);
            }

            _cpuTotalLoad.Update(_totalLoad);
        }
Пример #7
0
        private void InitLoadData()
        {
            _coreLoads = new float[Cpu.CoreCount];
            _totalLoad = 0;

            try {
                CpuidProcessorInfo.GetCpuLoadTime(out _idleTimes, out _totalTimes);
            } catch {
                _idleTimes  = null;
                _totalTimes = null;
            }

            IsSensorActive = _idleTimes != null;
        }
Пример #8
0
 public abstract void TickSpecificLoad(CpuidProcessorInfo info);