Giter Site home page Giter Site logo

cyring / corefreq Goto Github PK

View Code? Open in Web Editor NEW
1.9K 54.0 127.0 7.54 MB

CoreFreq is a CPU monitoring and tuning software designed for 64-bit processors.

Home Page: https://www.cyring.fr

License: GNU General Public License v2.0

Makefile 0.27% C 99.72% Shell 0.01%
cpu-monitoring processor cpu-temperature cpu-cache cpu-topology multi-core ram-info process-monitor cpuid cpuinfo

corefreq's Introduction

CoreFreq

Purpose

CoreFreq, a CPU monitoring software with BIOS like functionalities, is designed for the 64-bits Processors of architecture Intel Atom, Core2, Nehalem, SandyBridge and superiors; AMD Families from 0Fh ... up to 17h (Zen , Zen+ , Zen 2), 18h (Hygon Dhyana), 19h (Zen 3, Zen 3+, Zen 4, Zen 4c); Arm A64

alt text

CoreFreq provides a framework to retrieve CPU data with a high degree of precision:

  • Core frequencies & ratios; SpeedStep (EIST), Turbo Boost, Hyper-Threading (HTT) and Base Clock
  • Performance counters including Time Stamp Counter (TSC), Unhalted Core Cycles (UCC), Unhalted Reference Cycles (URC)
  • Number of instructions per cycle or second, IPS, IPC, or CPI
  • CPU C-States C0 C1 C3 C6 C7 - C1E - Auto/UnDemotion of C1 C3
  • DTS Temperature and Tjunction Max, Thermal Monitoring TM1 TM2 state, Vcore
  • Topology map including Caches for boostrap & application CPU
  • Processor features, brand & architecture strings
  • In progress: Uncore, Memory Controller channels & geometry, DIMM timings,
    Stress tools, Power & Energy (RAPL, P-State, HWP, TDP), Overclocking, cpuidle & cpufreq driver, ClockSource, Mitigation Mechanisms

To reach this goal, CoreFreq implements a Linux Kernel module which employs the followings:

  • asm code to keep as near as possible the readings of the performance counters;
  • per-CPU, implements slab data memory and high-resolution timer;
  • compliant with suspend / resume and CPU Hot-Plug;
  • a shared memory to protect kernel from the user-space part of the software;
  • atomic synchronization of threads to avoid mutexes and deadlock.

Build & Run

Prerequisites

a- Intel only: For a better accuracy, disable the Kernel NMI Watchdog

Add the below parameter in the kernel boot loader { Grub, SysLinux } ...

nmi_watchdog=0

... and build with the fixed performance counters

make MSR_CORE_PERF_UC=MSR_CORE_PERF_FIXED_CTR1 MSR_CORE_PERF_URC=MSR_CORE_PERF_FIXED_CTR2

b- AMD and Intel: Some Virtualization

VMs don't provide access to the registers that the CoreFreq driver employs :

  • Fixed Performance Counters
  • Model Specific Registers
  • PCI Registers

However CoreFreq is making use of the virtualized performance counter :

  • HV_X64_MSR_VP_RUNTIME(0x40000010)

c- Rendering

The UI renders best with an ASCII console or a Xterm with VT100 support, ANSI colors; optionally transparency.
If bold and bright colors are not rendered then use the following terminal options:

Ubuntu Terminal

In the Preferences - Colors tab, select Show bold text in bright colors

alacritty terminal

Uncomment and set draw_bold_text_with_bright_colors: true in <config-file>

Dependencies

  • The Linux Kernel with a minimum version 3.3
  • The GNU C Library

Build

  1. Software needed:
  • GNU C Compiler with GNU extensions
  • GNU Make tool
  • Linux Kernel Header files to build modules
    • Mandatory : CONFIG_MODULES, CONFIG_SMP, CONFIG_X86_MSR
    • Optionally: CONFIG_HOTPLUG_CPU, CONFIG_CPU_IDLE, CONFIG_CPU_FREQ, CONFIG_PM_SLEEP, CONFIG_DMI, CONFIG_HAVE_NMI, CONFIG_XEN, CONFIG_AMD_NB, CONFIG_SCHED_MUQSS, CONFIG_SCHED_BMQ, CONFIG_SCHED_PDS, CONFIG_SCHED_ALT, CONFIG_SCHED_BORE, CONFIG_CACHY, CONFIG_ACPI, CONFIG_ACPI_CPPC_LIB
  1. Clone the source code into a working directory.
git clone https://github.com/cyring/CoreFreq.git
  1. Build the programs.
cd CoreFreq
make -j
cc  -Wall -Wfatal-errors -Wno-unused-variable -pthread -c x86_64/corefreqd.c \
  -D CORE_COUNT=256 -D TASK_ORDER=5 -D MAX_FREQ_HZ=7125000000 -D UBENCH=0 -D DELAY_TSC=1 \
  -o build/corefreqd.o
cc  -Wall -Wfatal-errors -Wno-unused-variable -c x86_64/corefreqm.c \
  -D CORE_COUNT=256 -D TASK_ORDER=5 -D MAX_FREQ_HZ=7125000000 -D UBENCH=0 -D DELAY_TSC=1 \
  -o build/corefreqm.o
cc  -Wall -Wfatal-errors -Wno-unused-variable -c x86_64/corefreq-cli.c \
  -D CORE_COUNT=256 -D TASK_ORDER=5 -D MAX_FREQ_HZ=7125000000 -D UBENCH=0 -D DELAY_TSC=1  \
  -o build/corefreq-cli.o
cc  -Wall -Wfatal-errors -Wno-unused-variable -c x86_64/corefreq-ui.c \
  -D CORE_COUNT=256 -D TASK_ORDER=5 -D MAX_FREQ_HZ=7125000000 -D UBENCH=0 -D DELAY_TSC=1 \
  -o build/corefreq-ui.o
cc  -Wall -Wfatal-errors -Wno-unused-variable -c x86_64/corefreq-cli-rsc.c \
  -D CORE_COUNT=256 -D TASK_ORDER=5 -D MAX_FREQ_HZ=7125000000 -D UBENCH=0 -D DELAY_TSC=1  \
  -o build/corefreq-cli-rsc.o
cc  -Wall -Wfatal-errors -Wno-unused-variable -c x86_64/corefreq-cli-json.c \
  -D CORE_COUNT=256 -D TASK_ORDER=5 -D MAX_FREQ_HZ=7125000000 -D UBENCH=0 -D DELAY_TSC=1 \
  -o build/corefreq-cli-json.o
cc  -Wall -Wfatal-errors -Wno-unused-variable -c x86_64/corefreq-cli-extra.c \
  -D CORE_COUNT=256 -D TASK_ORDER=5 -D MAX_FREQ_HZ=7125000000 -D UBENCH=0 -D DELAY_TSC=1 \
  -o build/corefreq-cli-extra.o
cc  -Wall -Wfatal-errors -Wno-unused-variable x86_64/corefreqd.c x86_64/corefreqm.c \
  -D CORE_COUNT=256 -D TASK_ORDER=5 -D MAX_FREQ_HZ=7125000000 -D UBENCH=0 -D DELAY_TSC=1 \
  -o build/corefreqd -lpthread -lm -lrt
cc  -Wall -Wfatal-errors -Wno-unused-variable \
  x86_64/corefreq-cli.c x86_64/corefreq-ui.c x86_64/corefreq-cli-rsc.c \
  x86_64/corefreq-cli-json.c x86_64/corefreq-cli-extra.c \
  -D CORE_COUNT=256 -D TASK_ORDER=5 -D MAX_FREQ_HZ=7125000000 -D UBENCH=0 -D DELAY_TSC=1  \
  -o build/corefreq-cli -lm -lrt
make[1]: Entering directory '/usr/lib/modules/x.y.z/build'
  CC [M]  CoreFreq/build/module/corefreqk.o
  LD [M]  CoreFreq/build/corefreqk.o
  MODPOST CoreFreq/build/Module.symvers
  CC [M]  CoreFreq/build/corefreqk.mod.o
  LD [M]  CoreFreq/build/corefreqk.ko
  BTF [M] CoreFreq/build/corefreqk.ko
make[1]: Leaving directory '/usr/lib/modules/x.y.z/build
  1. (Optionally) Sign the driver If module signature verification is enabled into Kernel, you will have to sign the corefreqk.ko driver.

Install

Manual

  1. Copying CoreFreq into the binaries directory
make install

Distribution package

  1. Although CoreFreq is released in the ArchLinux AUR ; other sources of distribution may require to reload the systemd daemons:
systemctl daemon-reload

Start

  1. When built from source code:
  • Load the kernel module, from current directory, as root.
insmod build/corefreqk.ko
  • Start the daemon, as root.
./build/corefreqd
  • Start the client, as a user (in another terminal or console).
./build/corefreq-cli
  1. When manually installed or from a distribution package:
  • Load the kernel module, as root.
modprobe corefreqk
  • Start the daemon, as root.
systemctl start corefreqd
  • Start the client, as a user.
corefreq-cli

Stop

  1. Press Ctrl+x or Ctrl+c to stop the client.

  2. Press Ctrl+c to stop the daemon (in foreground) or kill its background job.

  3. Unload the kernel module

rmmod corefreqk.ko

Try

Download the CoreFreq Live CD from the Wiki
alt text

Screenshots

Linux kernel module

Use lsmod, dmesg or journalctl -k to check if the module is started:

CoreFreq(14:30:-1): Processor [ 8F_71] Architecture [Zen2/Matisse] SMT [32/32]

Daemon

CoreFreq Daemon #.##.#  Copyright (C) 2015-2024 CYRIL COURTIAT

  Processor [AMD Ryzen 9 3950X 16-Core Processor]
  Architecture [Zen2/Matisse] 32/32 CPU Online.

Client

Without arguments, the corefreq-cli program displays Top Monitoring
alt text
Remark: Drawing will stall if the terminal width is lower than 80 columns, or its height is less than required.

  • Memory Controller

alt text

  • With the option -c, the client traces counters

alt text

  • Using option -m corefreq-cli shows the CPU topology

alt text

  • With the option -i corefreq-cli traces the number of instructions per second / cycle
CPU     IPS            IPC            CPI
#00     0.000579/s     0.059728/c    16.742698/i
#01     0.000334/s     0.150569/c     6.641471/i
#02     0.000598/s     0.161326/c     6.198641/i
#03     0.000294/s     0.233535/c     4.282013/i
#04     0.000240/s     0.042931/c    23.293141/i
#05     0.000284/s     0.158661/c     6.302765/i
#06     0.000128/s     0.128031/c     7.810631/i
#07     0.000088/s     0.150406/c     6.648674/i
  • Use the option -s to show the Processor information (BSP)

alt text

ArchLinux

  • corefreq follows released tags

Gentoo Linux

Debian, Ubuntu, TUXEDO

  • Installing the DKMS package will pull the Kernel development packages
apt install dkms
  • Or install the kernel development prerequisites.
apt list git build-essential gawk fakeroot linux-headers*

Red Hat, CentOS, AlmaLinux

  • Development packages prerequisites.
yum install kernel-devel
yum group install "Development Tools"

openSUSE

  • Packages
  1. CoreFreq official release
  2. CoreFreq-kmp-default

ProxMox

Install Tools

apt-get install build-essential dkms git libpthread-stubs0-dev

Install headers related to your kernel

apt install pve-headers-`uname -r`

git clone https://github.com/cyring/CoreFreq.git
cd CoreFreq && make

Install the module in the system, refresh it and start it

make install
depmod
modprobe corefreqk
systemctl start corefreqd

Unraid

  • Plugin
  1. corefreq.plg from ich777/unraid-corefreq
  2. Based on latest developments, please contact ich777

Alpine

## Install the kernel development packages
apk add alpine-sdk sed installkernel bc nawk diffutils findutils pahole openssl-dev python3 linux-virt linux-virt-dev

Chimera

## Install the kernel development packages
doas apk add git ckms gmake clang linux-headers linux-lts-devel
## Add the CoreFreq directory containing the ckms.ini file
doas ckms add CoreFreq/
## Build the CoreFreq version M.m.r
doas ckms build corefreqk=M.m.r
## Or manually if using the Clang compiler
gmake CC=clang

Q&A

  • Q: How many CPUs are supported by CoreFreq ?

    A: Up to 1024 CPUs can be built using the make CORE_COUNT option. 256 as a default.

  • Q: Turbo Technology is activated however CPUs don't reach those frequencies ?

  • Q: The CPU ratio does not go above its minimum value ?

  • Q: The UI shows erratic counters values !

    A: In the kernel boot command argument line, disable the NMI Watchdog
    nmi_watchdog=0

  • Q: The Processor does not enter the C-States ?

    A1: Check if at least one Idle driver is running.
    Accordingly to the Processor specs, provide a max_cstate value in the kernel argument as below.
    intel_idle.max_cstate=value

    A2: CoreFreq can also register itself as a cpuidle driver.
    This time, any idle driver will have to be blacklisted in the kernel command line; such as:
    modprobe.blacklist=intel_cstate idle=halt intel_idle.max_cstate=0
    Start the CoreFreq driver with the Register_CPU_Idle parameter:
    insmod corefreqk.ko Register_CPU_Idle=1

  • Q: The CoreFreq UI refreshes itself slowly, with a delay after the actual CPUs usage ?

    A: The sampling time to read the counters can be reduced or increased using a CoreFreq module argument:
    insmod corefreqk.ko SleepInterval=value
    where <value> is supplied in milliseconds between a minimum of 100 ms and a maximum of 4500 ms. 1000 ms is the default value.

  • Q: The base clock reports a wrong frequency value ?

    A: CoreFreq uses various algorithms to estimate the base clock.

    1. The delta of two TimeStamp counters during a defined interval
    2. The value provided in the Processor brand string divided by the maximum ratio (without Turbo)
    3. A static value advertised by the manufacturer specs.
    4. The MSR_FSB_FREQ bits provided with the Core, Core2 and Atom architectures.

    The CoreFreq module can be started as follow to ignore the first algorithm (frequency estimation):
    insmod corefreqk.ko AutoClock=0

    Remark: algorithms # 2, 3 and 4 will not return any under/over-clock frequency.

  • Q: The CPU temperature is wrong ?

    A: CoreFreq employs two MSR registers to calculate the temperature.
    MSR_IA32_TEMPERATURE_TARGET - MSR_IA32_THERM_STATUS [DTS]

    Remark: if the MSR_IA32_TEMPERATURE_TARGET is not provided by the Processor, a default value of 100 degree Celsius is considered as a target.

  • Q: The menu option "Memory Controller" does not open any window ?

    A: Although Uncore and IMC features are under development, they can be activated with the Experimental driver argument:
    insmod corefreqk.ko Experimental=1

  • Q: The Instructions and PMC0 counters are stuck to zero ?

  • Q: The Daemon crashes whenever its stress tools are executing !

    A: The PCE bit of control register CR4 allows RDPMC in ring 3
    echo "2" > /sys/devices/cpu/rdpmc
    or using systemd, create file /etc/tmpfiles.d/boot.conf and add line:
    w /sys/devices/cpu/rdpmc - - - - 2

    Next, load the driver with the RDPMC_Enable argument to override the CR4 register:
    insmod corefreqk.ko RDPMC_Enable=1

  • Q: How to solely control the P-States or the HWP Performance States ?

    A1: Without the Kernel cpufreq framework (aka CONFIG_CPU_FREQ), CoreFreq will take the full control over P-States.
    This allow the User to select a capped frequency from the UI, either per Core, either for the whole Processor.

    A2: With cpufreq built into Kernel, allow CoreFreq to register as a cpufreq driver.
    In the Kernel boot command line, blacklist any P-state driver; such as:
    modprobe.blacklist=acpi_cpufreq,pcc_cpufreq intel_pstate=disable

    • hardware CPPC (MSR registers)
      initcall_blacklist=amd_pstate_init

    • firmware CPPC (ACPI registers)
      amd_pstate.shared_mem=0 and/or initcall_blacklist=acpi_cpufreq_init

  1. load the CoreFreq driver with its Register_CPU_Freq parameter:
    insmod corefreqk.ko Register_CPU_Freq=1
  • Q: Governor is missing in Kernel window even after a successful registration.

    A: When Registrations are done through the UI, they have to be done in the following order:

  1. Clock Source
  2. Governor driver
  3. CPU-FREQ driver
  4. CPU-IDLE driver
  5. CPU-IDLE route
  • Q: The CPU freezes or the System crashes.

    A1: Changing the Max ratio frequency (aka P0 P-State) makes the Kernel TSC clock source unstable.

    1. Boot the Kernel with these command line parameters notsc nowatchdog
    2. Optionally, build the CoreFreq driver with its udelay() TSC implementation
      make DELAY_TSC=1
    3. Allow CoreFreq to register a new TSC clock source using driver arguments:
      insmod corefreqk.ko TurboBoost_Enable=0 Register_ClockSource=1
    4. Switch the current system clock source to corefreq
      echo "corefreq" > /sys/devices/system/clocksource/clocksource0/current_clocksource

    A2: [AMD][Zen] SMU:
    CoreFreq CPU monitoring loops are executed in an interrupt context where any blocking call like Mutex will freeze the kernel.
    As a recommendation, make sure no other SMU driver is running.

    A3: This Processor is not or partially implemented in CoreFreq.
    Please open an issue in the CPU support Wiki page.

  • Q: No voltage is showing up with Nehalem or Westmere processors ?

    A: Build CoreFreq as below if one of those chips is present:
    make HWM_CHIPSET=W83627
    or
    make HWM_CHIPSET=IT8720

  • Q: [AMD][Zen] How to read the idle states ?

    A: As a workarround to the missing documentation of the hardware counters, CoreFreq implements virtual counters based on the TSC
    Those VPMC are estimated each time the Kernel is entering an idle state level.
    The prerequisities are:

    1. Boot the Kernel without its idle drivers and no TSC default clock source set
      modprobe.blacklist=acpi_cpufreq idle=halt tsc=unstable
    2. Build CoreFreq with its TSC implementation
      make DELAY_TSC=1
    3. Load and register the CoreFreq kernel module as the system handler
      insmod corefreqk.ko Register_ClockSource=1 Register_Governor=1 Register_CPU_Freq=1 Register_CPU_Idle=1 Idle_Route=1
    4. Define CoreFreq as the System clock source
      echo "corefreq" > /sys/devices/system/clocksource/clocksource0/current_clocksource
    5. Start the Daemon then the Client
      alt text
    • The registration is confirmed into the Settings window
    • The idle limit can be changed at any time in the Kernel window
      alt text
  • Q: How does CoreFreq work with cgroups ?

    A: The Daemon and the Client have to run in the root cgroups cpugroup, by using these commands:
    ( thanks to Conne Beest @connebeest )
    cgexec -g cpuset:/ ./corefreqd
    cgexec -g cpuset:/ ./cofrefreq-cli

  • Q: How to enable transparency in the User Interface ?

    A: Transparency is a build option invoked by the compilation directive UI_TRANSPARENCY

    1. Build the project with UI_TRANSPARENCY enabled
      make UI_TRANSPARENCY=1
    2. Start the Client with one of its transparency compatible colors theme
      corefreq-cli -OE 2 -t
    3. Or switch to that theme from Menu > Theme, shortcut [E]
  • Q: How to screenshot the UI ?

    A: Press [Ctrl]+[p] to save the screen to a rich ascii file. Use the cat or less -R command to view the file saved with an asc extension.

  • Q: How to record the UI ?

    A: Press [Alt]+[p] to record the screen for the duration set in Settings. A compatible asciinema file is saved in the current directory with a cast extension.

  • Q: What are the build options for CoreFreq ?

    A: Enter make help to display them:

o---------------------------------------------------------------o
|  make [all] [clean] [info] [help] [install] [module-install]  |
|                                                               |
|  CC=<COMPILER>                                                |
|    where <COMPILER> is cc, gcc, clang                         |
|                                                               |
|  WARNING=<ARG>                                                |
|    where default argument is -Wall                            |
|                                                               |
|  KERNELDIR=<PATH>                                             |
|    where <PATH> is the Kernel source directory                |
|                                                               |
|  CORE_COUNT=<N>                                               |
|    where <N> is 64, 128, 256, 512 or 1024 builtin CPU         |
|                                                               |
|  LEGACY=<L>                                                   |
|    where level <L>                                            |
|    1: assembly level restriction such as CMPXCHG16            |
|                                                               |
|  UBENCH=<N>                                                   |
|    where <N> is 0 to disable or 1 to enable micro-benchmark   |
|                                                               |
|  TASK_ORDER=<N>                                               |
|    where <N> is the memory page unit of kernel allocation     |
|                                                               |
|  FEAT_DBG=<N>                                                 |
|    where <N> is 0 or N for FEATURE DEBUG level                |
|    3: XMM assembly in RING operations                         |
|                                                               |
|  DELAY_TSC=<N>                                                |
|    where <N> is 1 to build a TSC implementation of udelay()   |
|                                                               |
|  OPTIM_LVL=<N>                                                |
|    where <N> is 0, 1, 2 or 3 of the OPTIMIZATION level        |
|                                                               |
|  MAX_FREQ_HZ=<freq>                                           |
|    where <freq> is at least 4850000000 Hz                     |
|                                                               |
|  HWM_CHIPSET=<chipset>                                        |
|    where <chipset> is W83627 or IT8720 or COMPATIBLE          |
|                                                               |
|  Performance Counters:                                        |
|    -------------------------------------------------------    |
|   |     MSR_CORE_PERF_UCC     |     MSR_CORE_PERF_URC     |   |
|   |----------- REG -----------|----------- REG -----------|   |
|   | MSR_IA32_APERF            |  MSR_IA32_MPERF           |   |
|   | MSR_CORE_PERF_FIXED_CTR1  |  MSR_CORE_PERF_FIXED_CTR2 |   |
|   | MSR_PPERF                 |  MSR_PPERF                |   |
|   | MSR_AMD_F17H_APERF        |  MSR_AMD_F17H_MPERF       |   |
|    -------------------------------------------------------    |
|                                                               |
|  Architectural Counters:                                      |
|    -------------------------------------------------------    |
|   |           Intel           |            AMD            |   |
|   |----------- REG -----------|----------- REG -----------|   |
|   |       ARCH_PMC=PCU        |      ARCH_PMC=L3          |   |
|   |                           |      ARCH_PMC=PERF        |   |
|   |                           |      ARCH_PMC=UMC         |   |
|    -------------------------------------------------------    |
|                                                               |
|  User Interface Layout:                                       |
|    NO_HEADER=<F>  NO_FOOTER=<F>  NO_UPPER=<F>  NO_LOWER=<F>   |
|      when <F> is 1: don't build and display this area part    |
|    UI_TRANSPARENCY=<F>                                        |
|      when <F> is 1: build with background transparency        |
|                                                               |
|  Example:                                                     |
|    make CC=gcc OPTIM_LVL=3 FEAT_DBG=1 ARCH_PMC=PCU            |
|         MSR_CORE_PERF_UCC=MSR_CORE_PERF_FIXED_CTR1            |
|         MSR_CORE_PERF_URC=MSR_CORE_PERF_FIXED_CTR2            |
|         HWM_CHIPSET=W83627 MAX_FREQ_HZ=5350000000             |
|         CORE_COUNT=1024 NO_FOOTER=1 NO_UPPER=1                |
|         clean all                                             |
o---------------------------------------------------------------o
  • Q: What are the parameters of the CoreFreq driver ?

    A: Use the modinfo command to list them:

$ modinfo corefreqk.ko
parm:           ArchID:Force an architecture (ID) (int)
parm:           AutoClock:Estimate Clock Frequency 0:Spec; 1:Once; 2:Auto (int)
parm:           SleepInterval:Timer interval (ms) (uint)
parm:           TickInterval:System requested interval (ms) (uint)
parm:           Experimental:Enable features under development (int)
parm:           CPU_Count:-1:Kernel(default); 0:Hardware; >0: User value (int)
parm:           Target_Ratio_Unlock:1:Target Ratio Unlock; 0:Lock (short)
parm:           Clock_Ratio_Unlock:1:MinRatio; 2:MaxRatio; 3:Both Unlock (short)
parm:           Turbo_Ratio_Unlock:1:Turbo Ratio Unlock; 0:Lock (short)
parm:           Uncore_Ratio_Unlock:1:Uncore Ratio Unlock; 0:Lock (short)
parm:           ServiceProcessor:Select a CPU to run services with (int)
parm:           RDPMC_Enable:Enable RDPMC bit in CR4 register (ushort)
parm:           NMI_Disable:Disable the NMI Handler (ushort)
parm:           Override_SubCstate:Override Sub C-States (array of ushort)
parm:           PkgCStateLimit:Package C-State Limit (short)
parm:           IOMWAIT_Enable:I/O MWAIT Redirection Enable (short)
parm:           CStateIORedir:Power Mgmt IO Redirection C-State (short)
parm:           Config_TDP_Level:Config TDP Control Level (short)
parm:           Custom_TDP_Offset:TDP Limit Offset (watt) (array of short)
parm:           Activate_TDP_Limit:Activate TDP Limiting (array of short)
parm:           Activate_TDP_Clamp:Activate TDP Clamping (array of short)
parm:           Custom_TDC_Offset:TDC Limit Offset (amp) (short)
parm:           Activate_TDC_Limit:Activate TDC Limiting (short)
parm:           L1_HW_PREFETCH_Disable:Disable L1 HW Prefetcher (short)
parm:           L1_HW_IP_PREFETCH_Disable:Disable L1 HW IP Prefetcher (short)
parm:           L1_NPP_PREFETCH_Disable:Disable L1 NPP Prefetcher (short)
parm:           L1_Scrubbing_Enable:Enable L1 Scrubbing (short)
parm:           L2_HW_PREFETCH_Disable:Disable L2 HW Prefetcher (short)
parm:           L2_HW_CL_PREFETCH_Disable:Disable L2 HW CL Prefetcher (short)
parm:           L2_AMP_PREFETCH_Disable:Adaptive Multipath Probability (short)
parm:           L2_NLP_PREFETCH_Disable:Disable L2 NLP Prefetcher (short)
parm:           L1_STRIDE_PREFETCH_Disable:Disable L1 Stride Prefetcher (short)
parm:           L1_REGION_PREFETCH_Disable:Disable L1 Region Prefetcher (short)
parm:           L1_BURST_PREFETCH_Disable:Disable L1 Burst Prefetcher (short)
parm:           L2_STREAM_PREFETCH_Disable:Disable L2 Stream Prefetcher (short)
parm:           L2_UPDOWN_PREFETCH_Disable:Disable L2 Up/Down Prefetcher (short)
parm:           LLC_Streamer_Disable:Disable LLC Streamer (short)
parm:           SpeedStep_Enable:Enable SpeedStep (short)
parm:           C1E_Enable:Enable SpeedStep C1E (short)
parm:           TurboBoost_Enable:Enable Turbo Boost (array of short)
parm:           C3A_Enable:Enable C3 Auto Demotion (short)
parm:           C1A_Enable:Enable C3 Auto Demotion (short)
parm:           C3U_Enable:Enable C3 UnDemotion (short)
parm:           C1U_Enable:Enable C1 UnDemotion (short)
parm:           CC6_Enable:Enable Core C6 State (short)
parm:           PC6_Enable:Enable Package C6 State (short)
parm:           ODCM_Enable:Enable On-Demand Clock Modulation (short)
parm:           ODCM_DutyCycle:ODCM DutyCycle [0-7] | [0-14] (short)
parm:           PowerMGMT_Unlock:Unlock Power Management (short)
parm:           PowerPolicy:Power Policy Preference [0-15] (short)
parm:           Turbo_Activation_Ratio:Turbo Activation Ratio (short)
parm:           PState_FID:P-State Frequency Id (int)
parm:           PState_VID:P-State Voltage Id (int)
parm:           Ratio_Boost:Turbo Boost Frequency ratios (array of int)
parm:           Ratio_PPC:Target Performance ratio (int)
parm:           HWP_Enable:Hardware-Controlled Performance States (short)
parm:           HWP_EPP:Energy Performance Preference (short)
parm:           Ratio_HWP:Hardware-Controlled Performance ratios (array of int)
parm:           HDC_Enable:Hardware Duty Cycling (short)
parm:           EEO_Disable:Disable Energy Efficiency Optimization (short)
parm:           R2H_Disable:Disable Race to Halt (short)
parm:           Clear_Events:Clear Thermal and Power Events (ullong)
parm:           ThermalOffset:Thermal Offset (short)
parm:           ThermalScope:[0:None; 1:SMT; 2:Core; 3:Package] (int)
parm:           VoltageScope:[0:None; 1:SMT; 2:Core; 3:Package] (int)
parm:           PowerScope:[0:None; 1:SMT; 2:Core; 3:Package] (int)
parm:           Register_CPU_Idle:Register the Kernel cpuidle driver (short)
parm:           Register_CPU_Freq:Register the Kernel cpufreq driver (short)
parm:           Register_Governor:Register the Kernel governor (short)
parm:           Register_ClockSource:Register Clock Source driver (short)
parm:           Idle_Route:[0:Default; 1:I/O; 2:HALT; 3:MWAIT] (short)
parm:           Mech_IBRS:Mitigation Mechanism IBRS (short)
parm:           Mech_STIBP:Mitigation Mechanism STIBP (short)
parm:           Mech_SSBD:Mitigation Mechanism SSBD (short)
parm:           Mech_IBPB:Mitigation Mechanism IBPB (short)
parm:           Mech_L1D_FLUSH:Mitigation Mechanism Cache L1D Flush (short)
parm:           Mech_PSFD:Mitigation Mechanism PSFD (short)
parm:           Mech_BTC_NOBR:Mitigation Mechanism BTC-NOBR (short)
parm:           Mech_XPROC_LEAK:Mitigation Mech. Cross Processor Leak (short)
parm:           Mech_AGENPICK:Mitigation Mech. LsCfgDisAgenPick (short)
parm:           WDT_Enable:Watchdog Hardware Timer (short)
parm:           HSMP_Attempt:Attempt the HSMP interface (short)

Arm [AArch64]

Screenshots

alt text

Q&A

  • Q: Counters are stuck to zero

    A: Add parameter nohlt to the kernel boot command line.


Algorithm

alt text

About

CyrIng

Copyright (C) 2015-2024 CYRIL COURTIAT

corefreq's People

Contributors

altmind avatar baryluk avatar cyring avatar inglor avatar jlacvdr avatar johnazoidberg avatar kamahat avatar leaty avatar lwiechec avatar paulyc avatar savetherbtz avatar vitaly-zdanevich avatar zegelin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

corefreq's Issues

Ubuntu 14.04 segmentation fault

Hi man, this software is amazing, but when i start the client, i two or three seconds it give me a segmentation fault.

Environment:
Ubuntu 14.04
64 bits
Intel Core 2 duo
4GB RAM

Here is a screenshot:

segmentation

Garbage colors in Technology window

Between last right character and vertical border appears garbage or transparent color.

Apparently the Attributes buffer length is not long enough to cover the inside window area.

It would be great to see the uncore clocks

Much of this tool shows is already included in the turbostat tool included in most distributions (but the UI is much nicer!) - but showing the uncore clock(s) would be something awesome and new.

Program received signal SIGSEGV, Segmentation fault.

Crashes when pushing cpu to 100%. (compiling nodejs with make -j8)

Program received signal SIGSEGV, Segmentation fault.
#0  0x00007ffff764a99f in __memset_avx2_unaligned_erms () from /usr/lib/libc.so.6
#1  0x000000000040ab37 in Top () at corefreq-cli.c:4473
#2  0x000000000042530a in main (argc=1, argv=0x7fffffffde78) at corefreq-cli.c:5028

Processor crash due to code regression

Last commit has changed the Experimental driver argument non longer checked when querying PCI. Code is OK with Nehalem class processors.
However other architectures may involve the same function, such as QPI, where PCI registers are differently configured.

A white list with the successful architectures tests will be implemented to limit access to PCI

client coredumping a lot

-rw-r-----+ 1 root root 46225 22 avril 16:02 core.corefreq-cli.1000.e9f5528312614f4a889ff9e36bfd86c9.30313.1492869733000000000000.lz4
-rw-r-----+ 1 root root 45999 22 avril 16:03 core.corefreq-cli.1000.e9f5528312614f4a889ff9e36bfd86c9.30367.1492869798000000000000.lz4
-rw-r-----+ 1 root root 53244 22 avril 16:10 core.corefreq-cli.1000.e9f5528312614f4a889ff9e36bfd86c9.31486.1492870200000000000000.lz4
-rw-r-----+ 1 root root 47032 22 avril 16:11 core.corefreq-cli.1000.e9f5528312614f4a889ff9e36bfd86c9.31570.1492870286000000000000.lz4
-rw-r-----+ 1 root root 46208 22 avril 16:11 core.corefreq-cli.1000.e9f5528312614f4a889ff9e36bfd86c9.31746.1492870293000000000000.lz4
-rw-r-----+ 1 root root 46236 22 avril 16:11 core.corefreq-cli.1000.e9f5528312614f4a889ff9e36bfd86c9.31763.1492870301000000000000.lz4
-rw-r-----+ 1 root root 44063 22 avril 16:11 core.corefreq-cli.1000.e9f5528312614f4a889ff9e36bfd86c9.31789.1492870304000000000000.lz4
-rw-r-----+ 1 root root 46158 22 avril 16:11 core.corefreq-cli.1000.e9f5528312614f4a889ff9e36bfd86c9.31807.1492870308000000000000.lz4
-rw-r-----+ 1 root root 46200 22 avril 16:11 core.corefreq-cli.1000.e9f5528312614f4a889ff9e36bfd86c9.31826.1492870315000000000000.lz4

[plonky@netmonk CoreFreq]$ coredumpctl gdb corefreq-cli
PID: 31826 (corefreq-cli)
UID: 1000 (plonky)
GID: 100 (users)
Signal: 11 (SEGV)
Timestamp: Sat 2017-04-22 16:11:55 CEST (2min 9s ago)
Command Line: ./corefreq-cli
Executable: /home/plonky/work/CoreFreq/corefreq-cli
Control Group: /user.slice/user-1000.slice/session-c1.scope
Unit: session-c1.scope
Slice: user-1000.slice
Session: c1
Owner UID: 1000 (plonky)
Boot ID: e9f5528312614f4a889ff9e36bfd86c9
Machine ID: b6b4ab29a58b486a803dfb751f2caca6
Hostname: netmonk
Storage: /var/lib/systemd/coredump/core.corefreq-cli.1000.e9f5528312614f4a889ff9e36bfd86c9.31826.1492870315000000000000.lz4
Message: Process 31826 (corefreq-cli) of user 1000 dumped core.

            Stack trace of thread 31826:
            #0  0x00007f8ca286aeb3 __memcpy_sse2_unaligned_erms (libc.so.6)
            #1  0x000000000040ac3e Top (corefreq-cli)
            #2  0x000000000042530a main (corefreq-cli)
            #3  0x00007f8ca2807291 __libc_start_main (libc.so.6)
            #4  0x0000000000400eea _start (corefreq-cli)

Missing parentheses in macro

win->matrix.origin.col + win->lazyComp.rowLen,

LayerFillAt(layer, hProc0.origin.col + hProc0.length, hProc0.origin.row,

LayerFillAt(layer, hProc0.origin.col + hProc0.length + len,

LayerFillAt(layer, hArch0.origin.col + hArch0.length, hArch0.origin.row,

LayerFillAt(layer, hArch0.origin.col + hArch0.length + len,

hBClk1.origin.col - hBClk0.origin.col + hBClk0.length,

.origin = { .col = LOAD_LEAD - 1,

.length = MAX_WIDTH - LOAD_LEAD + 1,

.col = drawSize.width - 18,

.col = drawSize.width - 34,

LayerAt(layer, code, LOAD_LEAD - 1, row) = (cpu == iClock)?

Won't have side effects with define constant but would be if changed to integer variable.

LayerAt(layer, attr, LOAD_LEAD + 69, row) =

LayerAt(layer, attr, LOAD_LEAD + 70, row) =

LayerAt(layer, attr, LOAD_LEAD + 71, row) = warning;

sprintf((char *) &LayerAt(layer,code,LOAD_LEAD+24,row), \

Core 2 Duo T7xxx : UI memory fault

Issue:
With Core 2 Duo T7xxx processors UCC URC TSC msr counters have unexpected values when IDA is engaged.
This results in unknown ratios computation and those ratios are used to index arrays in the UI, thus addresses are read & write out of the buffer limits.

i have same problem too

hi i have same problem too what should i do?

[root@s129644 CoreFreq]# make
make -C /lib/modules/3.10.0-693.21.1.el7.x86_64/build M=/root/CoreFreq modules
make: *** /lib/modules/3.10.0-693.21.1.el7.x86_64/build: No such file or directory. Stop.
make: *** [all] Error 2
[root@s129644 CoreFreq]#

Intel Xeon Processor 7500, E7 Family based on microarchitecture Westmere

These processors of architecture Westmere have a CPUID signature with DisplayFamily_DisplayModel equal to 06_2EH , 06_2FH

MSR_TURBO_RATIO_LIMIT (1ADH) : Attempt to read/write will cause #UD.

Don't run CoreFreq with these processors : it requires a new algorithm to enumerate ratios.

More information in tables § 35.6.2 and § 35-17 from the Intel® 64 and IA-32 Architectures Software Developer’s Manual Vol. 3C

Q: How to query Turbo ratios ?

Query the Kernel idle driver per CPU

Impacted source code:

IDLEDRIVER IdleDriver;

long SysGate_OnDemand(void)

long Sys_IdleDriver_Query(SYSGATE *SysGate)

IDLEDRIVER IdleDriver;

int SysGate_OnDemand(FD *fd, SYSGATE **SysGate, int operation)

void SysGate_IdleDriver(SHM_STRUCT *Shm, SYSGATE *SysGate)

void SysInfoKernel( SHM_STRUCT *Shm, CUINT width,

len, Shm->SysGate.IdleDriver.Name,

Detects only 16Cores/16THreads (2x xeon x5650, 12Cores/24Threads)

Hi

my setup is a dual Xeon x5650 (Westmere), this cpu have 6 physical cores (12Threads) each one

corefreqk show this in dmesg:

[102105.255176] CoreFreq: Processor [06_2C] Architecture [Westmere/EP] CPU [16/16]

and the program show

(yakuake in Plasma5)

also have a little deface in it (see the top)

greetings

Errors

Hi guys

Can you somone help mi with this ?

corefreq-cli.c:6430: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6430: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6430: warning: excess elements in union initializer
corefreq-cli.c:6430: warning: (near initialization for ‘hUncore.attr[8]’)
corefreq-cli.c:6430: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6430: warning: excess elements in union initializer
corefreq-cli.c:6430: warning: (near initialization for ‘hUncore.attr[8]’)
corefreq-cli.c:6430: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6430: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6430: warning: excess elements in union initializer
corefreq-cli.c:6430: warning: (near initialization for ‘hUncore.attr[9]’)
corefreq-cli.c:6430: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6430: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6430: warning: excess elements in union initializer
corefreq-cli.c:6430: warning: (near initialization for ‘hUncore.attr[10]’)
corefreq-cli.c:6430: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6430: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6430: warning: excess elements in union initializer
corefreq-cli.c:6430: warning: (near initialization for ‘hUncore.attr[11]’)
corefreq-cli.c:6430: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6430: warning: excess elements in union initializer
corefreq-cli.c:6430: warning: (near initialization for ‘hUncore.attr[11]’)
corefreq-cli.c: In function ‘Layout_Card_Bus’:
corefreq-cli.c:6451: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6451: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6451: warning: excess elements in union initializer
corefreq-cli.c:6451: warning: (near initialization for ‘hBus.attr[0]’)
corefreq-cli.c:6451: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6451: warning: excess elements in union initializer
corefreq-cli.c:6451: warning: (near initialization for ‘hBus.attr[0]’)
corefreq-cli.c:6451: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6451: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6451: warning: excess elements in union initializer
corefreq-cli.c:6451: warning: (near initialization for ‘hBus.attr[1]’)
corefreq-cli.c:6451: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6451: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6451: warning: excess elements in union initializer
corefreq-cli.c:6451: warning: (near initialization for ‘hBus.attr[2]’)
corefreq-cli.c:6451: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6451: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6451: warning: excess elements in union initializer
corefreq-cli.c:6451: warning: (near initialization for ‘hBus.attr[3]’)
corefreq-cli.c:6451: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6451: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6451: warning: excess elements in union initializer
corefreq-cli.c:6451: warning: (near initialization for ‘hBus.attr[4]’)
corefreq-cli.c:6451: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6451: warning: excess elements in union initializer
corefreq-cli.c:6451: warning: (near initialization for ‘hBus.attr[4]’)
corefreq-cli.c:6451: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6451: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6451: warning: excess elements in union initializer
corefreq-cli.c:6451: warning: (near initialization for ‘hBus.attr[5]’)
corefreq-cli.c:6451: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6451: warning: excess elements in union initializer
corefreq-cli.c:6451: warning: (near initialization for ‘hBus.attr[5]’)
corefreq-cli.c:6451: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6451: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6451: warning: excess elements in union initializer
corefreq-cli.c:6451: warning: (near initialization for ‘hBus.attr[6]’)
corefreq-cli.c:6451: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6451: warning: excess elements in union initializer
corefreq-cli.c:6451: warning: (near initialization for ‘hBus.attr[6]’)
corefreq-cli.c:6451: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6451: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6451: warning: excess elements in union initializer
corefreq-cli.c:6451: warning: (near initialization for ‘hBus.attr[7]’)
corefreq-cli.c:6451: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6451: warning: excess elements in union initializer
corefreq-cli.c:6451: warning: (near initialization for ‘hBus.attr[7]’)
corefreq-cli.c:6451: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6451: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6451: warning: excess elements in union initializer
corefreq-cli.c:6451: warning: (near initialization for ‘hBus.attr[8]’)
corefreq-cli.c:6451: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6451: warning: excess elements in union initializer
corefreq-cli.c:6451: warning: (near initialization for ‘hBus.attr[8]’)
corefreq-cli.c:6451: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6451: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6451: warning: excess elements in union initializer
corefreq-cli.c:6451: warning: (near initialization for ‘hBus.attr[9]’)
corefreq-cli.c:6451: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6451: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6451: warning: excess elements in union initializer
corefreq-cli.c:6451: warning: (near initialization for ‘hBus.attr[10]’)
corefreq-cli.c:6451: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6451: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6451: warning: excess elements in union initializer
corefreq-cli.c:6451: warning: (near initialization for ‘hBus.attr[11]’)
corefreq-cli.c:6451: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6451: warning: excess elements in union initializer
corefreq-cli.c:6451: warning: (near initialization for ‘hBus.attr[11]’)
corefreq-cli.c: In function ‘Layout_Card_MC’:
corefreq-cli.c:6491: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6491: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6491: warning: excess elements in union initializer
corefreq-cli.c:6491: warning: (near initialization for ‘hRAM.attr[0]’)
corefreq-cli.c:6491: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6491: warning: excess elements in union initializer
corefreq-cli.c:6491: warning: (near initialization for ‘hRAM.attr[0]’)
corefreq-cli.c:6491: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6491: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6491: warning: excess elements in union initializer
corefreq-cli.c:6491: warning: (near initialization for ‘hRAM.attr[1]’)
corefreq-cli.c:6491: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6491: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6491: warning: excess elements in union initializer
corefreq-cli.c:6491: warning: (near initialization for ‘hRAM.attr[2]’)
corefreq-cli.c:6491: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6491: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6491: warning: excess elements in union initializer
corefreq-cli.c:6491: warning: (near initialization for ‘hRAM.attr[3]’)
corefreq-cli.c:6491: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6491: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6491: warning: excess elements in union initializer
corefreq-cli.c:6491: warning: (near initialization for ‘hRAM.attr[4]’)
corefreq-cli.c:6491: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6491: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6491: warning: excess elements in union initializer
corefreq-cli.c:6491: warning: (near initialization for ‘hRAM.attr[5]’)
corefreq-cli.c:6491: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6491: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6491: warning: excess elements in union initializer
corefreq-cli.c:6491: warning: (near initialization for ‘hRAM.attr[6]’)
corefreq-cli.c:6491: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6491: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6491: warning: excess elements in union initializer
corefreq-cli.c:6491: warning: (near initialization for ‘hRAM.attr[7]’)
corefreq-cli.c:6491: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6491: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6491: warning: excess elements in union initializer
corefreq-cli.c:6491: warning: (near initialization for ‘hRAM.attr[8]’)
corefreq-cli.c:6491: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6491: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6491: warning: excess elements in union initializer
corefreq-cli.c:6491: warning: (near initialization for ‘hRAM.attr[9]’)
corefreq-cli.c:6491: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6491: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6491: warning: excess elements in union initializer
corefreq-cli.c:6491: warning: (near initialization for ‘hRAM.attr[10]’)
corefreq-cli.c:6491: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6491: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6491: warning: excess elements in union initializer
corefreq-cli.c:6491: warning: (near initialization for ‘hRAM.attr[11]’)
corefreq-cli.c:6491: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6491: warning: excess elements in union initializer
corefreq-cli.c:6491: warning: (near initialization for ‘hRAM.attr[11]’)
corefreq-cli.c: In function ‘Layout_Card_Load’:
corefreq-cli.c:6530: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6530: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[0]’)
corefreq-cli.c:6530: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[0]’)
corefreq-cli.c:6530: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6530: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[1]’)
corefreq-cli.c:6530: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[1]’)
corefreq-cli.c:6530: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6530: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[2]’)
corefreq-cli.c:6530: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[2]’)
corefreq-cli.c:6530: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6530: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[3]’)
corefreq-cli.c:6530: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[3]’)
corefreq-cli.c:6530: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6530: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[4]’)
corefreq-cli.c:6530: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6530: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[5]’)
corefreq-cli.c:6530: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6530: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[6]’)
corefreq-cli.c:6530: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6530: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[7]’)
corefreq-cli.c:6530: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6530: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[8]’)
corefreq-cli.c:6530: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[8]’)
corefreq-cli.c:6530: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6530: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[9]’)
corefreq-cli.c:6530: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[9]’)
corefreq-cli.c:6530: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6530: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[10]’)
corefreq-cli.c:6530: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[10]’)
corefreq-cli.c:6530: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6530: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[11]’)
corefreq-cli.c:6530: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6530: warning: excess elements in union initializer
corefreq-cli.c:6530: warning: (near initialization for ‘hLoad.attr[11]’)
corefreq-cli.c: In function ‘Layout_Card_Idle’:
corefreq-cli.c:6545: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6545: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[0]’)
corefreq-cli.c:6545: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[0]’)
corefreq-cli.c:6545: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6545: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[1]’)
corefreq-cli.c:6545: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[1]’)
corefreq-cli.c:6545: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6545: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[2]’)
corefreq-cli.c:6545: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[2]’)
corefreq-cli.c:6545: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6545: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[3]’)
corefreq-cli.c:6545: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[3]’)
corefreq-cli.c:6545: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6545: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[4]’)
corefreq-cli.c:6545: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6545: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[5]’)
corefreq-cli.c:6545: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6545: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[6]’)
corefreq-cli.c:6545: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6545: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[7]’)
corefreq-cli.c:6545: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6545: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[8]’)
corefreq-cli.c:6545: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[8]’)
corefreq-cli.c:6545: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6545: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[9]’)
corefreq-cli.c:6545: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[9]’)
corefreq-cli.c:6545: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6545: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[10]’)
corefreq-cli.c:6545: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[10]’)
corefreq-cli.c:6545: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6545: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[11]’)
corefreq-cli.c:6545: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6545: warning: excess elements in union initializer
corefreq-cli.c:6545: warning: (near initialization for ‘hIdle.attr[11]’)
corefreq-cli.c: In function ‘Layout_Card_RAM’:
corefreq-cli.c:6560: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6560: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[0]’)
corefreq-cli.c:6560: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[0]’)
corefreq-cli.c:6560: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6560: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[1]’)
corefreq-cli.c:6560: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[1]’)
corefreq-cli.c:6560: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6560: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[2]’)
corefreq-cli.c:6560: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[2]’)
corefreq-cli.c:6560: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6560: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[3]’)
corefreq-cli.c:6560: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[3]’)
corefreq-cli.c:6560: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6560: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[4]’)
corefreq-cli.c:6560: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[4]’)
corefreq-cli.c:6560: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6560: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[5]’)
corefreq-cli.c:6560: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[5]’)
corefreq-cli.c:6560: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6560: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[6]’)
corefreq-cli.c:6560: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6560: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[7]’)
corefreq-cli.c:6560: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[7]’)
corefreq-cli.c:6560: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6560: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[8]’)
corefreq-cli.c:6560: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[8]’)
corefreq-cli.c:6560: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6560: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[9]’)
corefreq-cli.c:6560: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[9]’)
corefreq-cli.c:6560: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6560: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[10]’)
corefreq-cli.c:6560: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6560: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[11]’)
corefreq-cli.c:6560: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6560: warning: excess elements in union initializer
corefreq-cli.c:6560: warning: (near initialization for ‘hMem.attr[11]’)
corefreq-cli.c: In function ‘Layout_Card_Task’:
corefreq-cli.c:6605: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6605: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6605: warning: excess elements in union initializer
corefreq-cli.c:6605: warning: (near initialization for ‘hSystem.attr[0]’)
corefreq-cli.c:6605: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6605: warning: excess elements in union initializer
corefreq-cli.c:6605: warning: (near initialization for ‘hSystem.attr[0]’)
corefreq-cli.c:6605: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6605: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6605: warning: excess elements in union initializer
corefreq-cli.c:6605: warning: (near initialization for ‘hSystem.attr[1]’)
corefreq-cli.c:6605: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6605: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6605: warning: excess elements in union initializer
corefreq-cli.c:6605: warning: (near initialization for ‘hSystem.attr[2]’)
corefreq-cli.c:6605: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6605: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6605: warning: excess elements in union initializer
corefreq-cli.c:6605: warning: (near initialization for ‘hSystem.attr[3]’)
corefreq-cli.c:6605: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6605: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6605: warning: excess elements in union initializer
corefreq-cli.c:6605: warning: (near initialization for ‘hSystem.attr[4]’)
corefreq-cli.c:6605: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6605: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6605: warning: excess elements in union initializer
corefreq-cli.c:6605: warning: (near initialization for ‘hSystem.attr[5]’)
corefreq-cli.c:6605: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6605: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6605: warning: excess elements in union initializer
corefreq-cli.c:6605: warning: (near initialization for ‘hSystem.attr[6]’)
corefreq-cli.c:6605: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6605: warning: excess elements in union initializer
corefreq-cli.c:6605: warning: (near initialization for ‘hSystem.attr[6]’)
corefreq-cli.c:6605: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6605: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6605: warning: excess elements in union initializer
corefreq-cli.c:6605: warning: (near initialization for ‘hSystem.attr[7]’)
corefreq-cli.c:6605: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6605: warning: excess elements in union initializer
corefreq-cli.c:6605: warning: (near initialization for ‘hSystem.attr[7]’)
corefreq-cli.c:6605: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6605: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6605: warning: excess elements in union initializer
corefreq-cli.c:6605: warning: (near initialization for ‘hSystem.attr[8]’)
corefreq-cli.c:6605: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6605: warning: excess elements in union initializer
corefreq-cli.c:6605: warning: (near initialization for ‘hSystem.attr[8]’)
corefreq-cli.c:6605: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6605: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6605: warning: excess elements in union initializer
corefreq-cli.c:6605: warning: (near initialization for ‘hSystem.attr[9]’)
corefreq-cli.c:6605: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6605: warning: excess elements in union initializer
corefreq-cli.c:6605: warning: (near initialization for ‘hSystem.attr[9]’)
corefreq-cli.c:6605: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6605: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6605: warning: excess elements in union initializer
corefreq-cli.c:6605: warning: (near initialization for ‘hSystem.attr[10]’)
corefreq-cli.c:6605: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6605: warning: excess elements in union initializer
corefreq-cli.c:6605: warning: (near initialization for ‘hSystem.attr[10]’)
corefreq-cli.c:6605: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6605: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6605: warning: excess elements in union initializer
corefreq-cli.c:6605: warning: (near initialization for ‘hSystem.attr[11]’)
corefreq-cli.c:6605: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6605: warning: excess elements in union initializer
corefreq-cli.c:6605: warning: (near initialization for ‘hSystem.attr[11]’)
corefreq-cli.c: In function ‘Draw_Card_Core’:
corefreq-cli.c:6654: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6654: error: unknown field ‘un’ specified in initializer
corefreq-cli.c:6654: warning: excess elements in union initializer
corefreq-cli.c:6654: warning: (near initialization for ‘warning’)
corefreq-cli.c:6654: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6654: warning: excess elements in union initializer
corefreq-cli.c:6654: warning: (near initialization for ‘warning’)
corefreq-cli.c:6654: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6654: warning: excess elements in union initializer
corefreq-cli.c:6654: warning: (near initialization for ‘warning’)
corefreq-cli.c:6660: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6660: error: unknown field ‘un’ specified in initializer
corefreq-cli.c:6660: warning: excess elements in union initializer
corefreq-cli.c:6660: warning: (near initialization for ‘_attr’)
corefreq-cli.c:6660: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6660: warning: excess elements in union initializer
corefreq-cli.c:6660: warning: (near initialization for ‘_attr’)
corefreq-cli.c:6660: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6660: warning: excess elements in union initializer
corefreq-cli.c:6660: warning: (near initialization for ‘_attr’)
corefreq-cli.c:6662: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6662: error: unknown field ‘un’ specified in initializer
corefreq-cli.c:6662: warning: excess elements in union initializer
corefreq-cli.c:6662: warning: (near initialization for ‘_attr’)
corefreq-cli.c:6662: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6662: warning: excess elements in union initializer
corefreq-cli.c:6662: warning: (near initialization for ‘_attr’)
corefreq-cli.c:6662: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6662: warning: excess elements in union initializer
corefreq-cli.c:6662: warning: (near initialization for ‘_attr’)
corefreq-cli.c:6665: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6665: error: unknown field ‘un’ specified in initializer
corefreq-cli.c:6665: warning: excess elements in union initializer
corefreq-cli.c:6665: warning: (near initialization for ‘_attr’)
corefreq-cli.c:6665: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6665: warning: excess elements in union initializer
corefreq-cli.c:6665: warning: (near initialization for ‘_attr’)
corefreq-cli.c:6665: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6665: warning: excess elements in union initializer
corefreq-cli.c:6665: warning: (near initialization for ‘_attr’)
corefreq-cli.c: In function ‘Draw_Card_Task’:
corefreq-cli.c:6789: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6789: error: unknown field ‘un’ specified in initializer
corefreq-cli.c:6789: warning: excess elements in union initializer
corefreq-cli.c:6789: warning: (near initialization for ‘_attr’)
corefreq-cli.c:6789: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6789: warning: excess elements in union initializer
corefreq-cli.c:6789: warning: (near initialization for ‘_attr’)
corefreq-cli.c:6789: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6789: warning: excess elements in union initializer
corefreq-cli.c:6789: warning: (near initialization for ‘_attr’)
corefreq-cli.c: In function ‘Top’:
corefreq-cli.c:6990: error: unknown field ‘fg’ specified in initializer
corefreq-cli.c:6990: error: unknown field ‘un’ specified in initializer
corefreq-cli.c:6990: warning: excess elements in union initializer
corefreq-cli.c:6990: warning: (near initialization for ‘_attr’)
corefreq-cli.c:6990: error: unknown field ‘bg’ specified in initializer
corefreq-cli.c:6990: warning: excess elements in union initializer
corefreq-cli.c:6990: warning: (near initialization for ‘_attr’)
corefreq-cli.c:6990: error: unknown field ‘bf’ specified in initializer
corefreq-cli.c:6990: warning: excess elements in union initializer
corefreq-cli.c:6990: warning: (near initialization for ‘_attr’)

after i run " make " this is happend

Intel i5-6300u bad cpu/thread count

Hi,

I have an intel i5-6300u cpu: ark.intel.com

corefreq badly detect the number of cpu and threads counting 4/8.

CoreFreq git:master > ./corefreq-cli -s                                                                                 ✭
Processor                             [Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz]
|- Vendor ID                                                      [GenuineIntel]
|- Signature                                                             [06_4E]
|- Stepping                                                                [  3]
|- Architecture                                                     [Skylake/UY]
|- Online CPU                                                              [4/8]
|- Base Clock                                                              [ 99]
|- Ratio Boost:                                                                 
|                      Min Max  8C  7C  6C  5C  4C  3C  2C  1C                  
|                        4  25   -   -   -   -  29  29  29  30                  
Instruction set:                                                                
|- 3DNow!/Ext [N,N]           AES [Y]      AVX/AVX2 [Y/Y]        BMI1/BMI2 [Y/Y]
|- CLFSH        [Y]          CMOV [Y]       CMPXCH8   [Y]         CMPXCH16   [Y]
|- F16C         [Y]           FPU [Y]          FXSR   [Y]        LAHF/SAHF   [Y]
|- MMX/Ext    [Y/N]       MONITOR [Y]         MOVBE   [Y]         PCLMULDQ   [Y]
|- POPCNT       [Y]        RDRAND [Y]        RDTSCP   [Y]              SEP   [Y]
|- SSE          [Y]          SSE2 [Y]          SSE3   [Y]            SSSE3   [Y]
|- SSE4.1/4A  [Y/N]        SSE4.2 [Y]       SYSCALL   [Y]                       
                                                                                
Features:                                                                       
|- 1 GB Pages Support                                      1GB-PAGES   [Present]
|- 100 MHz multiplier Control                            100MHzSteps   [Missing]
|- Advanced Configuration & Power Interface                     ACPI   [Present]
|- Advanced Programmable Interrupt Controller                   APIC   [Present]
|- Core Multi-Processing                                  CMP Legacy   [Missing]
|- L1 Data Cache Context ID                                  CNXT-ID   [Missing]
|- Direct Cache Access                                           DCA   [Missing]
|- Debugging Extension                                            DE   [Present]
|- Debug Store & Precise Event Based Sampling               DS, PEBS   [Present]
|- CPL Qualified Debug Store                                  DS-CPL   [Present]
|- 64-Bit Debug Store                                         DTES64   [Present]
|- Fast-String Operation                                Fast-Strings   [Present]
|- Fused Multiply Add                                       FMA|FMA4   [Present]
|- Hardware Lock Elision                                         HLE   [Present]
|- Long Mode 64 bits                                         IA64|LM   [Present]
|- LightWeight Profiling                                         LWP   [Missing]
|- Machine-Check Architecture                                    MCA   [Present]
|- Model Specific Registers                                      MSR   [Present]
|- Memory Type Range Registers                                  MTRR   [Present]
|- OS-Enabled Ext. State Management                          OSXSAVE   [Present]
|- Physical Address Extension                                    PAE   [Present]
|- Page Attribute Table                                          PAT   [Present]
|- Pending Break Enable                                          PBE   [Present]
|- Process Context Identifiers                                  PCID   [Present]
|- Perfmon and Debug Capability                                 PDCM   [Present]
|- Page Global Enable                                            PGE   [Present]
|- Page Size Extension                                           PSE   [Present]
|- 36-bit Page Size Extension                                  PSE36   [Present]
|- Processor Serial Number                                       PSN   [Missing]
|- Restricted Transactional Memory                               RTM   [Present]
|- Safer Mode Extensions                                         SMX   [Present]
|- Self-Snoop                                                     SS   [Present]
|- Time Stamp Counter                                            TSC [Invariant]
|- Time Stamp Counter Deadline                          TSC-DEADLINE   [Present]
|- Virtual Mode Extension                                        VME   [Present]
|- Virtual Machine Extensions                                    VMX   [Present]
|- Extended xAPIC Support                                     x2APIC   [  xAPIC]
|- Execution Disable Bit Support                              XD-Bit   [Present]
|- XSAVE/XSTOR States                                          XSAVE   [Present]
|- xTPR Update Control                                          xTPR   [Present]
                                                                                
Technologies:                                                                   
|- Hyper-Threading                                               HTT       [ ON]
|- SpeedStep                                                    EIST       [ ON]
|- PowerNow!                                                PowerNow       [OFF]
|- Dynamic Acceleration                                          IDA       [ ON]
|- Turbo Boost                                             TURBO|CPB       [ ON]
                                                                                
Performance Monitoring:                                                         
|- Version                                                        PM       [  4]
|- Counters:          General                   Fixed                           
|                     4 x 48 bits             3 x 48 bits                       
|- Enhanced Halt State                                           C1E       [ ON]
|- C1 Auto Demotion                                              C1A       [ ON]
|- C3 Auto Demotion                                              C3A       [ ON]
|- C1 UnDemotion                                                 C1U       [ ON]
|- C3 UnDemotion                                                 C3U       [ ON]
|- Frequency ID control                                          FID       [OFF]
|- Voltage ID control                                            VID       [OFF]
|- P-State Hardware Coordination Feedback                MPERF/APERF       [ ON]
|- Hardware-Controlled Performance States                        HWP       [ ON]
|- Hardware Duty Cycling                                         HDC       [ ON]
|- MWAIT States:      C0      C1      C2      C3      C4                        
|                      0       2       1       2       4                        
|- Core Cycles                                                         [Present]
|- Instructions Retired                                                [Present]
|- Reference Cycles                                                    [Present]
|- Last Level Cache References                                         [Present]
|- Last Level Cache Misses                                             [Present]
|- Branch Instructions Retired                                         [Present]
|- Branch Mispredicts Retired                                          [Present]
                                                                                
Power & Thermal Monitoring:                                                     
|- Digital Thermal Sensor                                        DTS   [Present]
|- Power Limit Notification                                      PLN   [Present]
|- Package Thermal Management                                    PTM   [Present]
|- Thermal Monitor 1                                         TM1|TTP   [ Enable]
|- Thermal Monitor 2                                         TM2|HTC   [Present]
|- Clock Modulation                                             ODCM   [ 12.50%]
|- Energy Policy                                           Bias Hint   [      6]

If this can help fixing the cpu database of the software.

Thanks

Issue with turning off CPU

I noticed that when putting a specific cpu offline, (echo 0 >/sys/devices/system/cpu/cpu1) The client stop refreshing data.
Restarting daemon and cli doesn't bring back normal operation.

This has to do with the kernel module which seems to stop providing data when the cpu is put offline.

Worst even, is that when i tryed to rmmod the corefreq kernel module, i had a full system freeze which forces me to physically switch off, switch on the computer to restart the OS.

Software incompatibility

CoreFreq is incompatible with the below softwares.
(due to processor registers conflicts)

  • numatop

  • nmi_watchdog

  1. watchdog_hld.c:
    int watchdog_nmi_enable(unsigned int cpu)
  • pmu_intel
  1. pmu_intel.c:
    static void reprogram_fixed_counters(struct kvm_pmu *pmu, u64 data)

  2. core.c:
    static void intel_pmu_nhm_workaround(void)

  3. qemu-system-x86_64
    when running qemu with argument -cpu , QEMU takes the leadership on the PMC counters;
    some MSR registers are not implemented thus ratios are unavailable.

CoreFreq does not run well with the followings:

  • Kernel Crash Dump
  1. Using kernel 3.10 , issues with kmem_cache_alloc() and kmem_cache_destroy() functions

cannot compile with gcc 4.8.5

Hi, I am trying to build CoreFreq but I am getting this:

⏚ [luke:~/fun/CoreFreq]↥ master ± make
cc -Wall -pthread -c corefreqd.c -o corefreqd.o
cc corefreqd.c -o corefreqd -lpthread -lrt
cc -Wall -c corefreq-cli.c -o corefreq-cli.o
cc corefreq-cli.c -o corefreq-cli -lm -lrt
make -C /lib/modules/4.4.8-040408-generic/build M=/home/luke/fun/CoreFreq modules
make[1]: Entering directory `/usr/src/linux-headers-4.4.8-040408-generic'
Makefile:660: Cannot use CONFIG_CC_STACKPROTECTOR_STRONG: -fstack-protector-strong not supported by compiler
  CC [M]  /home/luke/fun/CoreFreq/corefreqk.o
gcc: error: unrecognized command line option ‘-fstack-protector-strong’
make[2]: *** [/home/luke/fun/CoreFreq/corefreqk.o] Error 1
make[1]: *** [_module_/home/luke/fun/CoreFreq] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-4.4.8-040408-generic'
make: *** [all] Error 2

The full version of gcc is:

gcc (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
Copyright (C) 2015 Free Software Foundation, Inc

Do I need to upgrade my gcc ?...

Centos 7 , corefreq-cli segmentation fault

  • kernel - elrepo ml 4.8.7
  • glibc version 2.17-157 rpm

Valgrind output:

=29746== Invalid write of size 8
==29746==    at 0x4C2DEF7: memset (vg_replace_strmem.c:1224)
==29746==    by 0x409EBC: Top (corefreq-cli.c:4410)
==29746==    by 0x423A18: main (corefreq-cli.c:4958)
==29746==  Address 0x5938c60 is 0 bytes after a block of size 9,504 alloc'd
==29746==    at 0x4C29975: calloc (vg_replace_malloc.c:711)
==29746==    by 0x406E4D: CreateLayer (corefreq-cli.c:1738)
==29746==    by 0x4166C6: AllocAll.7656 (corefreq-cli.c:3111)
==29746==    by 0x4098D5: Top (corefreq-cli.c:4345)
==29746==    by 0x423A18: main (corefreq-cli.c:4958)
==29746==

valgrind: m_mallocfree.c:303 (get_bszB_as_is): Assertion 'bszB_lo == bszB_hi' failed.
valgrind: Heap block lo/hi size mismatch: lo = 9568, hi = 9259542123273814144.
This is probably caused by your program erroneously writing past the
end of a heap block and corrupting heap metadata.  If you fix any
invalid writes reported by Memcheck, this assertion failure will
probably go away.  Please try that before reporting this as a bug.


host stacktrace:
==29746==    at 0x3803D208: ??? (in /usr/lib64/valgrind/memcheck-amd64-linux)
==29746==    by 0x3803D334: ??? (in /usr/lib64/valgrind/memcheck-amd64-linux)
==29746==    by 0x3803D4C1: ??? (in /usr/lib64/valgrind/memcheck-amd64-linux)
==29746==    by 0x3804ADA3: ??? (in /usr/lib64/valgrind/memcheck-amd64-linux)
==29746==    by 0x38036A6B: ??? (in /usr/lib64/valgrind/memcheck-amd64-linux)
==29746==    by 0x380352E3: ??? (in /usr/lib64/valgrind/memcheck-amd64-linux)
==29746==    by 0x380394AB: ??? (in /usr/lib64/valgrind/memcheck-amd64-linux)
==29746==    by 0x38034917: ??? (in /usr/lib64/valgrind/memcheck-amd64-linux)
==29746==    by 0x802D7F2A9: ???
==29746==    by 0x802CA9F2F: ???

sched status:
  running_tid=1

Thread 1: status = VgTs_Runnable (lwpid 29746)
==29746==    at 0x4C2DF10: memset (vg_replace_strmem.c:1224)
==29746==    by 0x409EBC: Top (corefreq-cli.c:4410)
==29746==    by 0x423A18: main (corefreq-cli.c:4958)

Clock frequency estimation

The estimated base clock (FSB) is not constant. After 10 loops, there are variances between measures of the TSC counter. Gap is arround 3 digits after period.
Any help for a better algorithm is appreciated.

Vcore formula (SNB) wrong

Vcore for Intel SandyBridge and superior architectures is wrong.

Will adopt the specifications:
VID × 1/(2^13)

Paging bug

Below is a bug about "paging"

Intro.
Second times I read it and the answer remains in Chapter 15. Memory Mapping and DMA
DMA @ http://www.makelinux.net/ldd3/chp-15

How did I manage to make it work with remap_vmalloc_range() ?
I don't remember, perhaps in kernel source code.
But I mostly sure that remap_vmalloc_range() requires additional treatment to handle several & consecutive pages.

I will also try the remap_pfn_range() way

Recently I was thinking if I could dedicate one memory page per cpu , whatever the page address & allocation kind are.
I mean : a page-cpu-cache L1 affinity running in a dedicated kthread.
Why ? Because each cpu has its own set of msr counters registers. This algorithm should not meet a race condition.

--- BUG BEGIN ---
juil. 01 07:56:39 RAM kernel: BUG: unable to handle kernel paging request at 0000000001c000eb
juil. 01 07:56:39 RAM kernel: IP: [] IntelFreq_init+0x185/0x1000 [intelfreq]
juil. 01 07:56:39 RAM kernel: PGD 2f79b9067 PUD 2f79ba067 PMD 0 
juil. 01 07:56:39 RAM kernel: Oops: 0002 [#1] PREEMPT SMP 
juil. 01 07:56:39 RAM kernel: Modules linked in: intelfreq(O+) cfg80211 rfkill snd_hda_codec_hdmi snd_hda_codec_analog snd_hda_codec_generic mousedev nvidia(PO) snd_hda_intel snd_hda_controller iTCO_wdt evdev iTCO_vendor_support mac_hid mxm_wmi snd_hda_codec snd_hwdep snd_pcm snd_timer snd psmouse r8169 soundcore se
juil. 01 07:56:39 RAM kernel:  usbcore usb_common i8042 serio
juil. 01 07:56:39 RAM kernel: CPU: 6 PID: 1817 Comm: insmod Tainted: P          IO    4.0.6-1-ARCH #1
juil. 01 07:56:39 RAM kernel: Hardware name: System manufacturer System Product Name/Rampage II GENE, BIOS 1701    09/19/2011
juil. 01 07:56:39 RAM kernel: task: ffff88031512bcc0 ti: ffff8802f20f8000 task.ti: ffff8802f20f8000
juil. 01 07:56:39 RAM kernel: RIP: 0010:[]  [] IntelFreq_init+0x185/0x1000 [intelfreq]
juil. 01 07:56:39 RAM kernel: RSP: 0018:ffff8802f20fbbe8  EFLAGS: 00010246
juil. 01 07:56:39 RAM kernel: RAX: 0000000000000008 RBX: 0000000001c0003f RCX: 000000000000003f
juil. 01 07:56:39 RAM kernel: RDX: 0000000000000000 RSI: ffff8802f20fbbe8 RDI: ffffffff818c7f70
juil. 01 07:56:39 RAM kernel: RBP: ffff8802f20fbca8 R08: ffffffff818c7f90 R09: ffffea000c9ce800
juil. 01 07:56:39 RAM kernel: R10: ffffffff812c3640 R11: 0000000000000000 R12: ffff8802f8835e00
juil. 01 07:56:39 RAM kernel: R13: 0000000000000000 R14: ffffffffa000c000 R15: 0000000000000001
juil. 01 07:56:39 RAM kernel: FS:  00007f4176686700(0000) GS:ffff88033fcc0000(0000) knlGS:0000000000000000
juil. 01 07:56:39 RAM kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
juil. 01 07:56:39 RAM kernel: CR2: 0000000001c000eb CR3: 00000002f8957000 CR4: 00000000000007e0
juil. 01 07:56:39 RAM kernel: Stack:
juil. 01 07:56:39 RAM kernel:  49656e69756e6547 000000006c65746e 05100800000106a4 bfebfbff0098e3bd
juil. 01 07:56:39 RAM kernel:  0000004000000040 0000112000000003 0000000200000003 0000000000000001
juil. 01 07:56:39 RAM kernel:  0000004007300403 0000060300000000 0000000000000000 0000000000000000
juil. 01 07:56:39 RAM kernel: Call Trace:
juil. 01 07:56:39 RAM kernel:  [] ? 0xffffffffa000c000
juil. 01 07:56:39 RAM kernel:  [] do_one_initcall+0xb8/0x200
juil. 01 07:56:39 RAM kernel:  [] do_init_module+0x60/0x1cb
juil. 01 07:56:39 RAM kernel:  [] load_module+0x216a/0x27c0
juil. 01 07:56:39 RAM kernel:  [] ? store_uevent+0x70/0x70
juil. 01 07:56:39 RAM kernel:  [] SyS_finit_module+0xbe/0xf0
juil. 01 07:56:39 RAM kernel:  [] system_call_fastpath+0x12/0x17
juil. 01 07:56:39 RAM kernel: Code: 48 31 c9 0f a2 48 c1 e8 1a 48 83 e0 3f 48 83 c0 01 ba 01 00 00 00 85 c0 4c 8b 05 6f 1e 60 e1 48 8b 3d 58 1e 60 e1 0f 44 c2 31 d2 <89> 83 ac 00 00 00 48 8b 35 ce 11 3f 00 3b 96 ac 00 00 00 73 62 
juil. 01 07:56:39 RAM kernel: RIP  [] IntelFreq_init+0x185/0x1000 [intelfreq]
juil. 01 07:56:39 RAM kernel:  RSP
juil. 01 07:56:39 RAM kernel: CR2: 0000000001c000eb
juil. 01 07:56:39 RAM kernel: ---[ end trace e2aa353375bb4913 ]-

compile warning and induce losing efficancy "pci.h:1206:2: warning: ignoring return value of ‘__pci_register_driver’"

compile warning

cc -Wall -pthread -c corefreqd.c -o corefreqd.o
cc corefreqd.c -o corefreqd -lpthread -lrt
cc -Wall -c corefreq-cli.c -o corefreq-cli.o
cc corefreq-cli.c -o corefreq-cli -lm -lrt
make -C /lib/modules/4.9.10-200.fc25.x86_64/build M=/home/lixun/rpm/CoreFreq modules
make[1]: Entering directory '/usr/src/kernels/4.9.10-200.fc25.x86_64'
  CC [M]  /home/lixun/rpm/CoreFreq/corefreqk.o
In file included from /home/lixun/rpm/CoreFreq/corefreqk.c:9:0:
/home/lixun/rpm/CoreFreq/corefreqk.c: In function ‘CoreFreqK_init’:
./include/linux/pci.h:1206:2: warning: ignoring return value of ‘__pci_register_driver’, declared with attribute warn_unused_result [-Wunused-result]
  __pci_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/lixun/rpm/CoreFreq/corefreqk.c:3064:5: note: in expansion of macro ‘pci_register_driver’
     pci_register_driver(&CoreFreqK_pci_driver);
     ^~~~~~~~~~~~~~~~~~~
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/lixun/rpm/CoreFreq/corefreqk.mod.o
  LD [M]  /home/lixun/rpm/CoreFreq/corefreqk.ko
make[1]: Leaving directory '/usr/src/kernels/4.9.10-200.fc25.x86_64'

error of insmod

insmod  corefreqk.ko 
insmod: ERROR: could not insert module corefreqk.ko: Required key not available

computer info

cpu info

cat /proc/cpuinfo 
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 61
model name      : Intel(R) Core(TM) M-5Y71 CPU @ 1.20GHz
stepping        : 4
microcode       : 0x24
cpu MHz         : 1262.512
cache size      : 4096 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 2
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 20
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt dtherm ida arat pln pts
bugs            :
bogomips        : 2793.58
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 61
model name      : Intel(R) Core(TM) M-5Y71 CPU @ 1.20GHz
stepping        : 4
microcode       : 0x24
cpu MHz         : 1200.134
cache size      : 4096 KB
physical id     : 0
siblings        : 4
core id         : 1
cpu cores       : 2
apicid          : 2
initial apicid  : 2
fpu             : yes
fpu_exception   : yes
cpuid level     : 20
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt dtherm ida arat pln pts
bugs            :
bogomips        : 2795.73
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

processor       : 2
vendor_id       : GenuineIntel
cpu family      : 6
model           : 61
model name      : Intel(R) Core(TM) M-5Y71 CPU @ 1.20GHz
stepping        : 4
microcode       : 0x24
cpu MHz         : 1199.963
cache size      : 4096 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 2
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 20
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt dtherm ida arat pln pts
bugs            :
bogomips        : 2796.87
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 61
model name      : Intel(R) Core(TM) M-5Y71 CPU @ 1.20GHz
stepping        : 4
microcode       : 0x24
cpu MHz         : 1199.963
cache size      : 4096 KB
physical id     : 0
siblings        : 4
core id         : 1
cpu cores       : 2
apicid          : 3
initial apicid  : 3
fpu             : yes
fpu_exception   : yes
cpuid level     : 20
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt dtherm ida arat pln pts
bugs            :
bogomips        : 2795.84
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

linux version

uname -r
4.9.10-200.fc25.x86_64

laptop ASUS u305

CLI segfaults on AMD EPYC when stressing system

Hello Cyril,

When testing on an AMD 7551 EPYC 2x32 / Signature 8F_01, frequency monitoring is crashing when one of the CPU is under stress and monitoring frequency/cycles/cstate.... Works correctly under dashboard, and shows value of ~2492.

Processor Window shows:

  • Arch: 17h
  • base clock: 0.83
  • Frequency max: 1996.26MHz / 2400 ratio
  • Factory: 2400000 MHz / 2400 Ratio
  • 1C TurboBoost: 2079.44 / 2500 Ratio
  • 2C TurboBoost: 1996.26 / 2400 Ratio

Segfault comes from memcpy, from define "LayerFillAt()" called by Draw_Load:4625.
When commenting this LayerFillAt and adding stress, the bar goes beyond the end of line, thus back to newline, and displays freq of 2500 & Turbo 124%.

Seems because the max value of turbo is the 2400 advertised instead of the 2500 really used.

Any idea ?

error: ‘MSR_NHM_TURBO_RATIO_LIMIT’ undeclared

Trying to install from Arch AUR and I get the build error:

aur-corefreq-git/src/CoreFreq/corefreqk.c:824:15: error: ‘MSR_NHM_TURBO_RATIO_LIMIT’ undeclared (first use in this function)
  RDMSR(Turbo, MSR_NHM_TURBO_RATIO_LIMIT);
               ^
==> Starting build()...
make: Entering directory 'aur-corefreq-git/src/CoreFreq'
cc -c corefreqd.c -o corefreqd.o
cc -lpthread -lrt -o corefreqd corefreqd.c
cc -c corefreq-cli.c -o corefreq-cli.o
cc -lrt -o corefreq-cli corefreq-cli.c
make -C /lib/modules/4.8.2-1-ARCH/build M=aur-corefreq-git/src/CoreFreq modules
make[1]: Entering directory '/usr/lib/modules/4.8.2-1-ARCH/build'
  CC [M]  aur-corefreq-git/src/CoreFreq/corefreqk.o
In file included from aur-corefreq-git/src/CoreFreq/corefreqk.c:23:0:
aur-corefreq-git/src/CoreFreq/corefreqk.c: In function ‘Nehalem_Platform_Info’:
aur-corefreq-git/src/CoreFreq/corefreqk.c:824:15: error: ‘MSR_NHM_TURBO_RATIO_LIMIT’ undeclared (first use in this function)
  RDMSR(Turbo, MSR_NHM_TURBO_RATIO_LIMIT);
               ^
aur-corefreq-git/src/CoreFreq/corefreqk.h:51:10: note: in definition of macro ‘RDMSR’
   : "c" (_reg)      \
          ^~~~
aur-corefreq-git/src/CoreFreq/corefreqk.c:824:15: note: each undeclared identifier is reported only once for each function it appears in
  RDMSR(Turbo, MSR_NHM_TURBO_RATIO_LIMIT);
               ^
aur-corefreq-git/src/CoreFreq/corefreqk.h:51:10: note: in definition of macro ‘RDMSR’
   : "c" (_reg)      \
          ^~~~
make[2]: *** [scripts/Makefile.build:296: aur-corefreq-git/src/CoreFreq/corefreqk.o] Error 1
make[1]: *** [Makefile:1471: _module_aur-corefreq-git/src/CoreFreq] Error 2
make[1]: Leaving directory '/usr/lib/modules/4.8.2-1-ARCH/build'
make: *** [Makefile:6: all] Error 2
make: Leaving directory 'aur-corefreq-git/src/CoreFreq'
==> ERROR: A failure occurred in build().
    Aborting...
==> ERROR: Makepkg was unable to build corefreq-git.

cat /proc/cpuinfo 
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 60
model name      : Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
stepping        : 3
microcode       : 0x19
cpu MHz         : 3902.343
cache size      : 8192 KB
physical id     : 0
siblings        : 8
core id         : 0
cpu cores       : 4
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm epb tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm xsaveopt dtherm ida arat pln pts
bugs            :
bogomips        : 7198.35
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

<snip for other 7 cores>

Can't query IMC due to PCI exclusive access

A device id is locked by the first driver which registered it.
In its uncore.c , Kernel gets an exclusive access to most Home Agents thus CoreFreq is unable to query IMC

The following code ...

pci_register_driver(&CoreFreqK_pci_driver);

... will be changed in favor of :

struct pci_dev *dev = pci_get_device(PCI_VENDOR_ID_XXXXX, did, next);

The PCI query will happen after Processor signature have been detected to avoid collision.

kmalloc : requested size exceeds limits

if ((Proc->SysGate = kmalloc(pageSize, GFP_KERNEL)) != NULL) {

With an order of 4 MB, the allocation may fail and the SysGate map in the daemon consequently.

To avoid errors in kernel, start the daemon without the SysGate

corefreqd -goff

As a result, UI features, such as tasks monitoring, memory usage, kernel data (idle driver, governor), won't be displayed.

SysGate algorithm has to be improved.

Pentium N3540 power msr unsupported

N3540
Architecture for N3540 needs to be implemented.
In the function PowerThermal() , reading some of those msr are invalid.

void PowerThermal(CORE *Core, unsigned int cpu)

  • MSR_IA32_ENERGY_PERF_BIAS = 0x000001b0
  • MSR_MISC_PWR_MGMT = 0x000001aa
  • MSR_IA32_THERM_CONTROL = 0x0000019a

Early query of the [in]variant TSC bit

edx register returns zero from the early cpuid 0x80000007 call.
TSC bit is thus marked as variant.
However, the cpuid table filled later will dump edx = 0x100

TjMax not present in Core2

Apparently MSR_TEMPERATURE_TARGET (1A2H) is only available for Silvermont, Nehalem, Sandy Bridge and superior Microarchitectures.

A quick workaround for Core2 is programmed as bellow:

#define Core_Thermal(Core)                              \
({                                                      \
        RDMSR(Core->TjMax, MSR_IA32_TEMPERATURE_TARGET);\
        if(!Core->TjMax.Target)                         \
                Core->TjMax.Target=100;                 \
})

Reading VID (vcore)

Thank you for this useful project.
I would like to ask you if there is a possibility to read the core voltage (vcore) using coreFreq?
If it is currently not available feature. Do you know how can one do it ?

Check unused code

void DynamicAcceleration(void)
{
	if (Proc->Features.Info.LargestStdFunc >= 0x6) {
		struct THERMAL_POWER_LEAF Power = {{0}};
		asm volatile
		(
			"movq	$0x6,  %%rax	\n\t"
			"xorq	%%rbx, %%rbx	\n\t"
			"xorq	%%rcx, %%rcx	\n\t"
			"xorq	%%rdx, %%rdx	\n\t"
			"cpuid			\n\t"
			"mov	%%eax, %0	\n\t"
			"mov	%%ebx, %1	\n\t"
			"mov	%%ecx, %2	\n\t"
			"mov	%%edx, %3"
			: "=r" (Power.AX),
			  "=r" (Power.BX),
			  "=r" (Power.CX),
			  "=r" (Power.DX)
			:
			: "%rax", "%rbx", "%rcx", "%rdx"
		);
	}
}

Building issue

Software looks great. However I'm unable to build it. Getting the following messages under make:

[elx@elsxpc CoreFreq]$ make cc -c corefreqd.c -o corefreqd.o cc -lpthread -lrt -o corefreqd corefreqd.c cc -c corefreq-cli.c -o corefreq-cli.o cc -lm -lrt -o corefreq-cli corefreq-cli.c make -C /lib/modules/4.4.39-1-MANJARO/build M=/home/elx/CoreFreq modules make[1]: Entering directory '/usr/lib/modules/4.4.39-1-MANJARO/build' make[1]: *** No rule to make target 'modules'. Stop. make[1]: Leaving directory '/usr/lib/modules/4.4.39-1-MANJARO/build' make: *** [Makefile:6: all] Error 2
What does this mean? Apologies I'm new to this.

QEMU: no factory frequency

For example, using qemu-system-x86_64 -cpu SandyBridge , the cpuid brand of this Intel virtualized processor does not contain the factory frequency in Hz : Intel Xeon E312xx (Sandy Bridge)
This appears not compliant with the SDM in which a pseudo code explains how to extract the frequency.

The following function is impacted:

unsigned int Intel_Brand(char *pBrand)

However, such case has been programmed for AMD processors and can be reused; the driver checks if the function results in zero Hz then estimates the factory frequency with:

  • BCLK multiplied by Max_Non_Turbo_Ratio

On Gentoo with specific flag it aborted and by default menu is not showing

One,

I need to press q to get the top menu.

Second,

While running with -s flag , it aborted like below

`
bhaskar@GentooLinux_21:33:10_Thu Feb 09:~/git-linux/CoreFreq>./corefreq-cli -s
Processor [Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz]
|- Vendor ID [GenuineIntel]
|- Signature [06_3D]
|- Stepping [ 4]
|- Architecture [Broadwell/Mobile]
|- Online CPU [4/8]
|- Base Clock [ 99]
|- Ratio Boost:
| Min Max 8C 7C 6C 5C 4C 3C 2C 1C
| 5 22 - - 25 25 25 25 25 27
Instruction set:
|- 3DNow!/Ext [N,N] AES [Y] AVX/AVX2 [Y/Y] BMI1/BMI2 [Y/Y]
|- CLFSH [Y] CMOV [Y] CMPXCH8 [Y] CMPXCH16 [Y]
|- F16C [Y] FPU [Y] FXSR [Y] LAHF/SAHF [Y]
|- MMX/Ext [Y/N] MONITOR [Y] MOVBE [Y] PCLMULDQ [Y]
|- POPCNT [Y] RDRAND [Y] RDTSCP [Y] SEP [Y]
|- SSE [Y] SSE2 [Y] SSE3 [Y] SSSE3 [Y]
|- SSE4.1/4A [Y/N] SSE4.2 [Y] SYSCALL [Y]

Features:
|- 1 GB Pages Support 1GB-PAGES [Present]
|- 100 MHz multiplier Control 100MHzSteps [Missing]
|- Advanced Configuration & Power Interface ACPI [Present]
|- Advanced Programmable Interrupt Controller APIC [Present]
|- Core Multi-Processing CMP Legacy [Missing]
|- L1 Data Cache Context ID CNXT-ID [Missing]
|- Direct Cache Access DCA [Missing]
|- Debugging Extension DE [Present]
|- Debug Store & Precise Event Based Sampling DS, PEBS [Present]
|- CPL Qualified Debug Store DS-CPL [Present]
|- 64-Bit Debug Store DTES64 [Present]
|- Fast-String Operation Fast-Strings [Present]
|- Fused Multiply Add FMA|FMA4 [Present]
|- Hardware Lock Elision HLE [Missing]
|- Long Mode 64 bits IA64|LM [Present]
|- LightWeight Profiling LWP [Missing]
|- Machine-Check Architecture MCA [Present]
|- Model Specific Registers MSR [Present]
|- Memory Type Range Registers MTRR [Present]
|- OS-Enabled Ext. State Management OSXSAVE [Present]
|- Physical Address Extension PAE [Present]
|- Page Attribute Table PAT [Present]
|- Pending Break Enable PBE [Present]
|- Process Context Identifiers PCID [Present]
|- Perfmon and Debug Capability PDCM [Present]
|- Page Global Enable PGE [Present]
|- Page Size Extension PSE [Present]
|- 36-bit Page Size Extension PSE36 [Present]
|- Processor Serial Number PSN [Missing]
|- Restricted Transactional Memory RTM [Missing]
|- Safer Mode Extensions SMX [Missing]
|- Self-Snoop SS [Present]
|- Time Stamp Counter TSC [ Variant]
|- Time Stamp Counter Deadline TSC-DEADLINE [Present]
|- Virtual Mode Extension VME [Present]
|- Virtual Machine Extensions VMX [Present]
|- Extended xAPIC Support x2APIC [ xAPIC]
*** Error in ./corefreq-cli': free(): invalid next size (fast): 0x0000000000cfe090 *** ======= Backtrace: ========= /lib64/libc.so.6(+0x6f133)[0x7f0ce321b133] /lib64/libc.so.6(+0x74796)[0x7f0ce3220796] /lib64/libc.so.6(+0x74f9e)[0x7f0ce3220f9e] ./corefreq-cli[0x4014c0] ./corefreq-cli[0x4039f7] ./corefreq-cli[0x424238] /lib64/libc.so.6(__libc_start_main+0xf0)[0x7f0ce31cc790] ./corefreq-cli[0x401029] ======= Memory map: ======== 00400000-00428000 r-xp 00000000 fb:00 65345 /home/bhaskar/git-linux/CoreFreq/corefreq-cli 00627000-00628000 r-xp 00027000 fb:00 65345 /home/bhaskar/git-linux/CoreFreq/corefreq-cli 00628000-00629000 rwxp 00028000 fb:00 65345 /home/bhaskar/git-linux/CoreFreq/corefreq-cli 00cfe000-00d1f000 rwxp 00000000 00:00 0 [heap] 7f0cdc000000-7f0cdc021000 rwxp 00000000 00:00 0 7f0cdc021000-7f0ce0000000 ---p 00000000 00:00 0 7f0ce2b76000-7f0ce2b8c000 r-xp 00000000 08:07 21666003 /usr/lib64/gcc/x86_64-pc-linux-gnu/4.9.4/libgcc_s.so.1 7f0ce2b8c000-7f0ce2d8b000 ---p 00016000 08:07 21666003 /usr/lib64/gcc/x86_64-pc-linux-gnu/4.9.4/libgcc_s.so.1 7f0ce2d8b000-7f0ce2d8c000 r-xp 00015000 08:07 21666003 /usr/lib64/gcc/x86_64-pc-linux-gnu/4.9.4/libgcc_s.so.1 7f0ce2d8c000-7f0ce2d8d000 rwxp 00016000 08:07 21666003 /usr/lib64/gcc/x86_64-pc-linux-gnu/4.9.4/libgcc_s.so.1 7f0ce2d8d000-7f0ce2f90000 rw-s 00000000 00:17 80559 /dev/shm/corefreq-shm 7f0ce2f90000-7f0ce2fa7000 r-xp 00000000 08:07 54505121 /lib64/libpthread-2.23.so 7f0ce2fa7000-7f0ce31a6000 ---p 00017000 08:07 54505121 /lib64/libpthread-2.23.so 7f0ce31a6000-7f0ce31a7000 r-xp 00016000 08:07 54505121 /lib64/libpthread-2.23.so 7f0ce31a7000-7f0ce31a8000 rwxp 00017000 08:07 54505121 /lib64/libpthread-2.23.so 7f0ce31a8000-7f0ce31ac000 rwxp 00000000 00:00 0 7f0ce31ac000-7f0ce333c000 r-xp 00000000 08:07 54505142 /lib64/libc-2.23.so 7f0ce333c000-7f0ce353b000 ---p 00190000 08:07 54505142 /lib64/libc-2.23.so 7f0ce353b000-7f0ce353f000 r-xp 0018f000 08:07 54505142 /lib64/libc-2.23.so 7f0ce353f000-7f0ce3541000 rwxp 00193000 08:07 54505142 /lib64/libc-2.23.so 7f0ce3541000-7f0ce3545000 rwxp 00000000 00:00 0 7f0ce3545000-7f0ce354b000 r-xp 00000000 08:07 54505120 /lib64/librt-2.23.so 7f0ce354b000-7f0ce374b000 ---p 00006000 08:07 54505120 /lib64/librt-2.23.so 7f0ce374b000-7f0ce374c000 r-xp 00006000 08:07 54505120 /lib64/librt-2.23.so 7f0ce374c000-7f0ce374d000 rwxp 00007000 08:07 54505120 /lib64/librt-2.23.so 7f0ce374d000-7f0ce3851000 r-xp 00000000 08:07 54505111 /lib64/libm-2.23.so 7f0ce3851000-7f0ce3a50000 ---p 00104000 08:07 54505111 /lib64/libm-2.23.so 7f0ce3a50000-7f0ce3a51000 r-xp 00103000 08:07 54505111 /lib64/libm-2.23.so 7f0ce3a51000-7f0ce3a52000 rwxp 00104000 08:07 54505111 /lib64/libm-2.23.so 7f0ce3a52000-7f0ce3a75000 r-xp 00000000 08:07 54459364 /lib64/ld-2.23.so 7f0ce3c54000-7f0ce3c58000 rwxp 00000000 00:00 0 7f0ce3c73000-7f0ce3c75000 rwxp 00000000 00:00 0 7f0ce3c75000-7f0ce3c76000 r-xp 00023000 08:07 54459364 /lib64/ld-2.23.so 7f0ce3c76000-7f0ce3c77000 rwxp 00024000 08:07 54459364 /lib64/ld-2.23.so 7f0ce3c77000-7f0ce3c78000 rwxp 00000000 00:00 0 7ffe754b9000-7ffe754da000 rwxp 00000000 00:00 0 [stack] 7ffe75503000-7ffe75505000 r--p 00000000 00:00 0 [vvar] 7ffe75505000-7ffe75507000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] Aborted

Topology

  • Hyperthreading state through Proc->Features.HTT_enabled=1 can be set during the final loop. Right after kthread_stop()
  • Disabled cpus by Kernel should be accounted by the topology algorithm. It appears that a core deactivation from Linux or from the BIOS differs , isn't ?

Wrong Clock & Topology computed with Core2 CPU T5500

               IntelFreq [Intel(R) Core(TM)2 CPU T5500 @ 1.66GHz]
               Signature [06_0F] Architecture [Core2/Conroe]
               2/2 CPU Online , Clock @ {1/12723190} MHz
               Ratio={6,10,0,0,0,0,0,0,0,10}
               Topology(0) Apic[  0] Core[ -1] Thread[ -1]
               Topology(1) Apic[  0] Core[ -1] Thread[ -1]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.