Detailed explanation of how to dynamically enable/disable hyperthreading technology in Linux

Detailed explanation of how to dynamically enable/disable hyperthreading technology in Linux

Preface

Intel's hyper-threading technology allows two threads to be executed in parallel on one physical core, which in most cases can improve the utilization of hardware resources and enhance system performance. For CPU-intensive numerical programs, hyperthreading technology may cause overall program performance to degrade. For this reason, it is recommended to disable hyperthreading technology when executing OpenMP or MPI numerical programs.

The following is a script found on github that dynamically turns on and off hyper-threading technology. The principle is to find the relationship between logical cores according to the /sys/devices/system/cpu/cpuX/topology/thread_siblings_list file, and then edit the /sys/devices/system/cpu/cpuX/online file to dynamically turn on and off hyper-threading technology.

#!/bin/bash

HYPERTHREADING=1

function toggleHyperThreading() {
 for CPU in /sys/devices/system/cpu/cpu[0-9]*; do
   CPUID=`basename $CPU | cut -b4-`
   echo -en "CPU: $CPUID\t"
   [ -e $CPU/online ] && echo "1" > $CPU/online
   THREAD1=`cat $CPU/topology/thread_siblings_list | cut -f1 -d,`
   if [ $CPUID = $THREAD1 ]; then
     echo "-> enable"
     [ -e $CPU/online ] && echo "1" > $CPU/online
   else
    if [ "$HYPERTHREADING" -eq "0" ]; then echo "-> disabled"; else echo "-> enabled"; fi
     echo "$HYPERTHREADING" > $CPU/online
   fi
 done
}

function enabled() {
    echo -en "Enabling HyperThreading\n"
    HYPERTHREADING=1
    toggleHyperThreading
}

function disabled() {
    echo -en "Disabling HyperThreading\n"
    HYPERTHREADING=0
    toggleHyperThreading
}

#
ONLINE=$(cat /sys/devices/system/cpu/online)
OFFLINE=$(cat /sys/devices/system/cpu/offline)
echo "---------------------------------------------------"
echo -en "CPU's online: $ONLINE\t CPU's offline: $OFFLINE\n"
echo "---------------------------------------------------"
while true; do
  read -p "Type in e to enable or d disable hyperThreading or q to quit [e/d/q] ?" ed
  case $ed in
    [Ee]* ) enabled; break;;
    [Dd]* ) disabled;exit;;
    [Qq]* ) exit;;
    * ) echo "Please answer e for enable or d for disable hyperThreading.";;
  esac
done

Remark:

  1. The script needs root privileges to execute;
  2. You can view the enabled CPU information through cat /proc/cpuinfo. This command does not require root privileges.
  3. The lscpu command can be used to view the status of the CPU (no root privileges are required): the threads per core value is 2 when hyperthreading is enabled and 1 when disabled.

refer to

Disable / Enable HyperThreading cores on runtime – linux

Summarize

The above is the full content of this article. I hope that the content of this article will have certain reference learning value for your study or work. Thank you for your support of 123WORDPRESS.COM.

You may also be interested in:
  • Summary of Linux thread exit methods (recommended)
  • Linux thread switching and process switching methods
  • How to cancel (terminate) a linux thread
  • Comparison and Difference between Processes and Threads in Linux

<<:  MySql 8.0.11 installation and configuration tutorial

>>:  Vue detailed introductory notes

Recommend

Detailed explanation of common usage methods of weixin-js-sdk in vue

Link: https://qydev.weixin.qq.com/wiki/index.php?...

In-depth understanding of the use of r2dbc in MySQL

Introduction MySQL should be a very common databa...

Example of downloading files with vue+django

Table of contents 1. Overview 2. Django Project 3...

How to create a table by month in MySQL stored procedure

Without going into details, let's go straight...

Native JS to achieve digital table special effects

This article shares a digital clock effect implem...

The most common declaration merge in TS (interface merge)

Table of contents 1. Merge interface 1.1 Non-func...

jQuery canvas generates a poster with a QR code

This article shares the specific code for using j...

Detailed explanation of Javascript string methods

Table of contents String length: length charAt() ...

CSS to achieve Skeleton Screen effect

When loading network data, in order to improve th...

Solution to the problem that the docker container cannot be stopped

The solution is as follows: 1. Force delete conta...

Nginx configuration 80 port access 8080 and project name address method analysis

Tomcat accesses the project, usually ip + port + ...

How to write a picture as a background and a link (background picture plus link)

The picture is used as the background and the lin...

Vue implements accordion effect

This article example shares the specific code of ...