1.. SPDX-License-Identifier: GPL-2.0 2 3============================================================ 4Intel(R) Speed Select Technology User Guide 5============================================================ 6 7The Intel(R) Speed Select Technology (Intel(R) SST) provides a powerful new 8collection of features that give more granular control over CPU performance. 9With Intel(R) SST, one server can be configured for power and performance for a 10variety of diverse workload requirements. 11 12Refer to the links below for an overview of the technology: 13 14- https://www.intel.com/content/www/us/en/architecture-and-technology/speed-select-technology-article.html 15- https://builders.intel.com/docs/networkbuilders/intel-speed-select-technology-base-frequency-enhancing-performance.pdf 16 17These capabilities are further enhanced in some of the newer generations of 18server platforms where these features can be enumerated and controlled 19dynamically without pre-configuring via BIOS setup options. This dynamic 20configuration is done via mailbox commands to the hardware. One way to enumerate 21and configure these features is by using the Intel Speed Select utility. 22 23This document explains how to use the Intel Speed Select tool to enumerate and 24control Intel(R) SST features. This document gives example commands and explains 25how these commands change the power and performance profile of the system under 26test. Using this tool as an example, customers can replicate the messaging 27implemented in the tool in their production software. 28 29intel-speed-select configuration tool 30====================================== 31 32Most Linux distribution packages may include the "intel-speed-select" tool. If not, 33it can be built by downloading the Linux kernel tree from kernel.org. Once 34downloaded, the tool can be built without building the full kernel. 35 36From the kernel tree, run the following commands:: 37 38# cd tools/power/x86/intel-speed-select/ 39# make 40# make install 41 42Getting Help 43------------ 44 45To get help with the tool, execute the command below:: 46 47# intel-speed-select --help 48 49The top-level help describes arguments and features. Notice that there is a 50multi-level help structure in the tool. For example, to get help for the feature "perf-profile":: 51 52# intel-speed-select perf-profile --help 53 54To get help on a command, another level of help is provided. For example for the command info "info":: 55 56# intel-speed-select perf-profile info --help 57 58Summary of platform capability 59------------------------------ 60To check the current platform and driver capabilities, execute:: 61 62#intel-speed-select --info 63 64For example on a test system:: 65 66 # intel-speed-select --info 67 Intel(R) Speed Select Technology 68 Executing on CPU model: X 69 Platform: API version : 1 70 Platform: Driver version : 1 71 Platform: mbox supported : 1 72 Platform: mmio supported : 1 73 Intel(R) SST-PP (feature perf-profile) is supported 74 TDP level change control is unlocked, max level: 4 75 Intel(R) SST-TF (feature turbo-freq) is supported 76 Intel(R) SST-BF (feature base-freq) is not supported 77 Intel(R) SST-CP (feature core-power) is supported 78 79Intel(R) Speed Select Technology - Performance Profile (Intel(R) SST-PP) 80------------------------------------------------------------------------ 81 82This feature allows configuration of a server dynamically based on workload 83performance requirements. This helps users during deployment as they do not have 84to choose a specific server configuration statically. This Intel(R) Speed Select 85Technology - Performance Profile (Intel(R) SST-PP) feature introduces a mechanism 86that allows multiple optimized performance profiles per system. Each profile 87defines a set of CPUs that need to be online and rest offline to sustain a 88guaranteed base frequency. Once the user issues a command to use a specific 89performance profile and meet CPU online/offline requirement, the user can expect 90a change in the base frequency dynamically. This feature is called 91"perf-profile" when using the Intel Speed Select tool. 92 93Number or performance levels 94~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 95 96There can be multiple performance profiles on a system. To get the number of 97profiles, execute the command below:: 98 99 # intel-speed-select perf-profile get-config-levels 100 Intel(R) Speed Select Technology 101 Executing on CPU model: X 102 package-0 103 die-0 104 cpu-0 105 get-config-levels:4 106 package-1 107 die-0 108 cpu-14 109 get-config-levels:4 110 111On this system under test, there are 4 performance profiles in addition to the 112base performance profile (which is performance level 0). 113 114Lock/Unlock status 115~~~~~~~~~~~~~~~~~~ 116 117Even if there are multiple performance profiles, it is possible that they 118are locked. If they are locked, users cannot issue a command to change the 119performance state. It is possible that there is a BIOS setup to unlock or check 120with your system vendor. 121 122To check if the system is locked, execute the following command:: 123 124 # intel-speed-select perf-profile get-lock-status 125 Intel(R) Speed Select Technology 126 Executing on CPU model: X 127 package-0 128 die-0 129 cpu-0 130 get-lock-status:0 131 package-1 132 die-0 133 cpu-14 134 get-lock-status:0 135 136In this case, lock status is 0, which means that the system is unlocked. 137 138Properties of a performance level 139~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 140 141To get properties of a specific performance level (For example for the level 0, below), execute the command below:: 142 143 # intel-speed-select perf-profile info -l 0 144 Intel(R) Speed Select Technology 145 Executing on CPU model: X 146 package-0 147 die-0 148 cpu-0 149 perf-profile-level-0 150 cpu-count:28 151 enable-cpu-mask:000003ff,f0003fff 152 enable-cpu-list:0,1,2,3,4,5,6,7,8,9,10,11,12,13,28,29,30,31,32,33,34,35,36,37,38,39,40,41 153 thermal-design-power-ratio:26 154 base-frequency(MHz):2600 155 speed-select-turbo-freq:disabled 156 speed-select-base-freq:disabled 157 ... 158 ... 159 160Here -l option is used to specify a performance level. 161 162If the option -l is omitted, then this command will print information about all 163the performance levels. The above command is printing properties of the 164performance level 0. 165 166For this performance profile, the list of CPUs displayed by the 167"enable-cpu-mask/enable-cpu-list" at the max can be "online." When that 168condition is met, then base frequency of 2600 MHz can be maintained. To 169understand more, execute "intel-speed-select perf-profile info" for performance 170level 4:: 171 172 # intel-speed-select perf-profile info -l 4 173 Intel(R) Speed Select Technology 174 Executing on CPU model: X 175 package-0 176 die-0 177 cpu-0 178 perf-profile-level-4 179 cpu-count:28 180 enable-cpu-mask:000000fa,f0000faf 181 enable-cpu-list:0,1,2,3,5,7,8,9,10,11,28,29,30,31,33,35,36,37,38,39 182 thermal-design-power-ratio:28 183 base-frequency(MHz):2800 184 speed-select-turbo-freq:disabled 185 speed-select-base-freq:unsupported 186 ... 187 ... 188 189There are fewer CPUs in the "enable-cpu-mask/enable-cpu-list". Consequently, if 190the user only keeps these CPUs online and the rest "offline," then the base 191frequency is increased to 2.8 GHz compared to 2.6 GHz at performance level 0. 192 193Get current performance level 194~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 195 196To get the current performance level, execute:: 197 198 # intel-speed-select perf-profile get-config-current-level 199 Intel(R) Speed Select Technology 200 Executing on CPU model: X 201 package-0 202 die-0 203 cpu-0 204 get-config-current_level:0 205 206First verify that the base_frequency displayed by the cpufreq sysfs is correct:: 207 208 # cat /sys/devices/system/cpu/cpu0/cpufreq/base_frequency 209 2600000 210 211This matches the base-frequency (MHz) field value displayed from the 212"perf-profile info" command for performance level 0(cpufreq frequency is in 213KHz). 214 215To check if the average frequency is equal to the base frequency for a 100% busy 216workload, disable turbo:: 217 218# echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo 219 220Then runs a busy workload on all CPUs, for example:: 221 222#stress -c 64 223 224To verify the base frequency, run turbostat:: 225 226 #turbostat -c 0-13 --show Package,Core,CPU,Bzy_MHz -i 1 227 228 Package Core CPU Bzy_MHz 229 - - 2600 230 0 0 0 2600 231 0 1 1 2600 232 0 2 2 2600 233 0 3 3 2600 234 0 4 4 2600 235 . . . . 236 237 238Changing performance level 239~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 240 241To the change the performance level to 4, execute:: 242 243 # intel-speed-select -d perf-profile set-config-level -l 4 -o 244 Intel(R) Speed Select Technology 245 Executing on CPU model: X 246 package-0 247 die-0 248 cpu-0 249 perf-profile 250 set_tdp_level:success 251 252In the command above, "-o" is optional. If it is specified, then it will also 253offline CPUs which are not present in the enable_cpu_mask for this performance 254level. 255 256Now if the base_frequency is checked:: 257 258 #cat /sys/devices/system/cpu/cpu0/cpufreq/base_frequency 259 2800000 260 261Which shows that the base frequency now increased from 2600 MHz at performance 262level 0 to 2800 MHz at performance level 4. As a result, any workload, which can 263use fewer CPUs, can see a boost of 200 MHz compared to performance level 0. 264 265Check presence of other Intel(R) SST features 266--------------------------------------------- 267 268Each of the performance profiles also specifies weather there is support of 269other two Intel(R) SST features (Intel(R) Speed Select Technology - Base Frequency 270(Intel(R) SST-BF) and Intel(R) Speed Select Technology - Turbo Frequency (Intel 271SST-TF)). 272 273For example, from the output of "perf-profile info" above, for level 0 and level 2744: 275 276For level 0:: 277 speed-select-turbo-freq:disabled 278 speed-select-base-freq:disabled 279 280For level 4:: 281 speed-select-turbo-freq:disabled 282 speed-select-base-freq:unsupported 283 284Given these results, the "speed-select-base-freq" (Intel(R) SST-BF) in level 4 285changed from "disabled" to "unsupported" compared to performance level 0. 286 287This means that at performance level 4, the "speed-select-base-freq" feature is 288not supported. However, at performance level 0, this feature is "supported", but 289currently "disabled", meaning the user has not activated this feature. Whereas 290"speed-select-turbo-freq" (Intel(R) SST-TF) is supported at both performance 291levels, but currently not activated by the user. 292 293The Intel(R) SST-BF and the Intel(R) SST-TF features are built on a foundation 294technology called Intel(R) Speed Select Technology - Core Power (Intel(R) SST-CP). 295The platform firmware enables this feature when Intel(R) SST-BF or Intel(R) SST-TF 296is supported on a platform. 297 298Intel(R) Speed Select Technology Core Power (Intel(R) SST-CP) 299--------------------------------------------------------------- 300 301Intel(R) Speed Select Technology Core Power (Intel(R) SST-CP) is an interface that 302allows users to define per core priority. This defines a mechanism to distribute 303power among cores when there is a power constrained scenario. This defines a 304class of service (CLOS) configuration. 305 306The user can configure up to 4 class of service configurations. Each CLOS group 307configuration allows definitions of parameters, which affects how the frequency 308can be limited and power is distributed. Each CPU core can be tied to a class of 309service and hence an associated priority. The granularity is at core level not 310at per CPU level. 311 312Enable CLOS based prioritization 313~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 314 315To use CLOS based prioritization feature, firmware must be informed to enable 316and use a priority type. There is a default per platform priority type, which 317can be changed with optional command line parameter. 318 319To enable and check the options, execute:: 320 321 # intel-speed-select core-power enable --help 322 Intel(R) Speed Select Technology 323 Executing on CPU model: X 324 Enable core-power for a package/die 325 Clos Enable: Specify priority type with [--priority|-p] 326 0: Proportional, 1: Ordered 327 328There are two types of priority types: 329 330- Ordered 331 332Priority for ordered throttling is defined based on the index of the assigned 333CLOS group. Where CLOS0 gets highest priority (throttled last). 334 335Priority order is: 336CLOS0 > CLOS1 > CLOS2 > CLOS3. 337 338- Proportional 339 340When proportional priority is used, there is an additional parameter called 341frequency_weight, which can be specified per CLOS group. The goal of 342proportional priority is to provide each core with the requested min., then 343distribute all remaining (excess/deficit) budgets in proportion to a defined 344weight. This proportional priority can be configured using "core-power config" 345command. 346 347To enable with the platform default priority type, execute:: 348 349 # intel-speed-select core-power enable 350 Intel(R) Speed Select Technology 351 Executing on CPU model: X 352 package-0 353 die-0 354 cpu-0 355 core-power 356 enable:success 357 package-1 358 die-0 359 cpu-6 360 core-power 361 enable:success 362 363The scope of this enable is per package or die scoped when a package contains 364multiple dies. To check if CLOS is enabled and get priority type, "core-power 365info" command can be used. For example to check the status of core-power feature 366on CPU 0, execute:: 367 368 # intel-speed-select -c 0 core-power info 369 Intel(R) Speed Select Technology 370 Executing on CPU model: X 371 package-0 372 die-0 373 cpu-0 374 core-power 375 support-status:supported 376 enable-status:enabled 377 clos-enable-status:enabled 378 priority-type:proportional 379 package-1 380 die-0 381 cpu-24 382 core-power 383 support-status:supported 384 enable-status:enabled 385 clos-enable-status:enabled 386 priority-type:proportional 387 388Configuring CLOS groups 389~~~~~~~~~~~~~~~~~~~~~~~ 390 391Each CLOS group has its own attributes including min, max, freq_weight and 392desired. These parameters can be configured with "core-power config" command. 393Defaults will be used if user skips setting a parameter except clos id, which is 394mandatory. To check core-power config options, execute:: 395 396 # intel-speed-select core-power config --help 397 Intel(R) Speed Select Technology 398 Executing on CPU model: X 399 Set core-power configuration for one of the four clos ids 400 Specify targeted clos id with [--clos|-c] 401 Specify clos Proportional Priority [--weight|-w] 402 Specify clos min in MHz with [--min|-n] 403 Specify clos max in MHz with [--max|-m] 404 405For example:: 406 407 # intel-speed-select core-power config -c 0 408 Intel(R) Speed Select Technology 409 Executing on CPU model: X 410 clos epp is not specified, default: 0 411 clos frequency weight is not specified, default: 0 412 clos min is not specified, default: 0 MHz 413 clos max is not specified, default: 25500 MHz 414 clos desired is not specified, default: 0 415 package-0 416 die-0 417 cpu-0 418 core-power 419 config:success 420 package-1 421 die-0 422 cpu-6 423 core-power 424 config:success 425 426The user has the option to change defaults. For example, the user can change the 427"min" and set the base frequency to always get guaranteed base frequency. 428 429Get the current CLOS configuration 430~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 431 432To check the current configuration, "core-power get-config" can be used. For 433example, to get the configuration of CLOS 0:: 434 435 # intel-speed-select core-power get-config -c 0 436 Intel(R) Speed Select Technology 437 Executing on CPU model: X 438 package-0 439 die-0 440 cpu-0 441 core-power 442 clos:0 443 epp:0 444 clos-proportional-priority:0 445 clos-min:0 MHz 446 clos-max:Max Turbo frequency 447 clos-desired:0 MHz 448 package-1 449 die-0 450 cpu-24 451 core-power 452 clos:0 453 epp:0 454 clos-proportional-priority:0 455 clos-min:0 MHz 456 clos-max:Max Turbo frequency 457 clos-desired:0 MHz 458 459Associating a CPU with a CLOS group 460~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 461 462To associate a CPU to a CLOS group "core-power assoc" command can be used:: 463 464 # intel-speed-select core-power assoc --help 465 Intel(R) Speed Select Technology 466 Executing on CPU model: X 467 Associate a clos id to a CPU 468 Specify targeted clos id with [--clos|-c] 469 470 471For example to associate CPU 10 to CLOS group 3, execute:: 472 473 # intel-speed-select -c 10 core-power assoc -c 3 474 Intel(R) Speed Select Technology 475 Executing on CPU model: X 476 package-0 477 die-0 478 cpu-10 479 core-power 480 assoc:success 481 482Once a CPU is associated, its sibling CPUs are also associated to a CLOS group. 483Once associated, avoid changing Linux "cpufreq" subsystem scaling frequency 484limits. 485 486To check the existing association for a CPU, "core-power get-assoc" command can 487be used. For example, to get association of CPU 10, execute:: 488 489 # intel-speed-select -c 10 core-power get-assoc 490 Intel(R) Speed Select Technology 491 Executing on CPU model: X 492 package-1 493 die-0 494 cpu-10 495 get-assoc 496 clos:3 497 498This shows that CPU 10 is part of a CLOS group 3. 499 500 501Disable CLOS based prioritization 502~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 503 504To disable, execute:: 505 506# intel-speed-select core-power disable 507 508Some features like Intel(R) SST-TF can only be enabled when CLOS based prioritization 509is enabled. For this reason, disabling while Intel(R) SST-TF is enabled can cause 510Intel(R) SST-TF to fail. This will cause the "disable" command to display an error 511if Intel(R) SST-TF is already enabled. In turn, to disable, the Intel(R) SST-TF 512feature must be disabled first. 513 514Intel(R) Speed Select Technology - Base Frequency (Intel(R) SST-BF) 515------------------------------------------------------------------- 516 517The Intel(R) Speed Select Technology - Base Frequency (Intel(R) SST-BF) feature lets 518the user control base frequency. If some critical workload threads demand 519constant high guaranteed performance, then this feature can be used to execute 520the thread at higher base frequency on specific sets of CPUs (high priority 521CPUs) at the cost of lower base frequency (low priority CPUs) on other CPUs. 522This feature does not require offline of the low priority CPUs. 523 524The support of Intel(R) SST-BF depends on the Intel(R) Speed Select Technology - 525Performance Profile (Intel(R) SST-PP) performance level configuration. It is 526possible that only certain performance levels support Intel(R) SST-BF. It is also 527possible that only base performance level (level = 0) has support of Intel 528SST-BF. Consequently, first select the desired performance level to enable this 529feature. 530 531In the system under test here, Intel(R) SST-BF is supported at the base 532performance level 0, but currently disabled. For example for the level 0:: 533 534 # intel-speed-select -c 0 perf-profile info -l 0 535 Intel(R) Speed Select Technology 536 Executing on CPU model: X 537 package-0 538 die-0 539 cpu-0 540 perf-profile-level-0 541 ... 542 543 speed-select-base-freq:disabled 544 ... 545 546Before enabling Intel(R) SST-BF and measuring its impact on a workload 547performance, execute some workload and measure performance and get a baseline 548performance to compare against. 549 550Here the user wants more guaranteed performance. For this reason, it is likely 551that turbo is disabled. To disable turbo, execute:: 552 553#echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo 554 555Based on the output of the "intel-speed-select perf-profile info -l 0" base 556frequency of guaranteed frequency 2600 MHz. 557 558 559Measure baseline performance for comparison 560~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 561 562To compare, pick a multi-threaded workload where each thread can be scheduled on 563separate CPUs. "Hackbench pipe" test is a good example on how to improve 564performance using Intel(R) SST-BF. 565 566Below, the workload is measuring average scheduler wakeup latency, so a lower 567number means better performance:: 568 569 # taskset -c 3,4 perf bench -r 100 sched pipe 570 # Running 'sched/pipe' benchmark: 571 # Executed 1000000 pipe operations between two processes 572 Total time: 6.102 [sec] 573 6.102445 usecs/op 574 163868 ops/sec 575 576While running the above test, if we take turbostat output, it will show us that 5772 of the CPUs are busy and reaching max. frequency (which would be the base 578frequency as the turbo is disabled). The turbostat output:: 579 580 #turbostat -c 0-13 --show Package,Core,CPU,Bzy_MHz -i 1 581 Package Core CPU Bzy_MHz 582 0 0 0 1000 583 0 1 1 1005 584 0 2 2 1000 585 0 3 3 2600 586 0 4 4 2600 587 0 5 5 1000 588 0 6 6 1000 589 0 7 7 1005 590 0 8 8 1005 591 0 9 9 1000 592 0 10 10 1000 593 0 11 11 995 594 0 12 12 1000 595 0 13 13 1000 596 597From the above turbostat output, both CPU 3 and 4 are very busy and reaching 598full guaranteed frequency of 2600 MHz. 599 600Intel(R) SST-BF Capabilities 601~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 602 603To get capabilities of Intel(R) SST-BF for the current performance level 0, 604execute:: 605 606 # intel-speed-select base-freq info -l 0 607 Intel(R) Speed Select Technology 608 Executing on CPU model: X 609 package-0 610 die-0 611 cpu-0 612 speed-select-base-freq 613 high-priority-base-frequency(MHz):3000 614 high-priority-cpu-mask:00000216,00002160 615 high-priority-cpu-list:5,6,8,13,33,34,36,41 616 low-priority-base-frequency(MHz):2400 617 tjunction-temperature(C):125 618 thermal-design-power(W):205 619 620The above capabilities show that there are some CPUs on this system that can 621offer base frequency of 3000 MHz compared to the standard base frequency at this 622performance levels. Nevertheless, these CPUs are fixed, and they are presented 623via high-priority-cpu-list/high-priority-cpu-mask. But if this Intel(R) SST-BF 624feature is selected, the low priorities CPUs (which are not in 625high-priority-cpu-list) can only offer up to 2400 MHz. As a result, if this 626clipping of low priority CPUs is acceptable, then the user can enable Intel 627SST-BF feature particularly for the above "sched pipe" workload since only two 628CPUs are used, they can be scheduled on high priority CPUs and can get boost of 629400 MHz. 630 631Enable Intel(R) SST-BF 632~~~~~~~~~~~~~~~~~~~~~~ 633 634To enable Intel(R) SST-BF feature, execute:: 635 636 # intel-speed-select base-freq enable -a 637 Intel(R) Speed Select Technology 638 Executing on CPU model: X 639 package-0 640 die-0 641 cpu-0 642 base-freq 643 enable:success 644 package-1 645 die-0 646 cpu-14 647 base-freq 648 enable:success 649 650In this case, -a option is optional. This not only enables Intel(R) SST-BF, but it 651also adjusts the priority of cores using Intel(R) Speed Select Technology Core 652Power (Intel(R) SST-CP) features. This option sets the minimum performance of each 653Intel(R) Speed Select Technology - Performance Profile (Intel(R) SST-PP) class to 654maximum performance so that the hardware will give maximum performance possible 655for each CPU. 656 657If -a option is not used, then the following steps are required before enabling 658Intel(R) SST-BF: 659 660- Discover Intel(R) SST-BF and note low and high priority base frequency 661- Note the high priority CPU list 662- Enable CLOS using core-power feature set 663- Configure CLOS parameters. Use CLOS.min to set to minimum performance 664- Subscribe desired CPUs to CLOS groups 665 666With this configuration, if the same workload is executed by pinning the 667workload to high priority CPUs (CPU 5 and 6 in this case):: 668 669 #taskset -c 5,6 perf bench -r 100 sched pipe 670 # Running 'sched/pipe' benchmark: 671 # Executed 1000000 pipe operations between two processes 672 Total time: 5.627 [sec] 673 5.627922 usecs/op 674 177685 ops/sec 675 676This way, by enabling Intel(R) SST-BF, the performance of this benchmark is 677improved (latency reduced) by 7.79%. From the turbostat output, it can be 678observed that the high priority CPUs reached 3000 MHz compared to 2600 MHz. 679The turbostat output:: 680 681 #turbostat -c 0-13 --show Package,Core,CPU,Bzy_MHz -i 1 682 Package Core CPU Bzy_MHz 683 0 0 0 2151 684 0 1 1 2166 685 0 2 2 2175 686 0 3 3 2175 687 0 4 4 2175 688 0 5 5 3000 689 0 6 6 3000 690 0 7 7 2180 691 0 8 8 2662 692 0 9 9 2176 693 0 10 10 2175 694 0 11 11 2176 695 0 12 12 2176 696 0 13 13 2661 697 698Disable Intel(R) SST-BF 699~~~~~~~~~~~~~~~~~~~~~~~ 700 701To disable the Intel(R) SST-BF feature, execute:: 702 703# intel-speed-select base-freq disable -a 704 705 706Intel(R) Speed Select Technology - Turbo Frequency (Intel(R) SST-TF) 707-------------------------------------------------------------------- 708 709This feature enables the ability to set different "All core turbo ratio limits" 710to cores based on the priority. By using this feature, some cores can be 711configured to get higher turbo frequency by designating them as high priority at 712the cost of lower or no turbo frequency on the low priority cores. 713 714For this reason, this feature is only useful when system is busy utilizing all 715CPUs, but the user wants some configurable option to get high performance on 716some CPUs. 717 718The support of Intel(R) Speed Select Technology - Turbo Frequency (Intel(R) SST-TF) 719depends on the Intel(R) Speed Select Technology - Performance Profile (Intel 720SST-PP) performance level configuration. It is possible that only a certain 721performance level supports Intel(R) SST-TF. It is also possible that only the base 722performance level (level = 0) has the support of Intel(R) SST-TF. Hence, first 723select the desired performance level to enable this feature. 724 725In the system under test here, Intel(R) SST-TF is supported at the base 726performance level 0, but currently disabled:: 727 728 # intel-speed-select -c 0 perf-profile info -l 0 729 Intel(R) Speed Select Technology 730 package-0 731 die-0 732 cpu-0 733 perf-profile-level-0 734 ... 735 ... 736 speed-select-turbo-freq:disabled 737 ... 738 ... 739 740 741To check if performance can be improved using Intel(R) SST-TF feature, get the turbo 742frequency properties with Intel(R) SST-TF enabled and compare to the base turbo 743capability of this system. 744 745Get Base turbo capability 746~~~~~~~~~~~~~~~~~~~~~~~~~ 747 748To get the base turbo capability of performance level 0, execute:: 749 750 # intel-speed-select perf-profile info -l 0 751 Intel(R) Speed Select Technology 752 Executing on CPU model: X 753 package-0 754 die-0 755 cpu-0 756 perf-profile-level-0 757 ... 758 ... 759 turbo-ratio-limits-sse 760 bucket-0 761 core-count:2 762 max-turbo-frequency(MHz):3200 763 bucket-1 764 core-count:4 765 max-turbo-frequency(MHz):3100 766 bucket-2 767 core-count:6 768 max-turbo-frequency(MHz):3100 769 bucket-3 770 core-count:8 771 max-turbo-frequency(MHz):3100 772 bucket-4 773 core-count:10 774 max-turbo-frequency(MHz):3100 775 bucket-5 776 core-count:12 777 max-turbo-frequency(MHz):3100 778 bucket-6 779 core-count:14 780 max-turbo-frequency(MHz):3100 781 bucket-7 782 core-count:16 783 max-turbo-frequency(MHz):3100 784 785Based on the data above, when all the CPUS are busy, the max. frequency of 3100 786MHz can be achieved. If there is some busy workload on cpu 0 - 11 (e.g. stress) 787and on CPU 12 and 13, execute "hackbench pipe" workload:: 788 789 # taskset -c 12,13 perf bench -r 100 sched pipe 790 # Running 'sched/pipe' benchmark: 791 # Executed 1000000 pipe operations between two processes 792 Total time: 5.705 [sec] 793 5.705488 usecs/op 794 175269 ops/sec 795 796The turbostat output:: 797 798 #turbostat -c 0-13 --show Package,Core,CPU,Bzy_MHz -i 1 799 Package Core CPU Bzy_MHz 800 0 0 0 3000 801 0 1 1 3000 802 0 2 2 3000 803 0 3 3 3000 804 0 4 4 3000 805 0 5 5 3100 806 0 6 6 3100 807 0 7 7 3000 808 0 8 8 3100 809 0 9 9 3000 810 0 10 10 3000 811 0 11 11 3000 812 0 12 12 3100 813 0 13 13 3100 814 815Based on turbostat output, the performance is limited by frequency cap of 3100 816MHz. To check if the hackbench performance can be improved for CPU 12 and CPU 81713, first check the capability of the Intel(R) SST-TF feature for this performance 818level. 819 820Get Intel(R) SST-TF Capability 821~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 822 823To get the capability, the "turbo-freq info" command can be used:: 824 825 # intel-speed-select turbo-freq info -l 0 826 Intel(R) Speed Select Technology 827 Executing on CPU model: X 828 package-0 829 die-0 830 cpu-0 831 speed-select-turbo-freq 832 bucket-0 833 high-priority-cores-count:2 834 high-priority-max-frequency(MHz):3200 835 high-priority-max-avx2-frequency(MHz):3200 836 high-priority-max-avx512-frequency(MHz):3100 837 bucket-1 838 high-priority-cores-count:4 839 high-priority-max-frequency(MHz):3100 840 high-priority-max-avx2-frequency(MHz):3000 841 high-priority-max-avx512-frequency(MHz):2900 842 bucket-2 843 high-priority-cores-count:6 844 high-priority-max-frequency(MHz):3100 845 high-priority-max-avx2-frequency(MHz):3000 846 high-priority-max-avx512-frequency(MHz):2900 847 speed-select-turbo-freq-clip-frequencies 848 low-priority-max-frequency(MHz):2600 849 low-priority-max-avx2-frequency(MHz):2400 850 low-priority-max-avx512-frequency(MHz):2100 851 852Based on the output above, there is an Intel(R) SST-TF bucket for which there are 853two high priority cores. If only two high priority cores are set, then max. 854turbo frequency on those cores can be increased to 3200 MHz. This is 100 MHz 855more than the base turbo capability for all cores. 856 857In turn, for the hackbench workload, two CPUs can be set as high priority and 858rest as low priority. One side effect is that once enabled, the low priority 859cores will be clipped to a lower frequency of 2600 MHz. 860 861Enable Intel(R) SST-TF 862~~~~~~~~~~~~~~~~~~~~~~ 863 864To enable Intel(R) SST-TF, execute:: 865 866 # intel-speed-select -c 12,13 turbo-freq enable -a 867 Intel(R) Speed Select Technology 868 Executing on CPU model: X 869 package-0 870 die-0 871 cpu-12 872 turbo-freq 873 enable:success 874 package-0 875 die-0 876 cpu-13 877 turbo-freq 878 enable:success 879 package--1 880 die-0 881 cpu-63 882 turbo-freq --auto 883 enable:success 884 885In this case, the option "-a" is optional. If set, it enables Intel(R) SST-TF 886feature and also sets the CPUs to high and low priority using Intel Speed 887Select Technology Core Power (Intel(R) SST-CP) features. The CPU numbers passed 888with "-c" arguments are marked as high priority, including its siblings. 889 890If -a option is not used, then the following steps are required before enabling 891Intel(R) SST-TF: 892 893- Discover Intel(R) SST-TF and note buckets of high priority cores and maximum frequency 894 895- Enable CLOS using core-power feature set - Configure CLOS parameters 896 897- Subscribe desired CPUs to CLOS groups making sure that high priority cores are set to the maximum frequency 898 899If the same hackbench workload is executed, schedule hackbench threads on high 900priority CPUs:: 901 902 #taskset -c 12,13 perf bench -r 100 sched pipe 903 # Running 'sched/pipe' benchmark: 904 # Executed 1000000 pipe operations between two processes 905 Total time: 5.510 [sec] 906 5.510165 usecs/op 907 180826 ops/sec 908 909This improved performance by around 3.3% improvement on a busy system. Here the 910turbostat output will show that the CPU 12 and CPU 13 are getting 100 MHz boost. 911The turbostat output:: 912 913 #turbostat -c 0-13 --show Package,Core,CPU,Bzy_MHz -i 1 914 Package Core CPU Bzy_MHz 915 ... 916 0 12 12 3200 917 0 13 13 3200 918