Apache Mesos - Cgroups ‘blkio’ Subsystem Support in Mesos Containerizer

Cgroups ‘blkio’ Subsystem Support in Mesos Containerizer

The cgroups/blkio isolator provides block I/O performance isolation for containers through the blkio Linux cgroup subsystem. To enable the isolator, append cgroups/blkio to the --isolation flag before starting the agent.

The blkio subsystem enables I/O statistics collection and allows operators to apply I/O control policies for block devices. The isolator places the processes of a Mesos container into a separate blkio cgroup hierarchy. At the moment, it only supports reporting containers’ I/O statistics on block devices to the agent. A sample statistics would be something like:

[{
    "executor_id": "executor",
    "executor_name": "name",
    "framework_id": "framework",
    "source": "source",
    "statistics": {
        "blkio": {
            "cfq": [
                {
                    "io_merged": [
                        {
                            "op": "TOTAL",
                            "value": 0
                        }
                    ],
                    "io_queued": [
                        {
                            "op": "TOTAL",
                            "value": 0
                        }
                    ],
                    "io_service_bytes": [
                        {
                            "op": "TOTAL",
                            "value": 0
                        }
                    ],
                    "io_service_time": [
                        {
                            "op": "TOTAL",
                            "value": 0
                        }
                    ],
                    "io_serviced": [
                        {
                            "op": "TOTAL",
                            "value": 0
                        }
                    ],
                    "io_wait_time": [
                        {
                            "op": "TOTAL",
                            "value": 0
                        }
                    ]
                }
            ],
            "cfq_recursive": [
                {
                    "io_merged": [
                        {
                            "op": "TOTAL",
                            "value": 0
                        }
                    ],
                    "io_queued": [
                        {
                            "op": "TOTAL",
                            "value": 0
                        }
                    ],
                    "io_service_bytes": [
                        {
                            "op": "TOTAL",
                            "value": 0
                        }
                    ],
                    "io_service_time": [
                        {
                            "op": "TOTAL",
                            "value": 0
                        }
                    ],
                    "io_serviced": [
                        {
                            "op": "TOTAL",
                            "value": 0
                        }
                    ],
                    "io_wait_time": [
                        {
                            "op": "TOTAL",
                            "value": 0
                        }
                    ]
                }
            ],
            "throttling": [
                {
                    "device": {
                        "major": 8,
                        "minor": 0
                    },
                    "io_service_bytes": [
                        {
                            "op": "READ",
                            "value": 0
                        },
                        {
                            "op": "WRITE",
                            "value": 4096
                        },
                        {
                            "op": "SYNC",
                            "value": 0
                        },
                        {
                            "op": "ASYNC",
                            "value": 4096
                        },
                        {
                            "op": "TOTAL",
                            "value": 4096
                        }
                    ],
                    "io_serviced": [
                        {
                            "op": "READ",
                            "value": 0
                        },
                        {
                            "op": "WRITE",
                            "value": 1
                        },
                        {
                            "op": "SYNC",
                            "value": 0
                        },
                        {
                            "op": "ASYNC",
                            "value": 1
                        },
                        {
                            "op": "TOTAL",
                            "value": 1
                        }
                    ]
                },
                {
                    "io_service_bytes": [
                        {
                            "op": "TOTAL",
                            "value": 4096
                        }
                    ],
                    "io_serviced": [
                        {
                            "op": "TOTAL",
                            "value": 1
                        }
                    ]
                }
            ]
        },
        "cpus_limit": 1.1,
        "mem_limit_bytes": 167772160,
        "timestamp": 1500335339.30187
    }
}]

For more details about the blkio subsystem, please refer to the Block I/O Controller Linux kernel documentation.