If you want to lower your system noise profile and/or keep that noise profile consistent so you don't have to keep making new NR profiles:
1: use the i7z utility to underclock your system, which will reduce your thermal needs which will make your system quieter.
2: get an SSD, use your HDD for low-priority storage (ie media you don't plan on using daily) so you can use laptop-mode-tools to spin it down when you aren't actively using it.
3: if you have a nice quality USB microphone and you have a wireless keyboard/mouse and a TV, get yourself a nice long USB cable, possibly an intermediate hub, hook your TV to the computer's display, and enjoy creating content from a nice leather recliner 10' or more from the TV. That'll reduce your effective system noise and make your content creation environment super comfy too. :-)
Re: #1, using i7z it is possible to increase your CPU's performance per watt by over 100%. I'm not going to get into the nitty-gritty of it other than to say that reducing HZ reduces vCore which reduces curent. Active CPU power usage is a function of HZ cubed, so if you lower peak HZ you can lower power consumption a lot for the same workload. I started with just disabling Intel Turbo Boost 2.0 and that increased performance per watt by 14% on my system. Lowering the clock 33% from the all-cores maximum increased performance per watt by 41%, and at the same time let my fan run in its second speed tier at a constant speed instead of varying up and down every 24 seconds, while transcoding with ghb, browsing, writing documents. Starting up Kodi still jumps the fan around because this script doesn't manage the IGP. AFAIK Intel's configurable TDP is still vapourware in Linux or I'd use that.
I wrote a script (ght - gnu handbrake throttle) to give me quick/easy access to the efficiency/latency tradeoff. ght takes <int 0..95> as argument, it uses a combination of underclocking and idle poll with SIGSTOP/SIGCONT to keep the system responsive while keeping it busy enough that the fan should operate at a stable frequency, while running ghb.
Here it is. Edit BASE and TURBO apropriately, you can get them by running i7z from the command line and observing the "Max Frequency without considering Turbo" in my case 25, and "Max TURBO..." - in my case 29.
1: use the i7z utility to underclock your system, which will reduce your thermal needs which will make your system quieter.
2: get an SSD, use your HDD for low-priority storage (ie media you don't plan on using daily) so you can use laptop-mode-tools to spin it down when you aren't actively using it.
3: if you have a nice quality USB microphone and you have a wireless keyboard/mouse and a TV, get yourself a nice long USB cable, possibly an intermediate hub, hook your TV to the computer's display, and enjoy creating content from a nice leather recliner 10' or more from the TV. That'll reduce your effective system noise and make your content creation environment super comfy too. :-)
Re: #1, using i7z it is possible to increase your CPU's performance per watt by over 100%. I'm not going to get into the nitty-gritty of it other than to say that reducing HZ reduces vCore which reduces curent. Active CPU power usage is a function of HZ cubed, so if you lower peak HZ you can lower power consumption a lot for the same workload. I started with just disabling Intel Turbo Boost 2.0 and that increased performance per watt by 14% on my system. Lowering the clock 33% from the all-cores maximum increased performance per watt by 41%, and at the same time let my fan run in its second speed tier at a constant speed instead of varying up and down every 24 seconds, while transcoding with ghb, browsing, writing documents. Starting up Kodi still jumps the fan around because this script doesn't manage the IGP. AFAIK Intel's configurable TDP is still vapourware in Linux or I'd use that.
I wrote a script (ght - gnu handbrake throttle) to give me quick/easy access to the efficiency/latency tradeoff. ght takes <int 0..95> as argument, it uses a combination of underclocking and idle poll with SIGSTOP/SIGCONT to keep the system responsive while keeping it busy enough that the fan should operate at a stable frequency, while running ghb.
Here it is. Edit BASE and TURBO apropriately, you can get them by running i7z from the command line and observing the "Max Frequency without considering Turbo" in my case 25, and "Max TURBO..." - in my case 29.
$ sudo i7z
[snip]
Max Frequency without considering Turbo 2494.00 MHz (99.76 x [25])
Max TURBO Multiplier (if Enabled) with 1/2/3/4 Cores is 31x/29x/29x/29x
[snip]
Max Frequency without considering Turbo 2494.00 MHz (99.76 x [25])
Max TURBO Multiplier (if Enabled) with 1/2/3/4 Cores is 31x/29x/29x/29x
Code:
user@localhost:~$ cat bin/ght #!/bin/bash # CPU idle target, default is 50%: IDLE_PCT=${1:-50}; # CPU normal run speed as a factor of 100MHZ: BASE=25 # CPU all-cores Turbo Boost speed as a factor of 100MHZ: TURBO=29 ### don't edit below this line: ### i7z(){ echo "$@" | sudo i7z_rw_registers 2>&1 |tail -3 |grep " is "; } # shut down running instance: for i in `pgrep -f /bin/bash.*bin/ght`; do (( $$ != i)) && kill "$i"; done # if 0 was passed disable ght entirely: [[ $1 = 0 ]] && { i7z turbo enable; i7z clock disable; echo "ght disabled"; exit 0; } echo "target idle $IDLE_PCT%"; # disable CPU turbo and adjust idle target accordingly: i7z turbo disable; (( IDLE_PCT-= 100-(BASE*100/TURBO),IDLE_PCT<0 )) && IDLE_PCT=1; echo "Turbo disabled, IDLE_PCT adjusted to $IDLE_PCT"; (( IDLE_PCT == 0 )) && { echo "Exiting"; exit; } # throttle the CPU in 12.5% increments and adjust idle target accordingly: (( THROTTLE=IDLE_PCT*2*TURBO/BASE/25, THROTTLE<1 )); (( THROTTLE>0)) && { IDLE_PCT=5; i7z clock set $(( 8 - THROTTLE)); echo "cpu throttled 12.5*$THROTTLE%, IDLE_PCT set to 5"; } avg=50; run=50; interval=500; # starting state: read x _user _nice _sys _idle _io _irq _soft x </proc/stat (( _total=_user+_nice+_sys+_idle+_io+_irq+_soft )); while read x user nice sys idle io irq soft x </proc/stat; do (( total=user+nice+sys+idle+io+irq+soft, diff=total-_total,zzz=idle-_idle )); (( _total=total,_idle=idle )); (( interval+= (zzz/4-IDLE_PCT) )); (( interval < 50 )) && interval=50; (( interval > 950 )) && interval=950; killall -CONT ghb || sleep 30; printf -v run "%03d" $interval; printf -v sleep "%03d" $(( 1000-$interval )); sleep "0.$run"; killall -STOP ghb || sleep 30; sleep "0.$sleep"; done&
Comment