본문 바로가기
# 애플 [Apple]/macOS

[🍎 macOS] macOS 운영체제 시스템 CPU 사용량 (macOS CPU System Using Resource)

by cy_mos 2024. 8. 11.
반응형
  • 시스템 (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

반응형

댓글