Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions cmd/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -296,10 +296,7 @@ func printConfig(myTargets []target.Target, localTempDir string) (err error) {
// collectOnTarget runs the scripts on the target and sends the results to the appropriate channels
func collectOnTarget(myTarget target.Target, scriptsToRun []script.ScriptDefinition, localTempDir string, channelTargetScriptOutputs chan common.TargetScriptOutputs, channelError chan error, statusUpdate progress.MultiSpinnerUpdateFunc) {
// run the scripts on the target
if statusUpdate != nil {
_ = statusUpdate(myTarget.GetName(), "collecting configuration")
}
scriptOutputs, err := script.RunScripts(myTarget, scriptsToRun, true, localTempDir)
scriptOutputs, err := script.RunScripts(myTarget, scriptsToRun, true, localTempDir, statusUpdate, "collecting configuration")
if err != nil {
if statusUpdate != nil {
_ = statusUpdate(myTarget.GetName(), fmt.Sprintf("error collecting configuration: %v", err))
Expand Down
8 changes: 4 additions & 4 deletions cmd/config/set.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ func setLlcSize(desiredLlcSize float64, myTarget target.Target, localTempDir str
scripts = append(scripts, script.GetScriptByName(script.LspciBitsScriptName))
scripts = append(scripts, script.GetScriptByName(script.LspciDevicesScriptName))
scripts = append(scripts, script.GetScriptByName(script.L3CacheWayEnabledName))
outputs, err := script.RunScripts(myTarget, scripts, true, localTempDir)
outputs, err := script.RunScripts(myTarget, scripts, true, localTempDir, nil, "")
if err != nil {
completeChannel <- setOutput{goRoutineID: goRoutineId, err: fmt.Errorf("failed to run scripts on target: %w", err)}
return
Expand Down Expand Up @@ -296,7 +296,7 @@ func setUncoreDieFrequency(maxFreq bool, computeDie bool, uncoreFrequency float6
// build list of compute or IO dies
scripts := []script.ScriptDefinition{}
scripts = append(scripts, script.GetScriptByName(script.UncoreDieTypesFromTPMIScriptName))
outputs, err := script.RunScripts(myTarget, scripts, true, localTempDir)
outputs, err := script.RunScripts(myTarget, scripts, true, localTempDir, nil, "")
if err != nil {
completeChannel <- setOutput{goRoutineID: goRoutineId, err: fmt.Errorf("failed to run scripts on target: %w", err)}
return
Expand Down Expand Up @@ -354,7 +354,7 @@ func setUncoreFrequency(maxFreq bool, uncoreFrequency float64, myTarget target.T
// Depends: []string{"rdmsr"},
// Lkms: []string{"msr"},
})
outputs, err := script.RunScripts(myTarget, scripts, true, localTempDir)
outputs, err := script.RunScripts(myTarget, scripts, true, localTempDir, nil, "")
if err != nil {
completeChannel <- setOutput{goRoutineID: goRoutineId, err: fmt.Errorf("failed to run scripts on target: %w", err)}
return
Expand Down Expand Up @@ -639,7 +639,7 @@ func setPrefetcher(enableDisable string, myTarget target.Target, localTempDir st
scripts = append(scripts, script.GetScriptByName(script.LscpuScriptName))
scripts = append(scripts, script.GetScriptByName(script.LspciBitsScriptName))
scripts = append(scripts, script.GetScriptByName(script.LspciDevicesScriptName))
outputs, err := script.RunScripts(myTarget, scripts, true, localTempDir)
outputs, err := script.RunScripts(myTarget, scripts, true, localTempDir, nil, "")
if err != nil {
completeChannel <- setOutput{goRoutineID: goRoutineId, err: fmt.Errorf("failed to run scripts on target: %w", err)}
return
Expand Down
4 changes: 2 additions & 2 deletions cmd/metrics/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ func (c *X86MetadataCollector) CollectMetadata(myTarget target.Target, noRoot bo
return Metadata{}, fmt.Errorf("failed to get metadata scripts: %v", err)
}
// run the scripts
scriptOutputs, err := script.RunScripts(myTarget, metadataScripts, true, localTempDir) // nosemgrep
scriptOutputs, err := script.RunScripts(myTarget, metadataScripts, true, localTempDir, nil, "") // nosemgrep
if err != nil {
return Metadata{}, fmt.Errorf("failed to run metadata scripts: %v", err)
}
Expand Down Expand Up @@ -347,7 +347,7 @@ func (c *ARMMetadataCollector) CollectMetadata(myTarget target.Target, noRoot bo
return Metadata{}, fmt.Errorf("failed to get metadata scripts: %v", err)
}
// run the scripts
scriptOutputs, err := script.RunScripts(myTarget, metadataScripts, true, localTempDir) // nosemgrep
scriptOutputs, err := script.RunScripts(myTarget, metadataScripts, true, localTempDir, nil, "") // nosemgrep
if err != nil {
return Metadata{}, fmt.Errorf("failed to run metadata scripts: %v", err)
}
Expand Down
5 changes: 1 addition & 4 deletions internal/common/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -580,10 +580,7 @@ func collectOnTarget(myTarget target.Target, scriptsToRun []script.ScriptDefinit
} else if duration != "0" && duration != "" {
status += fmt.Sprintf(" for %s seconds", duration)
}
if statusUpdate != nil {
_ = statusUpdate(myTarget.GetName(), status)
}
scriptOutputs, err := script.RunScripts(myTarget, scriptsToRun, true, localTempDir)
scriptOutputs, err := script.RunScripts(myTarget, scriptsToRun, true, localTempDir, statusUpdate, status)
if err != nil {
if statusUpdate != nil {
_ = statusUpdate(myTarget.GetName(), fmt.Sprintf("error collecting data: %v", err))
Expand Down
11 changes: 9 additions & 2 deletions internal/script/script.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
"text/template"

"perfspect/internal/cpus"
"perfspect/internal/progress"
"perfspect/internal/target"
"perfspect/internal/util"
)
Expand All @@ -37,7 +38,7 @@ func RunScript(myTarget target.Target, script ScriptDefinition, localTempDir str
err := fmt.Errorf("the \"%s\" script is not intended for the target processor", script.Name)
return ScriptOutput{}, err
}
scriptOutputs, err := RunScripts(myTarget, []ScriptDefinition{script}, false, localTempDir)
scriptOutputs, err := RunScripts(myTarget, []ScriptDefinition{script}, false, localTempDir, nil, "")
if scriptOutputs == nil {
return ScriptOutput{}, err
}
Expand All @@ -49,7 +50,7 @@ func RunScript(myTarget target.Target, script ScriptDefinition, localTempDir str
}

// RunScripts runs a list of scripts on a target and returns the outputs of each script as a map with the script name as the key.
func RunScripts(myTarget target.Target, scripts []ScriptDefinition, ignoreScriptErrors bool, localTempDir string) (map[string]ScriptOutput, error) {
func RunScripts(myTarget target.Target, scripts []ScriptDefinition, ignoreScriptErrors bool, localTempDir string, statusUpdate progress.MultiSpinnerUpdateFunc, collectingStatus string) (map[string]ScriptOutput, error) {
// drop scripts that should not be run and separate scripts that must run sequentially from those that can be run in parallel
canElevate := myTarget.CanElevatePrivileges()
var sequentialScripts []ScriptDefinition
Expand All @@ -70,6 +71,9 @@ func RunScripts(myTarget target.Target, scripts []ScriptDefinition, ignoreScript
}
}
// prepare target to run scripts by copying scripts and dependencies to target and installing LKMs
if statusUpdate != nil {
_ = statusUpdate(myTarget.GetName(), "preparing to collect data")
}
installedLkms, err := prepareTargetToRunScripts(myTarget, append(sequentialScripts, parallelScripts...), localTempDir, false)
if err != nil {
err = fmt.Errorf("error while preparing target to run scripts: %v", err)
Expand All @@ -83,6 +87,9 @@ func RunScripts(myTarget target.Target, scripts []ScriptDefinition, ignoreScript
}
}()
}
if statusUpdate != nil {
_ = statusUpdate(myTarget.GetName(), collectingStatus)
}
// if there's only 1 parallel script, run it sequentially
if len(parallelScripts) == 1 {
slog.Debug("running single parallel script sequentially", slog.String("script", parallelScripts[0].Name))
Expand Down