我已经在物理机器上安装了debian 7。 这是机器的configuration:
我安装了postgresql,创build了一个大的数据库(超过1GB)。 我有一个SQL请求需要大量的时间来运行(一个SELECT语句,所以它只能从数据库中读取数据)。 这个请求大约需要5.5秒的时间来运行。 然后,我安装了XEN,创build了一个domU,与另一个debian发行版。 在这个操作系统上,我也安装了postgresql,使用相同的数据库。 相同的SQL请求只需要2.5秒即可运行。
我检查了dom0和domU上的内核。 在这两个系统上uname-a返回“Linux debian 3.2.0-4-amd64#1 SMP Debian 3.2.41-2 + deb7u2 x86_64 GNU / Linux”。 我检查了几乎相同的内核参数。 对于那些相关的,我改变了它们的值,使它们在使用sysctl的两个系统上匹配。 我看到没有变化(请求仍然需要相同的时间)。
在此之后,我检查了文件系统。 我在domU上使用了ext3。 仍然没有改变。
我安装了hdparm,并在两个系统上和两个系统上的所有分区上运行hdparm -Tt,并得到类似的结果。
现在,我被困住了,我不知道有什么不同,而这可能是造成如此巨大差异的原因。
附加信息:
谢谢
编辑 :
正如KrzysztofKsiężyk所说,这可能是由于一些文件caching系统。 我运行dd命令来testing读写速度。
这是domU:
root@test1:~# dd if=/dev/zero of=/root/dd count=5MB bs=1MB ^C2020+0 records in 2020+0 records out 2020000000 bytes (2.0 GB) copied, 18.8289 s, 107 MB/s root@test1:~# dd if=/root/dd of=/dev/null count=5MB bs=1MB 2020+0 records in 2020+0 records out 2020000000 bytes (2.0 GB) copied, 15.0549 s, 134 MB/s
这里是dom0:
root@debian:~# dd if=/dev/zero of=/root/dd count=5MB bs=1MB ^C1693+0 records in 1693+0 records out 1693000000 bytes (1.7 GB) copied, 8.87281 s, 191 MB/s root@debian:~# dd if=/root/dd of=/dev/null count=5MB bs=1MB 1693+0 records in 1693+0 records out 1693000000 bytes (1.7 GB) copied, 0.501509 s, 3.4 GB/s
这个caching系统的原因是什么? 我们如何“修复”呢? 我们可以把它应用到dom0吗?
编辑2 :
我切换了我的虚拟磁盘types。 为此我跟着这篇文章 。
我做了一个dd if=/dev/vg0/test1-disk of=/mnt/test1-disk.img bs=16M然后在/etc/xen/test1.cfg中,我改变了磁盘参数使用file:而不是phy :它应该已经删除了文件caching,但是我仍然得到相同的数字(domU对于Postgres来说要快得多)
这可能是因为文件caching。 即使domU中的裸机系统和系统具有相同的高速cachingconfiguration等,domU中的一些文件操作的执行速度也会快于裸机,因为hypervisor透明地cachingdomU系统的IO请求。 你可以使用dd命令来testing它。
我不知道但这是非常奇怪的行为。 我很好奇为什么ddtestingdom0比domU更快,Postgres恰好相反。
关于Postgres我想和KrzysztofKsiężyk一样。 当文件系统中有高速caching重叠或RAM内存有重叠时,会发生这种情况。 在你的testing中,你是否禁用了linuxcaching?
分配给dom0和domU的内存是多less?