libc_core/
resource.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
//! This module provides the `libc` types for Resource (system resource management).
//!
//! MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/include/sys/resource.h>

use crate::types::TimeVal;

/// 资源限制结构体(对应 C 的 `struct rlimit`)
/// 用于描述进程对某种资源的当前限制和最大限制
#[repr(C)]
#[cfg_attr(
    feature = "zerocopy",
    derive(
        zerocopy::FromBytes,
        zerocopy::Immutable,
        zerocopy::IntoBytes,
        zerocopy::KnownLayout
    )
)]
#[derive(Debug, Clone, Default)]
pub struct Rlimit {
    /// 当前资源软限制(soft limit),即实际生效的限制值
    /// 进程可以在不超过 `max` 的情况下修改它
    pub curr: usize,
    /// 最大资源限制(hard limit),软限制不能超过该值
    /// 只有具有特权的进程才能提升此值
    pub max: usize,
}

/// 资源使用情况结构体(对应 C 的 `struct rusage`)
/// 记录进程或线程的时间和资源消耗信息
/// MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/include/sys/resource.h#L27>
#[repr(C)]
#[cfg_attr(
    feature = "zerocopy",
    derive(
        zerocopy::FromBytes,
        zerocopy::Immutable,
        zerocopy::IntoBytes,
        zerocopy::KnownLayout
    )
)]
#[derive(Clone, Default)]
pub struct Rusage {
    /// 用户态运行时间(单位:秒 + 微秒)
    pub utime: TimeVal,
    /// 内核态运行时间(单位:秒 + 微秒)
    pub stime: TimeVal,
    /// 最大常驻集大小(单位:KB),即内存占用峰值
    pub maxrss: i64,
    /// 索引页的使用数量(已废弃)
    pub ixrss: i64,
    /// 数据段内存使用量(已废弃)
    pub idrss: i64,
    /// 堆栈段内存使用量(已废弃)
    pub isrss: i64,
    /// 页面缺页异常数(软缺页,不涉及磁盘 IO)
    pub minflt: i64,
    /// 主缺页异常数(硬缺页,需要从磁盘读取页面)
    pub majflt: i64,
    /// 发生的交换(swap)次数
    pub nswap: i64,
    /// 输入操作(块设备读取)的次数
    pub inblock: i64,
    /// 输出操作(块设备写入)的次数
    pub oublock: i64,
    /// 发送的 IPC 消息数(已废弃)
    pub msgsnd: i64,
    /// 接收的 IPC 消息数(已废弃)
    pub msgrcv: i64,
    /// 捕获的信号数量
    pub nsignals: i64,
    /// 自愿上下文切换次数(如等待锁)
    pub nvcsw: i64,
    /// 非自愿上下文切换次数(被内核抢占)
    pub nivcsw: i64,
}