我在 OSX 10.9.5 上运行 VirtualBox 4.3.18。
我安装了 Ubuntu Server 14.04 64 位并执行了这个基本的磁盘写入测试:
dd if=/dev/zero of=bigfile bs=1024 count=5000000
主机设置(MacBook Pro 2014):
- 16GB 内存
- 500GB 固态硬盘
客户机的设置:
- 2GB 内存
- 60GB VDMK 磁盘(最小安装后仅占用 1-2 GB)
14.04 / 1 CPU 的结果:13.6s / 376 MB /s
14.04 / 2 CPU 的结果:41.5s / 123 MB /s
在 12.04 64 位上,无论是 1 个还是 2 个 CPU,速度都不会从 376 MB/s 左右改变
dd
我注意到与我之前使用的 12.04 相比,很多事情都感觉慢了,于是我想到了这个简单的测试。运行 puppet、数据库迁移等。在我运行带有 2 个 CPU 的 14.04 后,一切都明显变慢了。
该设置是通过官方 14.04 amd64 映像和标准安装程序(只需对所有对话框说“是”)进行的,没有花哨/自定义设置。
您知道可能是什么问题吗?
编辑:我尝试过的事情(没有效果)
- 使用不同的主板芯片组
- 使用 IDE 而不是 SCSI(在安装过程中)
- 使用不同的 IDE 芯片组
编辑 2:vmstat 比较
在写入 5GB 零之前,我启动vmstat
它,然后退出;这些是日志。也许它们可以帮助理解它们的人?
具有 1 个 CPU 的 vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 1939068 16684 45944 0 0 2887 11 207 1421 5 9 85 0 0
1 0 0 1834700 16844 147360 0 0 160 0 136 143 5 21 73 1 0
0 1 0 1494508 16880 477948 0 0 32 196640 1742 215 17 80 0 3 0
1 0 0 1216688 16904 748316 0 0 12 336720 3065 357 13 83 0 4 0
1 1 0 916324 16912 1040380 0 0 8 300164 2490 275 15 85 0 0 0
1 1 0 623784 16924 1325020 0 0 12 290818 2590 304 14 86 0 0 0
1 0 0 331540 16932 1609576 0 0 8 277380 2602 261 15 84 0 1 0
1 0 92 84544 5816 1860588 0 92 8 266408 2373 275 14 85 0 1 0
3 0 416 69840 96 1880244 0 324 8 326136 2865 493 16 84 0 0 0
1 0 724 81064 88 1869532 0 308 12 366776 3180 556 16 84 0 0 0
1 0 1052 69352 92 1881392 0 328 12 336204 3074 541 17 82 0 1 0
1 1 1480 80160 96 1870952 0 428 16 345776 2909 506 16 84 0 0 0
1 0 1936 78492 104 1873396 0 456 12 347420 3146 547 16 81 0 3 0
1 0 2544 67684 96 1884676 0 608 8 320156 2890 481 17 83 0 0 0
3 1 3108 80780 96 1871980 0 564 12 350136 2974 507 16 83 0 1 0
2 0 3548 79064 84 1873748 0 440 12 355388 3107 570 16 84 0 0 0
1 0 3988 72260 96 1881724 0 440 16 319932 2990 505 17 83 0 0 0
0 0 4112 77012 248 1877096 0 124 2712 269248 2306 350 4 43 38 14 0
0 0 3980 75284 256 1878256 608 0 1748 76 63 110 0 2 97 1 0
具有 2 个 CPU 的 vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 4728 72916 772 1879116 1 8 166 17813 252 111 7 13 79 1 0
1 0 4728 1965416 852 37852 0 0 80 0 313 246 6 19 74 1 0
1 0 4728 1838368 852 161568 0 0 0 0 494 21 21 29 50 0 0
1 0 4728 1726976 856 269924 0 0 4 106516 1388 237 19 32 44 6 0
1 0 4728 1604976 860 388704 0 0 4 106500 1357 189 22 36 40 3 0
1 0 4728 1487140 880 503360 0 0 8 229588 2272 213 21 43 27 9 0
1 0 4728 1357332 880 629844 0 0 0 0 506 33 22 29 50 0 0
1 1 4728 1234228 884 749264 0 0 4 137664 1429 103 22 37 39 3 0
1 0 4728 1112300 888 867996 0 0 4 128772 1629 123 21 37 38 4 0
1 0 4728 987976 892 989032 0 0 4 106500 1329 83 22 35 41 3 0
1 0 4728 871432 912 1102492 0 0 12 229424 2270 246 21 43 27 9 0
1 0 4728 743556 912 1226964 0 0 0 0 486 18 22 29 50 0 0
2 0 4728 620096 916 1346932 0 0 4 108188 1338 98 21 36 40 3 0
1 0 4728 498700 920 1465012 0 0 4 158084 1737 145 22 39 35 4 0
1 0 4728 375956 924 1584600 0 0 4 106500 1335 92 22 36 40 3 0
1 0 4728 258288 940 1698692 0 0 8 225324 2223 210 21 43 27 9 0
1 0 4728 132520 940 1821260 0 0 0 0 501 20 22 29 50 0 0
1 0 4996 66768 112 1885580 0 268 220 106788 1511 219 19 34 41 5 0
1 2 5012 71568 116 1880736 0 16 8 134292 1479 314 22 37 38 3 0
1 0 5052 78080 116 1874516 0 40 4 132012 1719 275 21 40 36 4 0
1 0 5088 67908 120 1884508 0 36 4 225356 2301 361 22 44 26 8 0
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 5132 74848 112 1877920 0 44 0 44 589 263 22 29 49 0 0
1 0 5172 72924 112 1879676 0 40 4 106556 1385 249 21 37 40 3 0
1 1 5240 78988 116 1873796 0 68 4 137672 1476 277 22 37 38 3 0
1 0 5308 70256 116 1882532 0 68 4 128712 1699 257 22 39 36 4 0
1 0 5340 77468 136 1875524 0 32 16 225360 2289 366 21 44 27 8 0
2 0 5388 77840 128 1875324 0 48 0 48 580 242 22 30 49 0 0
2 0 5440 69500 120 1883484 0 52 4 106576 1387 248 22 37 39 3 0
2 0 5496 76928 124 1876008 0 56 4 117564 1407 275 22 36 40 3 0
1 0 5552 68904 124 1883932 0 56 4 148796 1754 281 21 40 35 4 0
1 0 5600 70356 136 1882664 0 48 8 225372 2320 381 22 44 26 8 0
1 0 5668 69292 132 1883832 0 68 0 68 572 241 22 30 49 0 0
1 0 5720 74508 132 1878824 0 52 0 106572 1393 258 21 37 39 3 0
1 0 5768 67348 120 1885924 0 48 4 106548 1494 272 22 37 39 3 0
1 1 5836 73112 120 1880196 0 68 4 145992 1566 299 21 38 37 4 0
1 0 5892 68260 132 1885004 0 56 8 239200 2562 400 22 46 24 9 0
1 0 5976 66812 128 1886448 0 84 0 84 588 246 21 30 49 0 0
1 0 6068 74444 132 1878868 0 92 4 106608 1407 316 22 36 39 3 0
1 0 6140 65820 124 1887572 0 72 4 106572 1389 253 22 37 40 3 0
1 1 6220 64992 124 1888248 0 80 4 137556 1506 288 22 37 38 3 0
1 0 6296 69388 140 1884176 0 76 12 247672 2625 421 21 46 23 9 0
1 0 6400 73392 124 1880312 0 104 0 104 599 237 22 30 49 0 0
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 6484 71628 124 1882636 0 84 656 106604 1419 276 22 37 39 3 0
0 1 6556 79784 120 1873452 0 72 8 221772 2087 355 17 37 39 7 0
0 0 6556 78296 120 1876500 0 0 3036 39232 574 195 0 5 93 2 0
编辑 3:iostat 比较
由于问题太多,我创建了一个带有 iostat 比较的粘贴板:
具有 1 个 CPU 的 iostat:http://pastie.org/private/ne8llizdt9pgnzt7gu2vbq
具有 2 个 CPU 的 iostat:http://pastie.org/private/xsgzoq7zrlzarbwqkqdbq
答案1
我发现罪魁祸首是Ubuntu 14.04.1 Server amd64 映像内核是用CONFIG_CONTEXT_TRACKING_FORCE=y
哪个编译的,根据http://cateee.net/lkddb/web-lkddb/CONTEXT_TRACKING_FORCE.html:
仅当您正在开发上下文跟踪的架构后端时才选择 Y。
否则选择 N,此选项会带来开销你不想在生产中。
重新编译没有该标志的内核或升级到没有设置该标志的内核都可以解决这个问题。区别很明显:
多 CPU,现有 14.04.1 内核(3.13.0-32):
vagrant@ubuntu-14:~$ dd if=/dev/zero of=bigfile bs=1024 count=5000000
5000000+0 records in
5000000+0 records out
5120000000 bytes (5.1 GB) copied, 46.6511 s, 110 MB/s
多 CPU,重新编译内核(3.13.0-39;但我测试了这个特定的内核,启用/禁用了两个标志):
vagrant@ubuntu-14:~$ dd if=/dev/zero of=bigfile bs=1024 count=5000000
5000000+0 records in
5000000+0 records out
5120000000 bytes (5.1 GB) copied, 10.4548 s, 490 MB/s
我发现了一些更多信息:
- getitimer 错误地返回 it_value=0
这个错误谈到了标志,它应该禁用
感谢@harrymc 激励我深入挖掘。