public IntelCpu(CpuidProcessorInfo cpuInfo) : base(cpuInfo) { ModelName = cpuInfo[0, 0].Name; FullName = cpuInfo[0, 0].BrandName; DetectMicroarchitecture(); DetectTimeStampCounterMultiper(); }
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; }
public override void TickSpecificLoad(CpuidProcessorInfo info) { foreach (var coreTempSensor in _cpuThreadsTemp) { coreTempSensor.Update(Cpu); } _cpuPackageTemp.Update(Cpu); }
public override void TickSpecificLoad(CpuidProcessorInfo info) { foreach (var sensor in _powerSensors) { if (sensor != null && sensor.IsActive()) { sensor.Update(_energyUnitMultiplier); } } }
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>(); } }
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); }
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; }
public abstract void TickSpecificLoad(CpuidProcessorInfo info);