共计 9850 个字符,预计需要花费 25 分钟才能阅读完成。
【编者的话】本文主要介绍 Docker 容器 IO 基准的创建与测试。
本周我需要一个快速而且简单的 IO 基准工具,因此决定创建一个 Docker 容器来实现我的目标。Docker 容器它本身是比较简单的,在你闲暇的时候就可以使用。Docker 容器基于 Ubuntu 的最新版本,安装 FIO 包,并从我的网站抓取一个简单的测试文件来生成负载和基准测试结果。
Dockerfile
1 # FIO benchmark on Ubuntu:latest
2
3 FROM ubuntu:latest
4 MAINTAINER Chris Mutchler <chris@virtualelephant.com>
5
6 RUN apt-get update
7 RUN apt-get -y install fio wget
8 RUN wget http://virtualelephant.com/wp-content/uploads/2015/10/threads.txt
9
10 CMD ["/bin/bash"]
一旦 Docker 镜像上传到我的 repo,我就会创建一个简单的 JSON 文件来部置容器到我的 Mesos 集群。
iobench.json
{
"container": {
"type": "DOCKER",
"docker": {
"image": "chrismutchler/iobench"
}
},
"id": "iobench",
"instances": 1,
"cpus": 0.25,
"mem": 256,
"uris": [],
"cmd": "while true; do date; /usr/bin/fio /threads.txt; sleep 10; done"
}
如上所示,Docker 容器将继续无限地运行 FIO 测试,直到这个应用程序在这次马拉松式的测试中被杀死。该应用程序也可以扩展到跨多个 apache Mesos 节点上运行,它们各自独立运行 FIO 测试。运行任何类型的负载或者在您的环境中做基准测试时要小心,它可能有不利影响。
通过命令行在Marathon 启动应用程序是很简单的。
# curl -A POST http://mesos.local.domain:8080/v2/apps -d @iobench.json -H "Content-Type: application/json"
我曾用这个测试在我的环境中创建一个嘈杂的邻居的问题去测试 VMware Storage IO Control (SIOC)的设置,它非常适合这个角色的工作。一旦应用程序已经被启动,它的结果可以下载或者在 Mesos 用户界面查看,通过选择’沙盒’,然后就会有 STDOUT(标准输出)日志文件。为了理解 FIO 对于 IO 基准做了些什么,请阅读 Ben Martin 的博客,FIO 测试文件来是从那里拷贝的。
stdout
--container="mesos-20151009-234723-2583865536-5050-2901-S1.c0052620-2322-4d12-aa49-1e3b24402f50" --docker="docker" --help="false" --initialize_driver_logging="true" --logbufsecs="0" --logging_level="INFO" --mapped_directory="/mnt/mesos/sandbox" --quiet="false" --sandbox_directory="/tmp/mesos/slaves/20151009-234723-2583865536-5050-2901-S1/frameworks/20151009-234723-2583865536-5050-2901-0001/executors/iobench.cb93c618-6eea-11e5-9209-0050569a4da8/runs/c0052620-2322-4d12-aa49-1e3b24402f50" --stop_timeout="0ns"
--container="mesos-20151009-234723-2583865536-5050-2901-S1.c0052620-2322-4d12-aa49-1e3b24402f50" --docker="docker" --help="false" --initialize_driver_logging="true" --logbufsecs="0" --logging_level="INFO" --mapped_directory="/mnt/mesos/sandbox" --quiet="false" --sandbox_directory="/tmp/mesos/slaves/20151009-234723-2583865536-5050-2901-S1/frameworks/20151009-234723-2583865536-5050-2901-0001/executors/iobench.cb93c618-6eea-11e5-9209-0050569a4da8/runs/c0052620-2322-4d12-aa49-1e3b24402f50" --stop_timeout="0ns"
Registered docker executor on dhcp2-157.local.domain
Starting task iobench.cb93c618-6eea-11e5-9209-0050569a4da8
Sat Oct 10 01:04:40 UTC 2015
bgwriter: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=32
queryA: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=mmap, iodepth=1
queryB: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=mmap, iodepth=1
bgupdater: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=16
fio-2.1.3
Starting 4 processes
bgwriter: Laying out IO file(s) (1 file(s) / 256MB)
queryA: Laying out IO file(s) (1 file(s) / 256MB)
queryB: Laying out IO file(s) (1 file(s) / 256MB)
bgupdater: Laying out IO file(s) (1 file(s) / 32MB)
bgwriter: (groupid=0, jobs=1): err= 0: pid=8: Sat Oct 10 01:05:32 2015
write: io=262144KB, bw=11578KB/s, iops=2894, runt= 22641msec
slat (usec): min=16, max=4713.1K, avg=334.93, stdev=20011.69
clat (usec): min=9, max=4750.2K, avg=10711.15, stdev=112034.10
lat (usec): min=75, max=4750.6K, avg=11048.59, stdev=113823.09
clat percentiles (msec):
| 1.00th=[3], 5.00th=[3], 10.00th=[3], 20.00th=[6],
| 30.00th=[6], 40.00th=[7], 50.00th=[7], 60.00th=[7],
| 70.00th=[8], 80.00th=[8], 90.00th=[9], 95.00th=[9],
| 99.00th=[16], 99.50th=[31], 99.90th=[947], 99.95th=[1582],
| 99.99th=[4752]
bw (KB /s): min= 5, max=39208, per=100.00%, avg=15073.13, stdev=7536.85
lat (usec) : 10=0.01%, 100=0.01%, 250=0.01%, 500=0.01%, 750=0.01%
lat (usec) : 1000=0.01%
lat (msec) : 2=0.05%, 4=12.47%, 10=85.23%, 20=1.46%, 50=0.34%
lat (msec) : 250=0.05%, 500=0.19%, 750=0.05%, 1000=0.05%, 2000=0.05%
lat (msec) : >=2000=0.05%
cpu : usr=2.60%, sys=8.83%, ctx=126969, majf=0, minf=26
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=100.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0%
issued : total=r=0/w=65536/d=0, short=r=0/w=0/d=0
queryA: (groupid=0, jobs=1): err= 0: pid=9: Sat Oct 10 01:05:32 2015
read : io=262144KB, bw=12106KB/s, iops=3026, runt= 21654msec
clat (usec): min=26, max=4713.2K, avg=322.55, stdev=20018.65
lat (usec): min=26, max=4713.2K, avg=322.77, stdev=20018.66
clat percentiles (usec):
| 1.00th=[31], 5.00th=[71], 10.00th=[77], 20.00th=[115],
| 30.00th=[126], 40.00th=[155], 50.00th=[159], 60.00th=[165],
| 70.00th=[183], 80.00th=[207], 90.00th=[253], 95.00th=[314],
| 99.00th=[724], 99.50th=[1012], 99.90th=[2576], 99.95th=[4384],
| 99.99th=[272384]
bw (KB /s): min= 7, max=24840, per=67.92%, avg=16686.43, stdev=7338.70
lat (usec) : 50=4.04%, 100=11.27%, 250=74.04%, 500=8.29%, 750=1.42%
lat (usec) : 1000=0.45%
lat (msec) : 2=0.36%, 4=0.09%, 10=0.03%, 20=0.01%, 50=0.01%
lat (msec) : 100=0.01%, 250=0.01%, 500=0.01%, 750=0.01%, 1000=0.01%
lat (msec) : 2000=0.01%, >=2000=0.01%
cpu : usr=2.93%, sys=7.36%, ctx=131487, majf=65536, minf=31
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued : total=r=65536/w=0/d=0, short=r=0/w=0/d=0
queryB: (groupid=0, jobs=1): err= 0: pid=10: Sat Oct 10 01:05:32 2015
read : io=262144KB, bw=11910KB/s, iops=2977, runt= 22010msec
clat (usec): min=27, max=4714.3K, avg=325.85, stdev=20020.01
lat (usec): min=27, max=4714.3K, avg=326.11, stdev=20020.01
clat percentiles (usec):
| 1.00th=[32], 5.00th=[72], 10.00th=[82], 20.00th=[117],
| 30.00th=[139], 40.00th=[155], 50.00th=[159], 60.00th=[169],
| 70.00th=[187], 80.00th=[213], 90.00th=[262], 95.00th=[318],
| 99.00th=[700], 99.50th=[980], 99.90th=[2608], 99.95th=[4768],
| 99.99th=[272384]
bw (KB /s): min= 2, max=23384, per=65.75%, avg=16152.90, stdev=6882.55
lat (usec) : 50=2.90%, 100=9.19%, 250=76.15%, 500=9.50%, 750=1.34%
lat (usec) : 1000=0.43%
lat (msec) : 2=0.32%, 4=0.09%, 10=0.03%, 20=0.01%, 50=0.01%
lat (msec) : 250=0.01%, 500=0.01%, 750=0.01%, 1000=0.01%, 2000=0.01%
lat (msec) : >=2000=0.01%
cpu : usr=3.81%, sys=6.74%, ctx=131493, majf=65536, minf=30
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued : total=r=65536/w=0/d=0, short=r=0/w=0/d=0
bgupdater: (groupid=0, jobs=1): err= 0: pid=11: Sat Oct 10 01:05:32 2015
read : io=16416KB, bw=3611.1KB/s, iops=902, runt= 4545msec
slat (usec): min=81, max=285023, avg=520.41, stdev=5536.65
clat (usec): min=1, max=2841, avg= 5.40, stdev=80.88
lat (usec): min=115, max=285031, avg=528.39, stdev=5537.20
clat percentiles (usec):
| 1.00th=[2], 5.00th=[2], 10.00th=[2], 20.00th=[2],
| 30.00th=[2], 40.00th=[2], 50.00th=[2], 60.00th=[2],
| 70.00th=[2], 80.00th=[3], 90.00th=[3], 95.00th=[3],
| 99.00th=[3], 99.50th=[6], 99.90th=[1448], 99.95th=[2384],
| 99.99th=[2832]
bw (KB /s): min= 2096, max= 4472, per=14.60%, avg=3587.00, stdev=1065.00
write: io=16352KB, bw=3597.9KB/s, iops=899, runt= 4545msec
slat (usec): min=74, max=254089, avg=489.47, stdev=3971.19
clat (usec): min=1, max=2233, avg= 5.13, stdev=66.52
lat (usec): min=77, max=254096, avg=497.09, stdev=3971.57
clat percentiles (usec):
| 1.00th=[2], 5.00th=[2], 10.00th=[2], 20.00th=[2],
| 30.00th=[2], 40.00th=[2], 50.00th=[2], 60.00th=[2],
| 70.00th=[2], 80.00th=[3], 90.00th=[3], 95.00th=[3],
| 99.00th=[3], 99.50th=[5], 99.90th=[1256], 99.95th=[1816],
| 99.99th=[2224]
bw (KB /s): min= 2024, max= 4504, per=28.58%, avg=3514.88, stdev=1085.81
lat (usec) : 2=0.04%, 4=99.26%, 10=0.24%, 50=0.18%, 100=0.04%
lat (usec) : 250=0.06%, 500=0.02%, 750=0.01%, 1000=0.01%
lat (msec) : 2=0.07%, 4=0.06%
cpu : usr=8.30%, sys=4.71%, ctx=16460, majf=0, minf=25
IO depths : 1=99.8%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued : total=r=4104/w=4088/d=0, short=r=0/w=0/d=0
Run status group 0 (all jobs):
READ: io=540704KB, aggrb=24566KB/s, minb=3611KB/s, maxb=12106KB/s, mint=4545msec, maxt=22010msec
WRITE: io=278496KB, aggrb=12300KB/s, minb=3597KB/s, maxb=11578KB/s, mint=4545msec, maxt=22641msec
Disk stats (read/write):
dm-2: ios=135188/67188, merge=0/0, ticks=39356/28285, in_queue=67640, util=97.96%, aggrios=135217/70245, aggrmerge=0/0, aggrticks=1492/4673, aggrin_queue=6169, aggrutil=15.06%
dm-0: ios=135217/70245, merge=0/0, ticks=1492/4673, in_queue=6169, util=15.06%, aggrios=0/0, aggrmerge=0/0, aggrticks=0/0, aggrin_queue=0, aggrutil=0.00%
loop1: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00%
loop0: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00%
如果你想抓取 Docker 镜像,并且用它满足你个人的需求,你可以从 Docker Hub 上拉取下来:
# docker pull chrismutchler/iobench
在我即将要编译的,接下来的小 Docker 容器的其中之一是一个网页流量生成器--过去,我已经用过所有种类的流量测试应用程序,但是在 Docker 容器内部能够运转一个测试,并且通过 Mesos 集成器扩展它将会简化事情,甚至更多!
分享!
原文链接:Docker Container for IO Benchmarking(翻译:黄雅静)
更多 Docker 相关教程见以下内容:
Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm
Ubuntu 14.04 安装 Docker http://www.linuxidc.com/linux/2014-08/105656.htm
Ubuntu 使用 VNC 运行基于 Docker 的桌面系统 http://www.linuxidc.com/Linux/2015-08/121170.htm
阿里云 CentOS 6.5 模板上安装 Docker http://www.linuxidc.com/Linux/2014-11/109107.htm
Ubuntu 15.04 下安装 Docker http://www.linuxidc.com/Linux/2015-07/120444.htm
在 Ubuntu Trusty 14.04 (LTS) (64-bit)安装 Docker http://www.linuxidc.com/Linux/2014-10/108184.htm
在 Ubuntu 15.04 上如何安装 Docker 及基本用法 http://www.linuxidc.com/Linux/2015-09/122885.htm
Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-10/124379.htm