Add stats from ninja subprocesses to build.trace.gz
Propagate the subprocess stats from ninja to build.trace.gz. There is too much data here to put into separate counters for each statistic, so put them into args on each duration event for now. We would like to track max RSS for each subprocess, but the Linux kernel inherits the max RSS of the ninja process in each subprocess, which sets a lower bound on the measurable max RSS to the size of the ninja process. The ninja process is large due to the multi-GB build.ninja files. Bug: 170701554 Test: examine build.trace.gz Change-Id: I8aaaafe627a57f1a500af098c097c6381c583ba5
This commit is contained in:
parent
ce4c7cd55d
commit
d888b6b4fc
|
@ -162,6 +162,17 @@ func (n *NinjaReader) run() {
|
|||
Action: started,
|
||||
Output: msg.EdgeFinished.GetOutput(),
|
||||
Error: err,
|
||||
Stats: ActionResultStats{
|
||||
UserTime: msg.EdgeFinished.GetUserTime(),
|
||||
SystemTime: msg.EdgeFinished.GetSystemTime(),
|
||||
MaxRssKB: msg.EdgeFinished.GetMaxRssKb(),
|
||||
MinorPageFaults: msg.EdgeFinished.GetMinorPageFaults(),
|
||||
MajorPageFaults: msg.EdgeFinished.GetMajorPageFaults(),
|
||||
IOInputKB: msg.EdgeFinished.GetIoInputKb(),
|
||||
IOOutputKB: msg.EdgeFinished.GetIoOutputKb(),
|
||||
VoluntaryContextSwitches: msg.EdgeFinished.GetVoluntaryContextSwitches(),
|
||||
InvoluntaryContextSwitches: msg.EdgeFinished.GetInvoluntaryContextSwitches(),
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -371,10 +371,24 @@ type Status_EdgeFinished struct {
|
|||
// Number of milliseconds spent executing in user mode
|
||||
UserTime *uint32 `protobuf:"varint,5,opt,name=user_time,json=userTime" json:"user_time,omitempty"`
|
||||
// Number of milliseconds spent executing in kernel mode
|
||||
SystemTime *uint32 `protobuf:"varint,6,opt,name=system_time,json=systemTime" json:"system_time,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
SystemTime *uint32 `protobuf:"varint,6,opt,name=system_time,json=systemTime" json:"system_time,omitempty"`
|
||||
// Max resident set size in kB
|
||||
MaxRssKb *uint64 `protobuf:"varint,7,opt,name=max_rss_kb,json=maxRssKb" json:"max_rss_kb,omitempty"`
|
||||
// Minor page faults
|
||||
MinorPageFaults *uint64 `protobuf:"varint,8,opt,name=minor_page_faults,json=minorPageFaults" json:"minor_page_faults,omitempty"`
|
||||
// Major page faults
|
||||
MajorPageFaults *uint64 `protobuf:"varint,9,opt,name=major_page_faults,json=majorPageFaults" json:"major_page_faults,omitempty"`
|
||||
// IO input in kB
|
||||
IoInputKb *uint64 `protobuf:"varint,10,opt,name=io_input_kb,json=ioInputKb" json:"io_input_kb,omitempty"`
|
||||
// IO output in kB
|
||||
IoOutputKb *uint64 `protobuf:"varint,11,opt,name=io_output_kb,json=ioOutputKb" json:"io_output_kb,omitempty"`
|
||||
// Voluntary context switches
|
||||
VoluntaryContextSwitches *uint64 `protobuf:"varint,12,opt,name=voluntary_context_switches,json=voluntaryContextSwitches" json:"voluntary_context_switches,omitempty"`
|
||||
// Involuntary context switches
|
||||
InvoluntaryContextSwitches *uint64 `protobuf:"varint,13,opt,name=involuntary_context_switches,json=involuntaryContextSwitches" json:"involuntary_context_switches,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *Status_EdgeFinished) Reset() { *m = Status_EdgeFinished{} }
|
||||
|
@ -444,6 +458,55 @@ func (m *Status_EdgeFinished) GetSystemTime() uint32 {
|
|||
return 0
|
||||
}
|
||||
|
||||
func (m *Status_EdgeFinished) GetMaxRssKb() uint64 {
|
||||
if m != nil && m.MaxRssKb != nil {
|
||||
return *m.MaxRssKb
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *Status_EdgeFinished) GetMinorPageFaults() uint64 {
|
||||
if m != nil && m.MinorPageFaults != nil {
|
||||
return *m.MinorPageFaults
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *Status_EdgeFinished) GetMajorPageFaults() uint64 {
|
||||
if m != nil && m.MajorPageFaults != nil {
|
||||
return *m.MajorPageFaults
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *Status_EdgeFinished) GetIoInputKb() uint64 {
|
||||
if m != nil && m.IoInputKb != nil {
|
||||
return *m.IoInputKb
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *Status_EdgeFinished) GetIoOutputKb() uint64 {
|
||||
if m != nil && m.IoOutputKb != nil {
|
||||
return *m.IoOutputKb
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *Status_EdgeFinished) GetVoluntaryContextSwitches() uint64 {
|
||||
if m != nil && m.VoluntaryContextSwitches != nil {
|
||||
return *m.VoluntaryContextSwitches
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *Status_EdgeFinished) GetInvoluntaryContextSwitches() uint64 {
|
||||
if m != nil && m.InvoluntaryContextSwitches != nil {
|
||||
return *m.InvoluntaryContextSwitches
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type Status_Message struct {
|
||||
// Message priority level (DEBUG, INFO, WARNING, ERROR).
|
||||
Level *Status_Message_Level `protobuf:"varint,1,opt,name=level,enum=ninja.Status_Message_Level,def=0" json:"level,omitempty"`
|
||||
|
@ -511,39 +574,48 @@ func init() {
|
|||
}
|
||||
|
||||
var fileDescriptor_eca3873955a29cfe = []byte{
|
||||
// 539 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x54, 0xd1, 0x6e, 0xd3, 0x4a,
|
||||
0x10, 0xbd, 0x4e, 0xe2, 0x38, 0x1e, 0x27, 0xb9, 0x61, 0x25, 0x90, 0xeb, 0x0a, 0x35, 0xea, 0x53,
|
||||
0x5f, 0x08, 0x12, 0x42, 0x42, 0x20, 0x24, 0x44, 0x44, 0x5a, 0x8a, 0x20, 0x95, 0xb6, 0x45, 0x48,
|
||||
0xbc, 0x44, 0x4e, 0x77, 0x5a, 0x8c, 0xec, 0x75, 0xe4, 0xdd, 0x54, 0xe2, 0x37, 0xf8, 0x09, 0xfe,
|
||||
0x80, 0xaf, 0xe3, 0x01, 0xed, 0xec, 0xda, 0x75, 0x68, 0xdf, 0x7c, 0x76, 0xce, 0x9c, 0x39, 0x7b,
|
||||
0x76, 0x64, 0x18, 0x5f, 0x55, 0xa5, 0xd4, 0x28, 0xc5, 0x6c, 0x53, 0x95, 0xba, 0x64, 0xbe, 0xcc,
|
||||
0xe4, 0xf7, 0xf4, 0xf0, 0x4f, 0x00, 0xfd, 0x73, 0x9d, 0xea, 0xad, 0x62, 0x2f, 0x21, 0xd2, 0xa5,
|
||||
0x4e, 0xf3, 0x15, 0x8a, 0x6b, 0x54, 0xb1, 0x37, 0xf5, 0x8e, 0xa2, 0x67, 0xf1, 0x8c, 0x78, 0x33,
|
||||
0xcb, 0x99, 0x5d, 0x18, 0xc2, 0xc2, 0xd4, 0x39, 0xe8, 0xe6, 0x9b, 0xbd, 0x81, 0xd1, 0x7a, 0x9b,
|
||||
0xe5, 0x62, 0xa5, 0x74, 0x5a, 0x69, 0x14, 0x71, 0x87, 0x9a, 0x93, 0xdd, 0xe6, 0xb9, 0xa1, 0x9c,
|
||||
0x5b, 0x06, 0x1f, 0xae, 0x5b, 0x88, 0xcd, 0x61, 0x6c, 0x05, 0xae, 0x32, 0x99, 0xa9, 0x6f, 0x28,
|
||||
0xe2, 0x2e, 0x29, 0xec, 0xdf, 0xa3, 0x70, 0xec, 0x28, 0xdc, 0xce, 0xac, 0x21, 0x7b, 0x0d, 0x43,
|
||||
0xe3, 0xbc, 0xf1, 0xd0, 0x23, 0x85, 0xbd, 0x5d, 0x05, 0xe3, 0xb7, 0xb6, 0x10, 0xe1, 0x2d, 0x30,
|
||||
0x57, 0xa0, 0xee, 0xc6, 0x80, 0x7f, 0xdf, 0x15, 0x4c, 0x7b, 0x33, 0x9f, 0xc6, 0x35, 0xe3, 0x9f,
|
||||
0x42, 0x50, 0xa0, 0x52, 0xe9, 0x35, 0xc6, 0x7d, 0x6a, 0x7d, 0xb8, 0xdb, 0xfa, 0xc9, 0x16, 0x79,
|
||||
0xcd, 0x4a, 0x9e, 0x00, 0xdc, 0xc6, 0xc9, 0x0e, 0xee, 0xa6, 0x3f, 0x6a, 0x67, 0x9c, 0x7c, 0x80,
|
||||
0x61, 0x3b, 0x40, 0x36, 0x85, 0x68, 0x93, 0x56, 0x69, 0x9e, 0x63, 0x9e, 0xa9, 0xc2, 0x35, 0xb4,
|
||||
0x8f, 0x58, 0x0c, 0xc1, 0x0d, 0x56, 0xeb, 0x52, 0x21, 0xbd, 0xc7, 0x80, 0xd7, 0x30, 0xf9, 0x1f,
|
||||
0x46, 0x3b, 0x51, 0x26, 0xbf, 0x3d, 0x88, 0x5a, 0xd1, 0xb0, 0x31, 0x74, 0x32, 0xe1, 0x34, 0x3b,
|
||||
0x99, 0x60, 0x8f, 0x01, 0x28, 0xd6, 0x95, 0xce, 0x0a, 0xab, 0x36, 0xe2, 0x21, 0x9d, 0x5c, 0x64,
|
||||
0x05, 0xb2, 0x47, 0xd0, 0xcf, 0xe4, 0x66, 0xab, 0x55, 0xdc, 0x9d, 0x76, 0x8f, 0x42, 0xee, 0x90,
|
||||
0x71, 0x50, 0x6e, 0x35, 0x15, 0x7a, 0x54, 0xa8, 0x21, 0x63, 0xd0, 0x13, 0xa8, 0x2e, 0x29, 0xe5,
|
||||
0x90, 0xd3, 0xb7, 0x61, 0x5f, 0x96, 0x45, 0x91, 0x4a, 0x41, 0x09, 0x86, 0xbc, 0x86, 0xb6, 0x22,
|
||||
0x55, 0x99, 0x63, 0x1c, 0xd8, 0x9b, 0x38, 0x98, 0xfc, 0xf2, 0x60, 0xd8, 0x7e, 0x94, 0x3b, 0xce,
|
||||
0xf7, 0x60, 0x80, 0x52, 0xb4, 0x7d, 0x07, 0x28, 0x45, 0xed, 0x5a, 0xd1, 0xdb, 0xd0, 0xb2, 0x3d,
|
||||
0xe0, 0x0e, 0x99, 0x73, 0x6b, 0x93, 0x56, 0x28, 0xe4, 0x0e, 0xb1, 0x7d, 0x08, 0xb7, 0x0a, 0x2b,
|
||||
0xab, 0xe5, 0x93, 0xd6, 0xc0, 0x1c, 0x90, 0xd8, 0x01, 0x44, 0xea, 0x87, 0xd2, 0x58, 0xd8, 0x72,
|
||||
0xdf, 0xbe, 0x9f, 0x3d, 0x32, 0x84, 0xe4, 0xa7, 0x07, 0x81, 0xdb, 0x01, 0xf6, 0x02, 0xfc, 0x1c,
|
||||
0x6f, 0x30, 0x27, 0x9f, 0xe3, 0x7f, 0xb7, 0xdc, 0xb1, 0x66, 0x1f, 0x0d, 0xe5, 0x55, 0xef, 0x74,
|
||||
0x79, 0x7c, 0xc6, 0x2d, 0xdf, 0x04, 0x51, 0x2f, 0x59, 0xc7, 0x46, 0xe4, 0xe0, 0xe1, 0x73, 0xf0,
|
||||
0x89, 0xcf, 0x06, 0x40, 0x1d, 0x93, 0xff, 0x58, 0x04, 0xc1, 0x97, 0xb7, 0x7c, 0x79, 0xba, 0x3c,
|
||||
0x99, 0x78, 0x2c, 0x04, 0x7f, 0xc1, 0xf9, 0x19, 0x9f, 0x74, 0xcc, 0xe7, 0xbb, 0xc5, 0xfc, 0xf3,
|
||||
0xc9, 0xa4, 0x3b, 0x67, 0xef, 0xbb, 0x5f, 0xc7, 0x34, 0x7c, 0x55, 0xff, 0x1f, 0xfe, 0x06, 0x00,
|
||||
0x00, 0xff, 0xff, 0xaf, 0x93, 0x48, 0xcf, 0x2a, 0x04, 0x00, 0x00,
|
||||
// 678 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xff, 0x4e, 0xd4, 0x40,
|
||||
0x10, 0xc7, 0xbd, 0xdf, 0xd7, 0xe9, 0xdd, 0x71, 0x6c, 0xa2, 0x29, 0x05, 0xe5, 0xc2, 0x5f, 0xc4,
|
||||
0xc4, 0x33, 0x31, 0x26, 0x46, 0x43, 0xa2, 0x9e, 0x02, 0x22, 0x0a, 0x66, 0xc1, 0x98, 0xf8, 0x4f,
|
||||
0xb3, 0xbd, 0x2e, 0xb0, 0xd8, 0x76, 0x2f, 0xdd, 0x2d, 0xc2, 0x6b, 0xf8, 0x2c, 0xc6, 0xd7, 0xf1,
|
||||
0x55, 0xcc, 0xce, 0xb6, 0x47, 0x0f, 0x88, 0xff, 0x75, 0x66, 0x3e, 0xf3, 0x9d, 0xd9, 0x99, 0xed,
|
||||
0xc2, 0xe0, 0x24, 0x93, 0xa9, 0xe6, 0x69, 0x34, 0x9e, 0x65, 0x52, 0x4b, 0xd2, 0x4a, 0x45, 0x7a,
|
||||
0xce, 0x36, 0x7e, 0x03, 0xb4, 0x8f, 0x34, 0xd3, 0xb9, 0x22, 0x2f, 0xc1, 0xd5, 0x52, 0xb3, 0x38,
|
||||
0xe0, 0xd1, 0x29, 0x57, 0x5e, 0x6d, 0x54, 0xdb, 0x74, 0x9f, 0x79, 0x63, 0xe4, 0xc6, 0x96, 0x19,
|
||||
0x1f, 0x1b, 0x60, 0xdb, 0xc4, 0x29, 0xe8, 0xf9, 0x37, 0x79, 0x0d, 0xfd, 0x30, 0x17, 0x71, 0x14,
|
||||
0x28, 0xcd, 0x32, 0xcd, 0x23, 0xaf, 0x8e, 0xc9, 0xfe, 0x62, 0xf2, 0xc4, 0x20, 0x47, 0x96, 0xa0,
|
||||
0xbd, 0xb0, 0x62, 0x91, 0x09, 0x0c, 0xac, 0xc0, 0x89, 0x48, 0x85, 0x3a, 0xe3, 0x91, 0xd7, 0x40,
|
||||
0x85, 0xd5, 0x3b, 0x14, 0x76, 0x0a, 0x84, 0xda, 0x9a, 0xa5, 0x49, 0xb6, 0xa0, 0x67, 0x3a, 0x9f,
|
||||
0xf7, 0xd0, 0x44, 0x85, 0x95, 0x45, 0x05, 0xd3, 0x6f, 0xd9, 0x82, 0xcb, 0xaf, 0x0d, 0x73, 0x04,
|
||||
0xcc, 0x9e, 0x37, 0xd0, 0xba, 0xeb, 0x08, 0x26, 0x7d, 0x5e, 0x1f, 0xcb, 0xcd, 0xcb, 0x3f, 0x85,
|
||||
0x4e, 0xc2, 0x95, 0x62, 0xa7, 0xdc, 0x6b, 0x63, 0xea, 0xfd, 0xc5, 0xd4, 0xcf, 0x36, 0x48, 0x4b,
|
||||
0xca, 0x7f, 0x02, 0x70, 0x3d, 0x4e, 0xb2, 0x7e, 0x7b, 0xfa, 0xfd, 0xea, 0x8c, 0xfd, 0x8f, 0xd0,
|
||||
0xab, 0x0e, 0x90, 0x8c, 0xc0, 0x9d, 0xb1, 0x8c, 0xc5, 0x31, 0x8f, 0x85, 0x4a, 0x8a, 0x84, 0xaa,
|
||||
0x8b, 0x78, 0xd0, 0xb9, 0xe0, 0x59, 0x28, 0x15, 0xc7, 0x7d, 0x74, 0x69, 0x69, 0xfa, 0x4b, 0xd0,
|
||||
0x5f, 0x18, 0xa5, 0xff, 0xa7, 0x06, 0x6e, 0x65, 0x34, 0x64, 0x00, 0x75, 0x11, 0x15, 0x9a, 0x75,
|
||||
0x11, 0x91, 0x87, 0x00, 0x38, 0xd6, 0x40, 0x8b, 0xc4, 0xaa, 0xf5, 0xa9, 0x83, 0x9e, 0x63, 0x91,
|
||||
0x70, 0xf2, 0x00, 0xda, 0x22, 0x9d, 0xe5, 0x5a, 0x79, 0x8d, 0x51, 0x63, 0xd3, 0xa1, 0x85, 0x65,
|
||||
0x3a, 0x90, 0xb9, 0xc6, 0x40, 0x13, 0x03, 0xa5, 0x49, 0x08, 0x34, 0x23, 0xae, 0xa6, 0x38, 0x65,
|
||||
0x87, 0xe2, 0xb7, 0xa1, 0xa7, 0x32, 0x49, 0x58, 0x1a, 0xe1, 0x04, 0x1d, 0x5a, 0x9a, 0x36, 0x92,
|
||||
0x2a, 0x19, 0x73, 0xaf, 0x63, 0x4f, 0x52, 0x98, 0xfe, 0xdf, 0x06, 0xf4, 0xaa, 0x4b, 0xb9, 0xd5,
|
||||
0xf9, 0x0a, 0x74, 0x79, 0x1a, 0x55, 0xfb, 0xee, 0xf0, 0x34, 0x2a, 0xbb, 0x56, 0xb8, 0x1b, 0xbc,
|
||||
0x6c, 0xcb, 0xb4, 0xb0, 0x8c, 0xdf, 0xb6, 0x89, 0x57, 0xc8, 0xa1, 0x85, 0x45, 0x56, 0xc1, 0xc9,
|
||||
0x15, 0xcf, 0xac, 0x56, 0x0b, 0xb5, 0xba, 0xc6, 0x81, 0x62, 0xeb, 0xe0, 0xaa, 0x2b, 0xa5, 0x79,
|
||||
0x62, 0xc3, 0x6d, 0xbb, 0x3f, 0xeb, 0x42, 0x60, 0x0d, 0x20, 0x61, 0x97, 0x41, 0xa6, 0x54, 0xf0,
|
||||
0x23, 0xc4, 0x63, 0x34, 0x69, 0x37, 0x61, 0x97, 0x54, 0xa9, 0xfd, 0x90, 0x3c, 0x86, 0xe5, 0x44,
|
||||
0xa4, 0x32, 0x0b, 0x66, 0xcc, 0x5c, 0x42, 0x96, 0xc7, 0x5a, 0x79, 0x5d, 0x84, 0x96, 0x30, 0xf0,
|
||||
0x85, 0x9d, 0xf2, 0x1d, 0x74, 0x23, 0xcb, 0xce, 0x6f, 0xb0, 0x4e, 0xc1, 0x9a, 0x40, 0x85, 0x7d,
|
||||
0x04, 0xae, 0x90, 0x01, 0xae, 0xc3, 0x94, 0x05, 0xa4, 0x1c, 0x21, 0xf7, 0x8c, 0x67, 0x3f, 0x24,
|
||||
0x23, 0xe8, 0x09, 0x19, 0xd8, 0x03, 0x1a, 0xc0, 0x45, 0x00, 0x84, 0x3c, 0x44, 0xd7, 0x7e, 0x48,
|
||||
0xb6, 0xc0, 0xbf, 0x90, 0x71, 0x9e, 0x6a, 0x96, 0x5d, 0x05, 0x53, 0xf3, 0x86, 0x5c, 0xea, 0x40,
|
||||
0xfd, 0x14, 0x7a, 0x7a, 0xc6, 0x95, 0xd7, 0x43, 0xde, 0x9b, 0x13, 0xef, 0x2c, 0x70, 0x54, 0xc4,
|
||||
0xc9, 0x1b, 0x58, 0x13, 0xe9, 0x7f, 0xf2, 0xfb, 0x98, 0xef, 0x57, 0x98, 0x1b, 0x0a, 0xfe, 0xaf,
|
||||
0x1a, 0x74, 0x8a, 0x7f, 0x87, 0xbc, 0x80, 0x56, 0xcc, 0x2f, 0x78, 0x8c, 0xfb, 0x1d, 0xdc, 0x7c,
|
||||
0x1d, 0x0a, 0x6a, 0xfc, 0xc9, 0x20, 0xaf, 0x9a, 0x7b, 0x07, 0x3b, 0x87, 0xd4, 0xf2, 0xe6, 0x02,
|
||||
0x95, 0x3f, 0x67, 0xdd, 0x5e, 0xad, 0xc2, 0xdc, 0x78, 0x0e, 0x2d, 0xe4, 0x49, 0x17, 0x30, 0x63,
|
||||
0x78, 0x8f, 0xb8, 0xd0, 0xf9, 0xf6, 0x96, 0x1e, 0xec, 0x1d, 0xec, 0x0e, 0x6b, 0xc4, 0x81, 0xd6,
|
||||
0x36, 0xa5, 0x87, 0x74, 0x58, 0x37, 0x9f, 0xef, 0xb7, 0x27, 0x5f, 0x77, 0x87, 0x8d, 0x09, 0xf9,
|
||||
0xd0, 0xf8, 0x3e, 0xc0, 0xe2, 0x41, 0xf9, 0xae, 0xfe, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x2f, 0x7a,
|
||||
0x33, 0x13, 0x62, 0x05, 0x00, 0x00,
|
||||
}
|
||||
|
|
|
@ -65,6 +65,20 @@ message Status {
|
|||
optional uint32 user_time = 5;
|
||||
// Number of milliseconds spent executing in kernel mode
|
||||
optional uint32 system_time = 6;
|
||||
// Max resident set size in kB
|
||||
optional uint64 max_rss_kb = 7;
|
||||
// Minor page faults
|
||||
optional uint64 minor_page_faults = 8;
|
||||
// Major page faults
|
||||
optional uint64 major_page_faults = 9;
|
||||
// IO input in kB
|
||||
optional uint64 io_input_kb = 10;
|
||||
// IO output in kB
|
||||
optional uint64 io_output_kb = 11;
|
||||
// Voluntary context switches
|
||||
optional uint64 voluntary_context_switches = 12;
|
||||
// Involuntary context switches
|
||||
optional uint64 involuntary_context_switches = 13;
|
||||
}
|
||||
|
||||
message Message {
|
||||
|
|
|
@ -54,6 +54,37 @@ type ActionResult struct {
|
|||
// Error is nil if the Action succeeded, or set to an error if it
|
||||
// failed.
|
||||
Error error
|
||||
|
||||
Stats ActionResultStats
|
||||
}
|
||||
|
||||
type ActionResultStats struct {
|
||||
// Number of milliseconds spent executing in user mode
|
||||
UserTime uint32
|
||||
|
||||
// Number of milliseconds spent executing in kernel mode
|
||||
SystemTime uint32
|
||||
|
||||
// Max resident set size in kB
|
||||
MaxRssKB uint64
|
||||
|
||||
// Minor page faults
|
||||
MinorPageFaults uint64
|
||||
|
||||
// Major page faults
|
||||
MajorPageFaults uint64
|
||||
|
||||
// IO input in kB
|
||||
IOInputKB uint64
|
||||
|
||||
// IO output in kB
|
||||
IOOutputKB uint64
|
||||
|
||||
// Voluntary context switches
|
||||
VoluntaryContextSwitches uint64
|
||||
|
||||
// Involuntary context switches
|
||||
InvoluntaryContextSwitches uint64
|
||||
}
|
||||
|
||||
// Counts describes the number of actions in each state
|
||||
|
|
|
@ -80,9 +80,32 @@ func (s *statusOutput) FinishAction(result status.ActionResult, counts status.Co
|
|||
Dur: uint64(time.Since(start.start).Nanoseconds()) / 1000,
|
||||
Pid: 1,
|
||||
Tid: uint64(start.cpu),
|
||||
Arg: &statsArg{
|
||||
UserTime: result.Stats.UserTime,
|
||||
SystemTime: result.Stats.SystemTime,
|
||||
MaxRssKB: result.Stats.MaxRssKB,
|
||||
MinorPageFaults: result.Stats.MinorPageFaults,
|
||||
MajorPageFaults: result.Stats.MajorPageFaults,
|
||||
IOInputKB: result.Stats.IOInputKB,
|
||||
IOOutputKB: result.Stats.IOOutputKB,
|
||||
VoluntaryContextSwitches: result.Stats.VoluntaryContextSwitches,
|
||||
InvoluntaryContextSwitches: result.Stats.InvoluntaryContextSwitches,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
type statsArg struct {
|
||||
UserTime uint32 `json:"user_time"`
|
||||
SystemTime uint32 `json:"system_time_ms"`
|
||||
MaxRssKB uint64 `json:"max_rss_kb"`
|
||||
MinorPageFaults uint64 `json:"minor_page_faults"`
|
||||
MajorPageFaults uint64 `json:"major_page_faults"`
|
||||
IOInputKB uint64 `json:"io_input_kb"`
|
||||
IOOutputKB uint64 `json:"io_output_kb"`
|
||||
VoluntaryContextSwitches uint64 `json:"voluntary_context_switches"`
|
||||
InvoluntaryContextSwitches uint64 `json:"involuntary_context_switches"`
|
||||
}
|
||||
|
||||
func (s *statusOutput) Flush() {}
|
||||
func (s *statusOutput) Message(level status.MsgLevel, message string) {}
|
||||
|
||||
|
|
Loading…
Reference in New Issue