반응형
- 시스템 (System): macOS 운영체제 시스템 프로세스들이 사용하고 있는 CPU 사용률입니다.
- 사용자 (User): 사용자가 열어 놓은 애플리케이션 또는 해당 애플리케이션이 열어 놓은 프로세스들이 사용하고 있는 CPU 사용률입니다.
- 대기 (Idle): 현재 시스템 및 사용자가 사용하고 있지 않은 CPU 사용률입니다.
추가 정보는 아래와 같습니다.
- nice: 프로세스에 CPU 시간 할당에 대하여 우선 순위를 부여할 수 있습니다. 음수 -20이 가장 높은 우선순위를 가지며 양수 19가 가장 낮은 우선순위를 가집니다.
🗂️ [Swift] macOS 운영체제 시스템 CPU 사용량 가져오기
import Darwin
import Foundation
public struct SKCPUResourceInfo: Codable {
/// Using Total CPU `[% Percentage]`
public let value: Double
/// The percentage of CPU capability that’s being used by processes that belong to macOS.
public let systemValue: Double
/// The percentage of CPU capability that’s being used by apps you opened, or by the processes opened by those apps.
public let userValue: Double
/// The percentage of CPU capability that’s not being used.
public let idleValue: Double
}
var previousSystemResource: host_cpu_load_info = host_cpu_load_info()
final func getHostStatisticsWithCPU() -> host_cpu_load_info {
var size = mach_msg_type_number_t(MemoryLayout<host_cpu_load_info_data_t>.size / MemoryLayout<integer_t>.size)
let capacity = Int(size)
let hostInfo = host_cpu_load_info_t.allocate(capacity: 1)
let _ = hostInfo.withMemoryRebound(to: integer_t.self, capacity: capacity) { (pointer) -> kern_return_t in
return host_statistics(mach_host_self(), HOST_CPU_LOAD_INFO, pointer, &size)
}
let data = hostInfo.move()
hostInfo.deallocate()
return data
}
final func getSystemCPUResource(type: SKResourceDataUnit = .gigaByte) -> SKCPUResourceInfo {
let load = getHostStatisticsWithCPU()
let userDiff = Double(load.cpu_ticks.0 - self.previousSystemResource.cpu_ticks.0)
let sysDiff = Double(load.cpu_ticks.1 - self.previousSystemResource.cpu_ticks.1)
let idleDiff = Double(load.cpu_ticks.2 - self.previousSystemResource.cpu_ticks.2)
let niceDiff = Double(load.cpu_ticks.3 - self.previousSystemResource.cpu_ticks.3)
self.previousSystemResource = load
let totalTicks = sysDiff + userDiff + idleDiff + niceDiff
let sys = (100.0 * sysDiff / totalTicks)
let user = (100.0 * userDiff / totalTicks)
let idle = (100.0 * idleDiff / totalTicks)
return SKCPUResourceInfo(value: min(99.9, (sys + user).round2dp),
systemValue: sys.round2dp,
userValue: user.round2dp,
idleValue: idle.round2dp)
}
🚀 REFERENCE
반응형
댓글