📄 sa.h
字号:
/* * sar/sadc: report system activity * (C) 1999-2006 by Sebastien Godard (sysstat <at> wanadoo.fr) */#ifndef _SA_H#define _SA_H/* Get IFNAMSIZ */#include <net/if.h>#ifndef IFNAMSIZ#define IFNAMSIZ 16#endif#include "common.h"/* * System activity daily file magic number * (will vary when file format changes) */#define SA_MAGIC 0x2168/* Define activities */#define A_PROC 0x000001#define A_CTXSW 0x000002#define A_CPU 0x000004#define A_IRQ 0x000008#define A_ONE_IRQ 0x000010#define A_SWAP 0x000020#define A_IO 0x000040#define A_MEMORY 0x000080#define A_SERIAL 0x000100#define A_NET_DEV 0x000200#define A_NET_EDEV 0x000400#define A_DISK 0x000800#define A_PID 0x001000#define A_CPID 0x002000#define A_NET_NFS 0x004000#define A_NET_NFSD 0x008000#define A_PAGE 0x010000#define A_MEM_AMT 0x020000#define A_KTABLES 0x040000#define A_NET_SOCK 0x080000#define A_QUEUE 0x100000#define A_LAST 0x100000#define GET_PROC(m) (((m) & A_PROC) == A_PROC)#define GET_CTXSW(m) (((m) & A_CTXSW) == A_CTXSW)#define GET_CPU(m) (((m) & A_CPU) == A_CPU)#define GET_IRQ(m) (((m) & A_IRQ) == A_IRQ)#define GET_PAGE(m) (((m) & A_PAGE) == A_PAGE)#define GET_SWAP(m) (((m) & A_SWAP) == A_SWAP)#define GET_IO(m) (((m) & A_IO) == A_IO)#define GET_ONE_IRQ(m) (((m) & A_ONE_IRQ) == A_ONE_IRQ)#define GET_MEMORY(m) (((m) & A_MEMORY) == A_MEMORY)#define GET_PID(m) (((m) & A_PID) == A_PID)#define GET_CPID(m) (((m) & A_CPID) == A_CPID)#define GET_CPID(m) (((m) & A_CPID) == A_CPID)#define GET_ALL_PID(m) (((m) & A_ALL_PID) == A_ALL_PID)#define GET_SERIAL(m) (((m) & A_SERIAL) == A_SERIAL)#define GET_MEM_AMT(m) (((m) & A_MEM_AMT) == A_MEM_AMT)#define GET_KTABLES(m) (((m) & A_KTABLES) == A_KTABLES)#define GET_NET_DEV(m) (((m) & A_NET_DEV) == A_NET_DEV)#define GET_NET_EDEV(m) (((m) & A_NET_EDEV) == A_NET_EDEV)#define GET_NET_SOCK(m) (((m) & A_NET_SOCK) == A_NET_SOCK)#define GET_NET_NFS(m) (((m) & A_NET_NFS) == A_NET_NFS)#define GET_NET_NFSD(m) (((m) & A_NET_NFSD) == A_NET_NFSD)#define GET_QUEUE(m) (((m) & A_QUEUE) == A_QUEUE)#define GET_DISK(m) (((m) & A_DISK) == A_DISK)/* * kB -> number of pages. * Page size depends on machine architecture (4 kB, 8 kB, 16 kB, 64 kB...) */#define PG(k) ((k) >> kb_shift)/* Keywords */#define K_XALL "XALL"#define K_SUM "SUM"#define K_SELF "SELF"#define K_SADC "SADC"#define K_DEV "DEV"#define K_EDEV "EDEV"#define K_NFS "NFS"#define K_NFSD "NFSD"#define K_SOCK "SOCK"/* S_= sar/sadc/sadf - F_= Flag */#define S_F_ALL_PROC 0x0001#define S_F_SA_ROTAT 0x0002#define S_F_DEV_PRETTY 0x0004#define S_F_A_OPTION 0x0008#define S_F_F_OPTION 0x0010#define S_F_I_OPTION 0x0020#define S_F_TRUE_TIME 0x0040#define S_F_L_OPTION 0x0080#define S_F_HAS_PPARTITIONS 0x0100#define S_F_HAS_DISKSTATS 0x0200#define S_F_FILE_LCK 0X0400#define S_F_PER_PROC 0x0800#define S_F_X_ALL 0x1000#define WANT_ALL_PROC(m) (((m) & S_F_ALL_PROC) == S_F_ALL_PROC)#define WANT_SA_ROTAT(m) (((m) & S_F_SA_ROTAT) == S_F_SA_ROTAT)#define USE_PRETTY_OPTION(m) (((m) & S_F_DEV_PRETTY) == S_F_DEV_PRETTY)#define USE_A_OPTION(m) (((m) & S_F_A_OPTION) == S_F_A_OPTION)#define USE_F_OPTION(m) (((m) & S_F_F_OPTION) == S_F_F_OPTION)#define USE_I_OPTION(m) (((m) & S_F_I_OPTION) == S_F_I_OPTION)#define PRINT_TRUE_TIME(m) (((m) & S_F_TRUE_TIME) == S_F_TRUE_TIME)#define USE_L_OPTION(m) (((m) & S_F_L_OPTION) == S_F_L_OPTION)#define HAS_PPARTITIONS(m) (((m) & S_F_HAS_PPARTITIONS) == S_F_HAS_PPARTITIONS)#define HAS_DISKSTATS(m) (((m) & S_F_HAS_DISKSTATS) == S_F_HAS_DISKSTATS)#define FILE_LOCKED(m) (((m) & S_F_FILE_LCK) == S_F_FILE_LCK)#define WANT_PER_PROC(m) (((m) & S_F_PER_PROC) == S_F_PER_PROC)#define WANT_ALL_PIDS(m) (((m) & S_F_X_ALL) == S_F_X_ALL)/* Output formats (O_= Output) */#define S_O_NONE 0#define S_O_HDR_OPTION 1#define S_O_PPC_OPTION 2#define S_O_DB_OPTION 3#define S_O_XML_OPTION 4/* Files */#define PROC "/proc"#define PSTAT "stat"#define MEMINFO "/proc/meminfo"#define PID_STAT "/proc/%ld/stat"#define SERIAL "/proc/tty/driver/serial"#define FDENTRY_STATE "/proc/sys/fs/dentry-state"#define FFILE_NR "/proc/sys/fs/file-nr"#define FINODE_STATE "/proc/sys/fs/inode-state"#define FDQUOT_NR "/proc/sys/fs/dquot-nr"#define FDQUOT_MAX "/proc/sys/fs/dquot-max"#define FSUPER_NR "/proc/sys/fs/super-nr"#define FSUPER_MAX "/proc/sys/fs/super-max"#define FRTSIG_NR "/proc/sys/kernel/rtsig-nr"#define FRTSIG_MAX "/proc/sys/kernel/rtsig-max"#define NET_DEV "/proc/net/dev"#define NET_SOCKSTAT "/proc/net/sockstat"#define NET_RPC_NFS "/proc/net/rpc/nfs"#define NET_RPC_NFSD "/proc/net/rpc/nfsd"#define SADC "sadc"#define LOADAVG "/proc/loadavg"#define VMSTAT "/proc/vmstat"#define NR_IFACE_PREALLOC 2#define NR_SERIAL_PREALLOC 2#define NR_IRQPROC_PREALLOC 3#define NR_IRQS 256/* Maximum number of processes that can be monitored simultaneously */#define MAX_PID_NR 256/* Maximum length of network interface name */#define MAX_IFACE_LEN IFNAMSIZ/* * Maximum number of args that can be passed to sadc: * sadc -x <pid> [-x <pid> ...] -X <pid> [-X <pid> ...] * -I <interval> <count> <outfile> NULL */#define MAX_ARGV_NR (64 * 2) + 6#define USE_SADC 0#define USE_SA_FILE 1#define ST_IMMEDIATE 0#define ST_SINCE_BOOT 1#define NO_TM_START 0#define NO_TM_END 0#define NO_RESET 0#define NON_FATAL 0#define FATAL 1#define C_SAR 0#define C_SADF 1#define X_PID_SET 0x01#define X_PPID_SET 0x02/* Record type */#define R_STATS 1#define R_DUMMY 2#define R_LAST_STATS 3#define SOFT_SIZE 0#define HARD_SIZE 1/* * IMPORTANT NOTE: * Attributes such as 'aligned' and 'packed' have been defined for every * members of the following structures, so that: * 1) structures have a fixed size whether on 32 or 64-bit systems, * 2) we don't have variable gap between members. * Indeed, we want to be able to read daily data files recorded on * 32 and 64-bit systems, even if we are not on the same architecture. * Moreover, we are sure that sizeof(struct) is a constant for every * struct of same type, so that expressions like * struct *foo2 = struct *foo1 + i; * can be safely used. * * Structures are padded so that their length be a multiple of 8 bytes. * It is better (although not compulsory) for structures written * contiguously into daily data files and accessed the following way once * they are read into memory: * struct *foo2 = struct *foo1 + i; (since i <=> sizeof(struct foo)) *//* System activity data file header */struct file_hdr { /* --- LONG --- */ /* Time stamp in seconds since the epoch */ unsigned long sa_ust_time __attribute__ ((aligned (8))); /* --- INT --- */ /* Activity flag */ unsigned int sa_actflag __attribute__ ((aligned (8))); /* Number of processes to monitor ( {-x | -X } ALL) */ unsigned int sa_nr_pid __attribute__ ((packed)); /* Number of interrupts per processor: 2 means two interrupts */ unsigned int sa_irqcpu __attribute__ ((packed)); /* Number of disks */ unsigned int sa_nr_disk __attribute__ ((packed)); /* Number of processors: 1 means two proc */ unsigned int sa_proc __attribute__ ((packed)); /* Number of serial lines: 2 means two lines (ttyS00 and ttyS01) */ unsigned int sa_serial __attribute__ ((packed)); /* Number of network devices (interfaces): 2 means two lines */ unsigned int sa_iface __attribute__ ((packed)); /* --- SHORT --- */ /* System activity data file magic number */ unsigned short sa_magic __attribute__ ((packed)); /* file_stats structure size */ unsigned short sa_st_size __attribute__ ((packed)); /* --- CHAR --- */ /* * Current day, month and year. * No need to save DST (daylight saving time) flag, since it is not taken * into account by the strftime() function used to print the timestamp. */ unsigned char sa_day __attribute__ ((packed)); unsigned char sa_month __attribute__ ((packed)); unsigned char sa_year __attribute__ ((packed)); /* * Size of a long integer. Useful to know the architecture on which * the datafile was created. */ char sa_sizeof_long __attribute__ ((packed)); /* Operating system name */ char sa_sysname[UTSNAME_LEN] __attribute__ ((packed)); /* Machine hostname */ char sa_nodename[UTSNAME_LEN] __attribute__ ((packed)); /* Operating system release number */ char sa_release[UTSNAME_LEN] __attribute__ ((packed));};#define FILE_HDR_SIZE (sizeof(struct file_hdr))struct file_stats { /* --- LONG LONG --- */ /* Machine uptime (multiplied by the # of proc) */ unsigned long long uptime __attribute__ ((aligned (16))); /* Uptime reduced to one processor. Set *only* on SMP machines */ unsigned long long uptime0 __attribute__ ((aligned (16))); unsigned long long context_swtch __attribute__ ((aligned (16))); unsigned long long cpu_user __attribute__ ((aligned (16))); unsigned long long cpu_nice __attribute__ ((aligned (16))); unsigned long long cpu_system __attribute__ ((aligned (16))); unsigned long long cpu_idle __attribute__ ((aligned (16))); unsigned long long cpu_iowait __attribute__ ((aligned (16))); unsigned long long cpu_steal __attribute__ ((aligned (16))); unsigned long long irq_sum __attribute__ ((aligned (16))); /* --- LONG --- */ /* Time stamp (number of seconds since the epoch) */ unsigned long ust_time __attribute__ ((aligned (16))); unsigned long processes __attribute__ ((aligned (8))); unsigned long pgpgin __attribute__ ((aligned (8)));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -