sys_path = $path; } $this->readSysInfo(); } /** * Read and cache information from sysfs * */ protected function readSysInfo() { // Get number of CPU cores $cpus = glob($this->sys_path . "/cpu?"); $this->num_cpus = count($cpus); // Get the available CPU frequencies $freq_raw = file_get_contents($this->sys_path."/cpu0/cpufreq/scaling_available_frequencies"); $freq_list = explode(" ", trim($freq_raw)); sort($freq_list); $this->available_frequencies = array_map("intval", $freq_list); // Get the available CPU governor $govr_raw = file_get_contents($this->sys_path."/cpu0/cpufreq/scaling_available_governors"); $govr_list = explode(" ", trim($govr_raw)); sort($govr_list); $this->available_governors = $govr_list; } /** * Get the number of CPU cores in the system. The operations by the CPU * class will operate on all cores. * * @return int The number of CPU cores */ public function getNumCpus() { return $this->num_cpus; } /** * Get the available CPU frequencies in hertz for scaling. * * @return int[] The available CPU frequencies */ public function getAvailableFrequencies() { return $this->available_frequencies; } /** * Get the current scaling frequency of the CPU in hertz. * * @return int The CPU frequency in Hz */ public function getCurrentFrequency() { $freq_curr = file_get_contents($this->sys_path."/cpu0/cpufreq/scaling_cur_freq"); return (int)$freq_curr; } public function setCurrentFrequency($freq) { if (!in_array((int)$freq, $this->available_frequencies)) { $avail = join(", ", $this->available_frequencies); throw new \InvalidArgumentException("CPU frequency {$freq} not supported (available: {$avail}"); } file_put_contents($this->sys_path."/cpu0/cpufreq/scaling_cur_freq", (int)$freq); } /** * Get a list of the available governors * * @return string[] The available governors */ public function getAvailableGovernors() { return $this->available_governors; } /** * Get the currently active governor * * @return string The name of the currently active governor */ public function getCurrentGovernor() { $govr_curr = file_get_contents($this->sys_path."/cpu0/cpufreq/scaling_governor"); return trim($govr_curr); } public function setCurrentGovernor($governor) { if (!in_array((int)$governor, $this->available_governors)) { $avail = join(", ", $this->available_governors); throw new \InvalidArgumentException("Governor {$governor} not supported (available: {$avail}"); } file_put_contents($this->sys_path."/cpu0/cpufreq/scaling_governor", $governor); } }