Merge pull request #243 from ashahab-altiscale/242-additional-blkio-stats
ADDITIONAL CGROUPS BLKIO STATS
This commit is contained in:
commit
c9d5aaa5d5
|
@ -146,6 +146,26 @@ func getCFQStats(path string, stats *cgroups.Stats) error {
|
||||||
}
|
}
|
||||||
stats.BlkioStats.IoQueuedRecursive = blkioStats
|
stats.BlkioStats.IoQueuedRecursive = blkioStats
|
||||||
|
|
||||||
|
if blkioStats, err = getBlkioStat(filepath.Join(path, "blkio.io_service_time_recursive")); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
stats.BlkioStats.IoServiceTimeRecursive = blkioStats
|
||||||
|
|
||||||
|
if blkioStats, err = getBlkioStat(filepath.Join(path, "blkio.io_wait_time_recursive")); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
stats.BlkioStats.IoWaitTimeRecursive = blkioStats
|
||||||
|
|
||||||
|
if blkioStats, err = getBlkioStat(filepath.Join(path, "blkio.io_merged_recursive")); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
stats.BlkioStats.IoMergedRecursive = blkioStats
|
||||||
|
|
||||||
|
if blkioStats, err = getBlkioStat(filepath.Join(path, "blkio.time_recursive")); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
stats.BlkioStats.IoTimeRecursive = blkioStats
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,25 @@ Total 50`
|
||||||
8:0 Async 3
|
8:0 Async 3
|
||||||
8:0 Total 5
|
8:0 Total 5
|
||||||
Total 5`
|
Total 5`
|
||||||
throttleServiceBytes = `8:0 Read 11030528
|
serviceTimeRecursiveContents = `8:0 Read 173959
|
||||||
|
8:0 Write 0
|
||||||
|
8:0 Sync 0
|
||||||
|
8:0 Async 173959
|
||||||
|
8:0 Total 17395
|
||||||
|
Total 17395`
|
||||||
|
waitTimeRecursiveContents = `8:0 Read 15571
|
||||||
|
8:0 Write 0
|
||||||
|
8:0 Sync 0
|
||||||
|
8:0 Async 15571
|
||||||
|
8:0 Total 15571`
|
||||||
|
mergedRecursiveContents = `8:0 Read 5
|
||||||
|
8:0 Write 10
|
||||||
|
8:0 Sync 0
|
||||||
|
8:0 Async 0
|
||||||
|
8:0 Total 15
|
||||||
|
Total 15`
|
||||||
|
timeRecursiveContents = `8:0 8`
|
||||||
|
throttleServiceBytes = `8:0 Read 11030528
|
||||||
8:0 Write 23
|
8:0 Write 23
|
||||||
8:0 Sync 42
|
8:0 Sync 42
|
||||||
8:0 Async 11030528
|
8:0 Async 11030528
|
||||||
|
@ -61,6 +79,10 @@ func TestBlkioStats(t *testing.T) {
|
||||||
"blkio.io_service_bytes_recursive": serviceBytesRecursiveContents,
|
"blkio.io_service_bytes_recursive": serviceBytesRecursiveContents,
|
||||||
"blkio.io_serviced_recursive": servicedRecursiveContents,
|
"blkio.io_serviced_recursive": servicedRecursiveContents,
|
||||||
"blkio.io_queued_recursive": queuedRecursiveContents,
|
"blkio.io_queued_recursive": queuedRecursiveContents,
|
||||||
|
"blkio.io_service_time_recursive": serviceTimeRecursiveContents,
|
||||||
|
"blkio.io_wait_time_recursive": waitTimeRecursiveContents,
|
||||||
|
"blkio.io_merged_recursive": mergedRecursiveContents,
|
||||||
|
"blkio.time_recursive": timeRecursiveContents,
|
||||||
"blkio.sectors_recursive": sectorsRecursiveContents,
|
"blkio.sectors_recursive": sectorsRecursiveContents,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -93,6 +115,26 @@ func TestBlkioStats(t *testing.T) {
|
||||||
appendBlkioStatEntry(&expectedStats.IoQueuedRecursive, 8, 0, 3, "Async")
|
appendBlkioStatEntry(&expectedStats.IoQueuedRecursive, 8, 0, 3, "Async")
|
||||||
appendBlkioStatEntry(&expectedStats.IoQueuedRecursive, 8, 0, 5, "Total")
|
appendBlkioStatEntry(&expectedStats.IoQueuedRecursive, 8, 0, 5, "Total")
|
||||||
|
|
||||||
|
appendBlkioStatEntry(&expectedStats.IoServiceTimeRecursive, 8, 0, 173959, "Read")
|
||||||
|
appendBlkioStatEntry(&expectedStats.IoServiceTimeRecursive, 8, 0, 0, "Write")
|
||||||
|
appendBlkioStatEntry(&expectedStats.IoServiceTimeRecursive, 8, 0, 0, "Sync")
|
||||||
|
appendBlkioStatEntry(&expectedStats.IoServiceTimeRecursive, 8, 0, 173959, "Async")
|
||||||
|
appendBlkioStatEntry(&expectedStats.IoServiceTimeRecursive, 8, 0, 17395, "Total")
|
||||||
|
|
||||||
|
appendBlkioStatEntry(&expectedStats.IoWaitTimeRecursive, 8, 0, 15571, "Read")
|
||||||
|
appendBlkioStatEntry(&expectedStats.IoWaitTimeRecursive, 8, 0, 0, "Write")
|
||||||
|
appendBlkioStatEntry(&expectedStats.IoWaitTimeRecursive, 8, 0, 0, "Sync")
|
||||||
|
appendBlkioStatEntry(&expectedStats.IoWaitTimeRecursive, 8, 0, 15571, "Async")
|
||||||
|
appendBlkioStatEntry(&expectedStats.IoWaitTimeRecursive, 8, 0, 15571, "Total")
|
||||||
|
|
||||||
|
appendBlkioStatEntry(&expectedStats.IoMergedRecursive, 8, 0, 5, "Read")
|
||||||
|
appendBlkioStatEntry(&expectedStats.IoMergedRecursive, 8, 0, 10, "Write")
|
||||||
|
appendBlkioStatEntry(&expectedStats.IoMergedRecursive, 8, 0, 0, "Sync")
|
||||||
|
appendBlkioStatEntry(&expectedStats.IoMergedRecursive, 8, 0, 0, "Async")
|
||||||
|
appendBlkioStatEntry(&expectedStats.IoMergedRecursive, 8, 0, 15, "Total")
|
||||||
|
|
||||||
|
appendBlkioStatEntry(&expectedStats.IoTimeRecursive, 8, 0, 8, "")
|
||||||
|
|
||||||
expectBlkioStatsEquals(t, expectedStats, actualStats.BlkioStats)
|
expectBlkioStatsEquals(t, expectedStats, actualStats.BlkioStats)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,6 +145,10 @@ func TestBlkioStatsNoSectorsFile(t *testing.T) {
|
||||||
"blkio.io_service_bytes_recursive": serviceBytesRecursiveContents,
|
"blkio.io_service_bytes_recursive": serviceBytesRecursiveContents,
|
||||||
"blkio.io_serviced_recursive": servicedRecursiveContents,
|
"blkio.io_serviced_recursive": servicedRecursiveContents,
|
||||||
"blkio.io_queued_recursive": queuedRecursiveContents,
|
"blkio.io_queued_recursive": queuedRecursiveContents,
|
||||||
|
"blkio.io_service_time_recursive": serviceTimeRecursiveContents,
|
||||||
|
"blkio.io_wait_time_recursive": waitTimeRecursiveContents,
|
||||||
|
"blkio.io_merged_recursive": mergedRecursiveContents,
|
||||||
|
"blkio.time_recursive": timeRecursiveContents,
|
||||||
})
|
})
|
||||||
|
|
||||||
blkio := &BlkioGroup{}
|
blkio := &BlkioGroup{}
|
||||||
|
@ -117,9 +163,13 @@ func TestBlkioStatsNoServiceBytesFile(t *testing.T) {
|
||||||
helper := NewCgroupTestUtil("blkio", t)
|
helper := NewCgroupTestUtil("blkio", t)
|
||||||
defer helper.cleanup()
|
defer helper.cleanup()
|
||||||
helper.writeFileContents(map[string]string{
|
helper.writeFileContents(map[string]string{
|
||||||
"blkio.io_serviced_recursive": servicedRecursiveContents,
|
"blkio.io_serviced_recursive": servicedRecursiveContents,
|
||||||
"blkio.io_queued_recursive": queuedRecursiveContents,
|
"blkio.io_queued_recursive": queuedRecursiveContents,
|
||||||
"blkio.sectors_recursive": sectorsRecursiveContents,
|
"blkio.sectors_recursive": sectorsRecursiveContents,
|
||||||
|
"blkio.io_service_time_recursive": serviceTimeRecursiveContents,
|
||||||
|
"blkio.io_wait_time_recursive": waitTimeRecursiveContents,
|
||||||
|
"blkio.io_merged_recursive": mergedRecursiveContents,
|
||||||
|
"blkio.time_recursive": timeRecursiveContents,
|
||||||
})
|
})
|
||||||
|
|
||||||
blkio := &BlkioGroup{}
|
blkio := &BlkioGroup{}
|
||||||
|
@ -137,6 +187,10 @@ func TestBlkioStatsNoServicedFile(t *testing.T) {
|
||||||
"blkio.io_service_bytes_recursive": serviceBytesRecursiveContents,
|
"blkio.io_service_bytes_recursive": serviceBytesRecursiveContents,
|
||||||
"blkio.io_queued_recursive": queuedRecursiveContents,
|
"blkio.io_queued_recursive": queuedRecursiveContents,
|
||||||
"blkio.sectors_recursive": sectorsRecursiveContents,
|
"blkio.sectors_recursive": sectorsRecursiveContents,
|
||||||
|
"blkio.io_service_time_recursive": serviceTimeRecursiveContents,
|
||||||
|
"blkio.io_wait_time_recursive": waitTimeRecursiveContents,
|
||||||
|
"blkio.io_merged_recursive": mergedRecursiveContents,
|
||||||
|
"blkio.time_recursive": timeRecursiveContents,
|
||||||
})
|
})
|
||||||
|
|
||||||
blkio := &BlkioGroup{}
|
blkio := &BlkioGroup{}
|
||||||
|
@ -154,6 +208,106 @@ func TestBlkioStatsNoQueuedFile(t *testing.T) {
|
||||||
"blkio.io_service_bytes_recursive": serviceBytesRecursiveContents,
|
"blkio.io_service_bytes_recursive": serviceBytesRecursiveContents,
|
||||||
"blkio.io_serviced_recursive": servicedRecursiveContents,
|
"blkio.io_serviced_recursive": servicedRecursiveContents,
|
||||||
"blkio.sectors_recursive": sectorsRecursiveContents,
|
"blkio.sectors_recursive": sectorsRecursiveContents,
|
||||||
|
"blkio.io_service_time_recursive": serviceTimeRecursiveContents,
|
||||||
|
"blkio.io_wait_time_recursive": waitTimeRecursiveContents,
|
||||||
|
"blkio.io_merged_recursive": mergedRecursiveContents,
|
||||||
|
"blkio.time_recursive": timeRecursiveContents,
|
||||||
|
})
|
||||||
|
|
||||||
|
blkio := &BlkioGroup{}
|
||||||
|
actualStats := *cgroups.NewStats()
|
||||||
|
err := blkio.GetStats(helper.CgroupPath, &actualStats)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed unexpectedly: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBlkioStatsNoServiceTimeFile(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping test in short mode.")
|
||||||
|
}
|
||||||
|
helper := NewCgroupTestUtil("blkio", t)
|
||||||
|
defer helper.cleanup()
|
||||||
|
helper.writeFileContents(map[string]string{
|
||||||
|
"blkio.io_service_bytes_recursive": serviceBytesRecursiveContents,
|
||||||
|
"blkio.io_serviced_recursive": servicedRecursiveContents,
|
||||||
|
"blkio.io_queued_recursive": queuedRecursiveContents,
|
||||||
|
"blkio.io_wait_time_recursive": waitTimeRecursiveContents,
|
||||||
|
"blkio.io_merged_recursive": mergedRecursiveContents,
|
||||||
|
"blkio.time_recursive": timeRecursiveContents,
|
||||||
|
"blkio.sectors_recursive": sectorsRecursiveContents,
|
||||||
|
})
|
||||||
|
|
||||||
|
blkio := &BlkioGroup{}
|
||||||
|
actualStats := *cgroups.NewStats()
|
||||||
|
err := blkio.GetStats(helper.CgroupPath, &actualStats)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed unexpectedly: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBlkioStatsNoWaitTimeFile(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping test in short mode.")
|
||||||
|
}
|
||||||
|
helper := NewCgroupTestUtil("blkio", t)
|
||||||
|
defer helper.cleanup()
|
||||||
|
helper.writeFileContents(map[string]string{
|
||||||
|
"blkio.io_service_bytes_recursive": serviceBytesRecursiveContents,
|
||||||
|
"blkio.io_serviced_recursive": servicedRecursiveContents,
|
||||||
|
"blkio.io_queued_recursive": queuedRecursiveContents,
|
||||||
|
"blkio.io_service_time_recursive": serviceTimeRecursiveContents,
|
||||||
|
"blkio.io_merged_recursive": mergedRecursiveContents,
|
||||||
|
"blkio.time_recursive": timeRecursiveContents,
|
||||||
|
"blkio.sectors_recursive": sectorsRecursiveContents,
|
||||||
|
})
|
||||||
|
|
||||||
|
blkio := &BlkioGroup{}
|
||||||
|
actualStats := *cgroups.NewStats()
|
||||||
|
err := blkio.GetStats(helper.CgroupPath, &actualStats)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed unexpectedly: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBlkioStatsNoMergedFile(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping test in short mode.")
|
||||||
|
}
|
||||||
|
helper := NewCgroupTestUtil("blkio", t)
|
||||||
|
defer helper.cleanup()
|
||||||
|
helper.writeFileContents(map[string]string{
|
||||||
|
"blkio.io_service_bytes_recursive": serviceBytesRecursiveContents,
|
||||||
|
"blkio.io_serviced_recursive": servicedRecursiveContents,
|
||||||
|
"blkio.io_queued_recursive": queuedRecursiveContents,
|
||||||
|
"blkio.io_service_time_recursive": serviceTimeRecursiveContents,
|
||||||
|
"blkio.io_wait_time_recursive": waitTimeRecursiveContents,
|
||||||
|
"blkio.time_recursive": timeRecursiveContents,
|
||||||
|
"blkio.sectors_recursive": sectorsRecursiveContents,
|
||||||
|
})
|
||||||
|
|
||||||
|
blkio := &BlkioGroup{}
|
||||||
|
actualStats := *cgroups.NewStats()
|
||||||
|
err := blkio.GetStats(helper.CgroupPath, &actualStats)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed unexpectedly: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBlkioStatsNoTimeFile(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping test in short mode.")
|
||||||
|
}
|
||||||
|
helper := NewCgroupTestUtil("blkio", t)
|
||||||
|
defer helper.cleanup()
|
||||||
|
helper.writeFileContents(map[string]string{
|
||||||
|
"blkio.io_service_bytes_recursive": serviceBytesRecursiveContents,
|
||||||
|
"blkio.io_serviced_recursive": servicedRecursiveContents,
|
||||||
|
"blkio.io_queued_recursive": queuedRecursiveContents,
|
||||||
|
"blkio.io_service_time_recursive": serviceTimeRecursiveContents,
|
||||||
|
"blkio.io_wait_time_recursive": waitTimeRecursiveContents,
|
||||||
|
"blkio.io_merged_recursive": mergedRecursiveContents,
|
||||||
|
"blkio.sectors_recursive": sectorsRecursiveContents,
|
||||||
})
|
})
|
||||||
|
|
||||||
blkio := &BlkioGroup{}
|
blkio := &BlkioGroup{}
|
||||||
|
@ -172,6 +326,10 @@ func TestBlkioStatsUnexpectedNumberOfFields(t *testing.T) {
|
||||||
"blkio.io_serviced_recursive": servicedRecursiveContents,
|
"blkio.io_serviced_recursive": servicedRecursiveContents,
|
||||||
"blkio.io_queued_recursive": queuedRecursiveContents,
|
"blkio.io_queued_recursive": queuedRecursiveContents,
|
||||||
"blkio.sectors_recursive": sectorsRecursiveContents,
|
"blkio.sectors_recursive": sectorsRecursiveContents,
|
||||||
|
"blkio.io_service_time_recursive": serviceTimeRecursiveContents,
|
||||||
|
"blkio.io_wait_time_recursive": waitTimeRecursiveContents,
|
||||||
|
"blkio.io_merged_recursive": mergedRecursiveContents,
|
||||||
|
"blkio.time_recursive": timeRecursiveContents,
|
||||||
})
|
})
|
||||||
|
|
||||||
blkio := &BlkioGroup{}
|
blkio := &BlkioGroup{}
|
||||||
|
@ -190,6 +348,10 @@ func TestBlkioStatsUnexpectedFieldType(t *testing.T) {
|
||||||
"blkio.io_serviced_recursive": servicedRecursiveContents,
|
"blkio.io_serviced_recursive": servicedRecursiveContents,
|
||||||
"blkio.io_queued_recursive": queuedRecursiveContents,
|
"blkio.io_queued_recursive": queuedRecursiveContents,
|
||||||
"blkio.sectors_recursive": sectorsRecursiveContents,
|
"blkio.sectors_recursive": sectorsRecursiveContents,
|
||||||
|
"blkio.io_service_time_recursive": serviceTimeRecursiveContents,
|
||||||
|
"blkio.io_wait_time_recursive": waitTimeRecursiveContents,
|
||||||
|
"blkio.io_merged_recursive": mergedRecursiveContents,
|
||||||
|
"blkio.time_recursive": timeRecursiveContents,
|
||||||
})
|
})
|
||||||
|
|
||||||
blkio := &BlkioGroup{}
|
blkio := &BlkioGroup{}
|
||||||
|
@ -208,6 +370,10 @@ func TestNonCFQBlkioStats(t *testing.T) {
|
||||||
"blkio.io_serviced_recursive": "",
|
"blkio.io_serviced_recursive": "",
|
||||||
"blkio.io_queued_recursive": "",
|
"blkio.io_queued_recursive": "",
|
||||||
"blkio.sectors_recursive": "",
|
"blkio.sectors_recursive": "",
|
||||||
|
"blkio.io_service_time_recursive": "",
|
||||||
|
"blkio.io_wait_time_recursive": "",
|
||||||
|
"blkio.io_merged_recursive": "",
|
||||||
|
"blkio.time_recursive": "",
|
||||||
"blkio.throttle.io_service_bytes": throttleServiceBytes,
|
"blkio.throttle.io_service_bytes": throttleServiceBytes,
|
||||||
"blkio.throttle.io_serviced": throttleServiced,
|
"blkio.throttle.io_serviced": throttleServiced,
|
||||||
})
|
})
|
||||||
|
|
|
@ -41,6 +41,26 @@ func expectBlkioStatsEquals(t *testing.T, expected, actual cgroups.BlkioStats) {
|
||||||
log.Printf("blkio SectorsRecursive do not match - %s\n", err)
|
log.Printf("blkio SectorsRecursive do not match - %s\n", err)
|
||||||
t.Fail()
|
t.Fail()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := blkioStatEntryEquals(expected.IoServiceTimeRecursive, actual.IoServiceTimeRecursive); err != nil {
|
||||||
|
log.Printf("blkio IoServiceTimeRecursive do not match - %s\n", err)
|
||||||
|
t.Fail()
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := blkioStatEntryEquals(expected.IoWaitTimeRecursive, actual.IoWaitTimeRecursive); err != nil {
|
||||||
|
log.Printf("blkio IoWaitTimeRecursive do not match - %s\n", err)
|
||||||
|
t.Fail()
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := blkioStatEntryEquals(expected.IoMergedRecursive, actual.IoMergedRecursive); err != nil {
|
||||||
|
log.Printf("blkio IoMergedRecursive do not match - %s vs %s\n", expected.IoMergedRecursive, actual.IoMergedRecursive)
|
||||||
|
t.Fail()
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := blkioStatEntryEquals(expected.IoTimeRecursive, actual.IoTimeRecursive); err != nil {
|
||||||
|
log.Printf("blkio IoTimeRecursive do not match - %s\n", err)
|
||||||
|
t.Fail()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func expectThrottlingDataEquals(t *testing.T, expected, actual cgroups.ThrottlingData) {
|
func expectThrottlingDataEquals(t *testing.T, expected, actual cgroups.ThrottlingData) {
|
||||||
|
|
|
@ -52,8 +52,12 @@ type BlkioStatEntry struct {
|
||||||
type BlkioStats struct {
|
type BlkioStats struct {
|
||||||
// number of bytes tranferred to and from the block device
|
// number of bytes tranferred to and from the block device
|
||||||
IoServiceBytesRecursive []BlkioStatEntry `json:"io_service_bytes_recursive,omitempty"`
|
IoServiceBytesRecursive []BlkioStatEntry `json:"io_service_bytes_recursive,omitempty"`
|
||||||
IoServicedRecursive []BlkioStatEntry `json:"io_serviced_recusrive,omitempty"`
|
IoServicedRecursive []BlkioStatEntry `json:"io_serviced_recursive,omitempty"`
|
||||||
IoQueuedRecursive []BlkioStatEntry `json:"io_queue_recursive,omitempty"`
|
IoQueuedRecursive []BlkioStatEntry `json:"io_queue_recursive,omitempty"`
|
||||||
|
IoServiceTimeRecursive []BlkioStatEntry `json:"io_service_time_recursive,omitempty"`
|
||||||
|
IoWaitTimeRecursive []BlkioStatEntry `json:"io_wait_time_recursive,omitempty"`
|
||||||
|
IoMergedRecursive []BlkioStatEntry `json:"io_merged_recursive,omitempty"`
|
||||||
|
IoTimeRecursive []BlkioStatEntry `json:"io_time_recursive,omitempty"`
|
||||||
SectorsRecursive []BlkioStatEntry `json:"sectors_recursive,omitempty"`
|
SectorsRecursive []BlkioStatEntry `json:"sectors_recursive,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue