diff --git a/Sources/Containerization/ContainerStatistics.swift b/Sources/Containerization/ContainerStatistics.swift index b9db7ca6..c4167871 100644 --- a/Sources/Containerization/ContainerStatistics.swift +++ b/Sources/Containerization/ContainerStatistics.swift @@ -66,6 +66,11 @@ public struct ContainerStatistics: Sendable { public var majorPageFaults: UInt64 public var inactiveFile: UInt64 public var anon: UInt64 + public var workingsetRefaultAnon: UInt64 + public var workingsetRefaultFile: UInt64 + public var pgstealKswapd: UInt64 + public var pgstealDirect: UInt64 + public var pgstealKhugepaged: UInt64 public init( usageBytes: UInt64, @@ -78,7 +83,12 @@ public struct ContainerStatistics: Sendable { pageFaults: UInt64, majorPageFaults: UInt64, inactiveFile: UInt64, - anon: UInt64 + anon: UInt64, + workingsetRefaultAnon: UInt64 = 0, + workingsetRefaultFile: UInt64 = 0, + pgstealKswapd: UInt64 = 0, + pgstealDirect: UInt64 = 0, + pgstealKhugepaged: UInt64 = 0 ) { self.usageBytes = usageBytes self.limitBytes = limitBytes @@ -91,6 +101,11 @@ public struct ContainerStatistics: Sendable { self.majorPageFaults = majorPageFaults self.inactiveFile = inactiveFile self.anon = anon + self.workingsetRefaultAnon = workingsetRefaultAnon + self.workingsetRefaultFile = workingsetRefaultFile + self.pgstealKswapd = pgstealKswapd + self.pgstealDirect = pgstealDirect + self.pgstealKhugepaged = pgstealKhugepaged } } diff --git a/Sources/Containerization/SandboxContext/SandboxContext.pb.swift b/Sources/Containerization/SandboxContext/SandboxContext.pb.swift index e68f70b9..8157b5ae 100644 --- a/Sources/Containerization/SandboxContext/SandboxContext.pb.swift +++ b/Sources/Containerization/SandboxContext/SandboxContext.pb.swift @@ -1445,6 +1445,16 @@ public struct Com_Apple_Containerization_Sandbox_V3_MemoryStats: Sendable { public var anon: UInt64 = 0 + public var workingsetRefaultAnon: UInt64 = 0 + + public var workingsetRefaultFile: UInt64 = 0 + + public var pgstealKswapd: UInt64 = 0 + + public var pgstealDirect: UInt64 = 0 + + public var pgstealKhugepaged: UInt64 = 0 + public var unknownFields = SwiftProtobuf.UnknownStorage() public init() {} @@ -3855,7 +3865,7 @@ extension Com_Apple_Containerization_Sandbox_V3_ProcessStats: SwiftProtobuf.Mess extension Com_Apple_Containerization_Sandbox_V3_MemoryStats: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { public static let protoMessageName: String = _protobuf_package + ".MemoryStats" - public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{3}usage_bytes\0\u{3}limit_bytes\0\u{3}swap_usage_bytes\0\u{3}swap_limit_bytes\0\u{3}cache_bytes\0\u{3}kernel_stack_bytes\0\u{3}slab_bytes\0\u{3}page_faults\0\u{3}major_page_faults\0\u{3}inactive_file\0\u{1}anon\0") + public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{3}usage_bytes\0\u{3}limit_bytes\0\u{3}swap_usage_bytes\0\u{3}swap_limit_bytes\0\u{3}cache_bytes\0\u{3}kernel_stack_bytes\0\u{3}slab_bytes\0\u{3}page_faults\0\u{3}major_page_faults\0\u{3}inactive_file\0\u{1}anon\0\u{3}workingset_refault_anon\0\u{3}workingset_refault_file\0\u{3}pgsteal_kswapd\0\u{3}pgsteal_direct\0\u{3}pgsteal_khugepaged\0") public mutating func decodeMessage(decoder: inout D) throws { while let fieldNumber = try decoder.nextFieldNumber() { @@ -3874,6 +3884,11 @@ extension Com_Apple_Containerization_Sandbox_V3_MemoryStats: SwiftProtobuf.Messa case 9: try { try decoder.decodeSingularUInt64Field(value: &self.majorPageFaults) }() case 10: try { try decoder.decodeSingularUInt64Field(value: &self.inactiveFile) }() case 11: try { try decoder.decodeSingularUInt64Field(value: &self.anon) }() + case 12: try { try decoder.decodeSingularUInt64Field(value: &self.workingsetRefaultAnon) }() + case 13: try { try decoder.decodeSingularUInt64Field(value: &self.workingsetRefaultFile) }() + case 14: try { try decoder.decodeSingularUInt64Field(value: &self.pgstealKswapd) }() + case 15: try { try decoder.decodeSingularUInt64Field(value: &self.pgstealDirect) }() + case 16: try { try decoder.decodeSingularUInt64Field(value: &self.pgstealKhugepaged) }() default: break } } @@ -3913,6 +3928,21 @@ extension Com_Apple_Containerization_Sandbox_V3_MemoryStats: SwiftProtobuf.Messa if self.anon != 0 { try visitor.visitSingularUInt64Field(value: self.anon, fieldNumber: 11) } + if self.workingsetRefaultAnon != 0 { + try visitor.visitSingularUInt64Field(value: self.workingsetRefaultAnon, fieldNumber: 12) + } + if self.workingsetRefaultFile != 0 { + try visitor.visitSingularUInt64Field(value: self.workingsetRefaultFile, fieldNumber: 13) + } + if self.pgstealKswapd != 0 { + try visitor.visitSingularUInt64Field(value: self.pgstealKswapd, fieldNumber: 14) + } + if self.pgstealDirect != 0 { + try visitor.visitSingularUInt64Field(value: self.pgstealDirect, fieldNumber: 15) + } + if self.pgstealKhugepaged != 0 { + try visitor.visitSingularUInt64Field(value: self.pgstealKhugepaged, fieldNumber: 16) + } try unknownFields.traverse(visitor: &visitor) } @@ -3928,6 +3958,11 @@ extension Com_Apple_Containerization_Sandbox_V3_MemoryStats: SwiftProtobuf.Messa if lhs.majorPageFaults != rhs.majorPageFaults {return false} if lhs.inactiveFile != rhs.inactiveFile {return false} if lhs.anon != rhs.anon {return false} + if lhs.workingsetRefaultAnon != rhs.workingsetRefaultAnon {return false} + if lhs.workingsetRefaultFile != rhs.workingsetRefaultFile {return false} + if lhs.pgstealKswapd != rhs.pgstealKswapd {return false} + if lhs.pgstealDirect != rhs.pgstealDirect {return false} + if lhs.pgstealKhugepaged != rhs.pgstealKhugepaged {return false} if lhs.unknownFields != rhs.unknownFields {return false} return true } diff --git a/Sources/Containerization/SandboxContext/SandboxContext.proto b/Sources/Containerization/SandboxContext/SandboxContext.proto index e30edbe9..dfe8cd66 100644 --- a/Sources/Containerization/SandboxContext/SandboxContext.proto +++ b/Sources/Containerization/SandboxContext/SandboxContext.proto @@ -402,6 +402,11 @@ message MemoryStats { uint64 major_page_faults = 9; uint64 inactive_file = 10; uint64 anon = 11; + uint64 workingset_refault_anon = 12; + uint64 workingset_refault_file = 13; + uint64 pgsteal_kswapd = 14; + uint64 pgsteal_direct = 15; + uint64 pgsteal_khugepaged = 16; } message CPUStats { diff --git a/Sources/Containerization/Vminitd.swift b/Sources/Containerization/Vminitd.swift index d23eff53..92e6ee8d 100644 --- a/Sources/Containerization/Vminitd.swift +++ b/Sources/Containerization/Vminitd.swift @@ -124,7 +124,12 @@ extension Vminitd: VirtualMachineAgent { pageFaults: protoStats.memory.pageFaults, majorPageFaults: protoStats.memory.majorPageFaults, inactiveFile: protoStats.memory.inactiveFile, - anon: protoStats.memory.anon + anon: protoStats.memory.anon, + workingsetRefaultAnon: protoStats.memory.workingsetRefaultAnon, + workingsetRefaultFile: protoStats.memory.workingsetRefaultFile, + pgstealKswapd: protoStats.memory.pgstealKswapd, + pgstealDirect: protoStats.memory.pgstealDirect, + pgstealKhugepaged: protoStats.memory.pgstealKhugepaged ) : nil, cpu: categories.contains(.cpu) && protoStats.hasCpu ? .init( diff --git a/vminitd/Sources/Cgroup/Cgroup2Manager.swift b/vminitd/Sources/Cgroup/Cgroup2Manager.swift index bd5f6b46..7f1ccc13 100644 --- a/vminitd/Sources/Cgroup/Cgroup2Manager.swift +++ b/vminitd/Sources/Cgroup/Cgroup2Manager.swift @@ -430,9 +430,13 @@ public struct Cgroup2Manager: Sendable { fileWriteback: statValues["file_writeback"] ?? 0, pgfault: statValues["pgfault"] ?? 0, pgmajfault: statValues["pgmajfault"] ?? 0, - workingsetRefault: statValues["workingset_refault"] ?? 0, + workingsetRefaultAnon: statValues["workingset_refault_anon"] ?? 0, + workingsetRefaultFile: statValues["workingset_refault_file"] ?? 0, workingsetActivate: statValues["workingset_activate"] ?? 0, workingsetNodereclaim: statValues["workingset_nodereclaim"] ?? 0, + pgstealKswapd: statValues["pgsteal_kswapd"] ?? 0, + pgstealDirect: statValues["pgsteal_direct"] ?? 0, + pgstealKhugepaged: statValues["pgsteal_khugepaged"] ?? 0, inactiveAnon: statValues["inactive_anon"] ?? 0, activeAnon: statValues["active_anon"] ?? 0, inactiveFile: statValues["inactive_file"] ?? 0, @@ -573,10 +577,15 @@ package struct MemoryStats: Sendable { package var pgfault: UInt64 package var pgmajfault: UInt64 - package var workingsetRefault: UInt64 + package var workingsetRefaultAnon: UInt64 + package var workingsetRefaultFile: UInt64 package var workingsetActivate: UInt64 package var workingsetNodereclaim: UInt64 + package var pgstealKswapd: UInt64 + package var pgstealDirect: UInt64 + package var pgstealKhugepaged: UInt64 + package var inactiveAnon: UInt64 package var activeAnon: UInt64 package var inactiveFile: UInt64 @@ -598,9 +607,13 @@ package struct MemoryStats: Sendable { fileWriteback: UInt64 = 0, pgfault: UInt64 = 0, pgmajfault: UInt64 = 0, - workingsetRefault: UInt64 = 0, + workingsetRefaultAnon: UInt64 = 0, + workingsetRefaultFile: UInt64 = 0, workingsetActivate: UInt64 = 0, workingsetNodereclaim: UInt64 = 0, + pgstealKswapd: UInt64 = 0, + pgstealDirect: UInt64 = 0, + pgstealKhugepaged: UInt64 = 0, inactiveAnon: UInt64 = 0, activeAnon: UInt64 = 0, inactiveFile: UInt64 = 0, @@ -621,9 +634,13 @@ package struct MemoryStats: Sendable { self.fileWriteback = fileWriteback self.pgfault = pgfault self.pgmajfault = pgmajfault - self.workingsetRefault = workingsetRefault + self.workingsetRefaultAnon = workingsetRefaultAnon + self.workingsetRefaultFile = workingsetRefaultFile self.workingsetActivate = workingsetActivate self.workingsetNodereclaim = workingsetNodereclaim + self.pgstealKswapd = pgstealKswapd + self.pgstealDirect = pgstealDirect + self.pgstealKhugepaged = pgstealKhugepaged self.inactiveAnon = inactiveAnon self.activeAnon = activeAnon self.inactiveFile = inactiveFile diff --git a/vminitd/Sources/VminitdCore/Server+GRPC.swift b/vminitd/Sources/VminitdCore/Server+GRPC.swift index 15e8aa56..2399fc29 100644 --- a/vminitd/Sources/VminitdCore/Server+GRPC.swift +++ b/vminitd/Sources/VminitdCore/Server+GRPC.swift @@ -1510,6 +1510,11 @@ extension Initd: Com_Apple_Containerization_Sandbox_V3_SandboxContext.SimpleServ $0.majorPageFaults = memory.pgmajfault $0.inactiveFile = memory.inactiveFile $0.anon = memory.anon + $0.workingsetRefaultAnon = memory.workingsetRefaultAnon + $0.workingsetRefaultFile = memory.workingsetRefaultFile + $0.pgstealKswapd = memory.pgstealKswapd + $0.pgstealDirect = memory.pgstealDirect + $0.pgstealKhugepaged = memory.pgstealKhugepaged } }