{{tag>Brouillon CPU Matériel Kernel Linux}} = Gérer les CPUs sous GNU/Linux Voir * [[temperature_materiel_cpu_carte_mere_debian_lm-sensors|Température CPU]] * [[https://www.grid5000.fr/w/CPU_parameters]] * https://www.deltasight.fr/processeurs-gestion-energie-frequence/ == Notes Outils : * lscpu * chcpu * cpufreq-info * CoreCtrl * turbostat * cpupower * powertop * rdmsr / wrmsr (msr-tools) * kvm-ok / check-bios-nx (cpu-checker) Notions : * Systèmes multi-processeurs (NUMA SMP) * Systèmes multi-cœurs (SMP) * Systèmes multi-threads (SMT) Params Kernel : * nr_cpus == Infos nombre de cores threads CPU Nombre de threads grep ^processor /proc/cpuinfo Nous avons une valeurs par thread. C'est donc la derniere valeur +1 qui donne le nombre de threads (si un seul CPU physique) Nombre de cores grep '^cpu cores' /proc/cpuinfo Toutes les valeurs sont identiques si un seul CPU physique == CPUFrequtils Voir aussi : [[https://doc.ubuntu-fr.org/intel_p-state|intel_p-state]] Gérer la fréquence cpu service cpufrequtils stop #!/bin/sh -e # # rc.local echo "conservative" >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor echo "conservative" >/sys/devices/system/cpu/cpu1/cpufreq/scaling_governor echo "conservative" >/sys/devices/system/cpu/cpu2/cpufreq/scaling_governor #echo "conservative" >/sys/devices/system/cpu/cpu3/cpufreq/scaling_governor # echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor exit 0 Fichier à exécuter en root pour changer le gouverneur. Choix possible selon la configuration du noyau : conservative, ondemand, powersave, performance. Avec cpufrequtils : (en root) cp /usr/share/doc/cpufrequtils/examples/cpufrequtils.sample /etc/default/cpufrequtils cpufreq-set -c 0 -d 2100000 -u 3300000 service cpufrequtils reload -c : numéro processeur -d : freq min -u : freq max -f : freq exact voulu == Notes cpufreq Voir : * https://www.kernel.org/doc/html/v4.14/admin-guide/pm/cpufreq.html * https://www.kernel.org/doc/Documentation/cpu-freq/user-guide.txt * https://doc.ubuntu-fr.org/cpu-frequtils * https://wiki.debian.org/HowTo/CpuFrequencyScaling * https://wiki.archlinux.org/index.php/CPU_frequency_scaling * https://www.linuxquestions.org/questions/slackware-14/locking-all-cpu%27s-to-their-maximum-frequency-4175607506/ * https://www.thomas-krenn.com/en/wiki/Disable_CPU_Power_Saving_Management_in_BIOS * https://bbs.archlinux.org/viewtopic.php?id=163253 * https://doc.ubuntu-fr.org/intel_p-state grep MHz /proc/cpuinfo apt-get install linux-cpupower cpupower $ cpupower frequency-info -g analyzing CPU 0: available cpufreq governors: Not Available $ cpupower frequency-info analyzing CPU 0: no or unknown cpufreq driver is active on this CPU CPUs which run at the same hardware frequency: Not Available CPUs which need to have their frequency coordinated by software: Not Available maximum transition latency: Cannot determine or is not supported. hardware limits: Not Available available cpufreq governors: Not Available Unable to determine current Policy current CPU frequency: Unable to call hardware current CPU frequency: Unable to call to kernel boost state support: Supported: yes Active: yes If you have Turbo Boost enabled in the UEFI/BIOS, you can turn boost on (1) or off (0) by running echo 1 > /sys/devices/system/cpu/cpufreq/boost Limite d'utilisation du CPU en % # cat /sys/devices/system/cpu/intel_pstate/max_perf_pct 100 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor Exemble de "gorvernors" possible * performance * powersave * userspace * ondemand * conservative cpufreq-set -r -u 2.24Ghz #cpufreq-set --cpu 0 --governor conservative cpufreq-set -r -g performance cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors echo "performance" |tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor #echo "3900000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq ''/etc/default/grub'' CMDLINE_LINUX_DEFAULT="quiet splash intel_pstate=disable processor.ignore_ppc=1" update-grub Pour remplacer ''intel_pstate'' par ''acpi-cpufreq'' cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver La liste des drivers ici : ls -1 /lib/modules/`uname -r`/kernel/drivers/cpufreq/ == BIOS frequency limitation Source : https://wiki.archlinux.org/index.php/CPU_frequency_scaling cat /sys/devices/system/cpu/cpu0/cpufreq/bios_limit For trying this temporarily change the value in /sys/module/processor/parameters/ignore_ppc from 0 to 1. echo 1 > /sys/module/processor/parameters/ignore_ppc For setting it permanent refer to Kernel modules or just read on. Add processor.ignore_ppc=1 to your kernel boot line or create ''/etc/modprobe.d/ignore_ppc.conf'' # If the frequency of your machine gets wrongly limited by BIOS, this should help options processor ignore_ppc=1 ---- Avec cpulimit sudo apt-get install cpulimit http://www.linuxscrew.com/2012/07/03/limit-cpu-usage-of-linux-process/ == Perf perf apt-get install linux-base linux-tools https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4b715d24f4f14731c7b553cbb8604fe865cb8d3c Voir : * https://developers.redhat.com/articles/2023/09/29/how-we-solved-hotspot-performance-puzzle # Disable SMP echo off > /sys/devices/system/cpu/smt/control # Disable THP echo "never" > /sys/kernel/mm/transparent_hugepage/enabled # Disable turbo boost echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo === commande perf Voir : * https://developers.redhat.com/articles/2023/07/31/frame-pointers-untangling-unwinding?sc_cid=7013a000003Sm66AAC * https://www.brendangregg.com/perf.html * https://elinux.org/images/d/d0/Moll--cycle_accurate_profiling_with_perf.pdf == Nombre de core / CPU /usr/bin/nproc (coreutils) getconf _NPROCESSORS_ONLN == Notes service cpufrequtils stop echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor noatime Swap config Blacklist module == irqbalance /proc/interrupts cat /proc/irq/3/smp_affinity cpupower == Hotplug http://www.linux-kvm.org/page/CPUHotPlug * switch to the monitor * type ''cpu_set online'' * A new cpu should appear on /sys/devices/system/cpu * bring it online by writting 1 to the "online" file inside that directory on guest * Try adding as many cpus as possible, and make sure we at least do not crash. == Monitoring pcp http://www.pcp.io/docs/guide.html https://www.youtube.com/watch?v=zrAjevr8_Ds == Kernel Real-time kernel ? http://www.tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap7sec80.html https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/pdf/Performance_Tuning_Guide/Red_Hat_Enterprise_Linux-6-Performance_Tuning_Guide-en-US.pdf https://wiki.archlinux.org/index.php/maximizing_performance https://tweaked.io/guide/kernel/ http://www.redhat.com/promo/summit/2008/downloads/pdf/Wednesday_1015am_John_Shakshober_and_Larry_Woodman_Decoding_the_Code.pdf http://www.brendangregg.com/blog/2015-03-03/performance-tuning-linux-instances-on-ec2.html https://oracle-base.com/articles/linux/configuring-huge-pages-for-oracle-on-linux-64 == Autres root# dmidecode|grep HTT HTT (Hyper-Threading Technology) HTT (Hyper-Threading Technology) root# egrep 'siblings|cpu cores' /proc/cpuinfo | head -2 siblings : 2 cpu cores : 1 root# grep '^flags\b' /proc/cpuinfo | tail -1 flags : fpu de tsc msr pae mce cx8 apic sep mca cmov pat clflush acpi mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good nopl nonstop_tsc pni pclmulqdq est ssse3 cx16 sse4_1 sse4_2 popcnt aes f16c rdrand hypervisor lahf_lm ida arat epb pln pts dts fsgsbase erms root# dmidecode |grep Count # tests that HTT is available *and* enabled Core Count: 1 Thread Count: 2 Core Count: 1 Thread Count: 2 Source : https://www.oracle.com/docs/tech/ovm-performance.pdf