intelcpu
1.0.0
intel_pStateドライバーとの対話を可能にするパッケージは、CPUの頻度と政治を駆動します。
Intel_PSTATEドライバーをインストールしてアクティブ化する必要があります。通常、サンディブリッジとその後のCPU用のLinuxカーネル4.13に既に含まれています。
Githubから入手してください:
go get -u https://github.com/gopowersupply/intelcpuドキュメントはこちらをご覧ください
intel_pstate CPUパフォーマンススケーリングドライバーターボブーストステータスを変更する簡単な例:
cpu := intelcpu . New ()
turbo , _ := cpu . GetTurbo ()
if turbo {
cpu . SetTurbo ( false )
} else {
cpu . SetTurbo ( true )
}実際のプロジェクトでは、ドライバーとそのステータスを確認することを強くお勧めします。
cpu := intelcpu . New ()
if err := cpu . CheckDriver (); err != nil {
// [...] Some troubles or driver not installed
}
status , _ := cpu . GetStatus ()
switch status {
case intelcpu . PStateStatusActive :
// [...] All is ok
case intelcpu . PStateStatusPassive :
// [...] Something wrong, working partially
case intelcpu . PStateStatusOff :
// [...] Driver disabled, nothing to work
}いくつかのコアを有効または無効にすることができます。もちろん、最初を除いて:
cpu := intelcpu . New ()
cores , _ := cpu . GetCores ()
for _ , core := range cores {
// First core will return false and its status always will be online
isOfflineAvailable , _ := core . IsOfflineAvailable ()
isOnline , _ := core . IsOnline ()
fmt . Printf ( "Core %d is online: %v" , isOnline )
// If core can be offline then do it
if isOfflineAvailable {
core . SetOnline ( false )
}
}CPU周波数制限も変更できます。
cpu := intelcpu . New ()
cpu . SetMaxPerf ( 0.5 ) // 50% of maxコアパフォーマンスと知事政治も変更することができます。
cpu := intelcpu . New ()
cores , _ := cpu . GetCores ()
for _ , core := range cores {
core . SetGovernor ( intelcpu . CPUGovernorPerformance )
core . SetPreference ( intelcpu . CPUPreferencePerformance )
}短い方法:
cpu := intelcpu . New ()
cores , _ := cpu . GetCores ()
cores . SetGovernor ( intelcpu . CPUGovernorPerformance )
cores . SetPreference ( intelcpu . CPUPreferencePerformance )このパッケージには、独自のエラータイプCPUErrorがあります
パッケージエラーを関数に渡してから、 errors.Asを介して検出できます。
func ExecUnexpected () error {
// [...] Here your other returns with own errors
cpu := intelcpu . New ()
_ , err := cpu . GetCore ( 20000 )
if err != nil {
return err
}
// [...] Here your other returns with own errors
}
func main () {
err := ExecUnexpected ()
if intelcpu . IsCPUError ( err ) {
// [...] to do anything
} else {
// [...] to do something other
}
}また、 errors.As(err, &intelcpu.CPUError{})代替として使用できます。