在页面中,作者对延迟问题的成因进行了全方位的剖析,其中一项便是操作占用时间导致的延迟。最近Redis作者又对fork操作在各虚拟系统中的性能进行了测试对比,得出下面结果,结果表明使用虚拟化的主机由于其fork操作的实现机制,fork导致的延迟会更为严重。
Linux beefy VM on VMware 6.0GB RSS forked in 77 milliseconds (12.8 milliseconds per GB).
Linux running on physical machine (Unknown HW) 6.1GB RSS forked in 80 milliseconds (13.1 milliseconds per GB)
Linux running on physical machine (Xeon @ 2.27Ghz) 6.9GB RSS forked into 62 millisecodns (9 milliseconds per GB).
Linux VM on 6sync (KVM) 360 MB RSS forked in 8.2 milliseconds (23.3 millisecond per GB).
Linux VM on EC2 (Xen) 6.1GB RSS forked in 1460 milliseconds (239.3 milliseconds per GB).
Linux VM on Linode (Xen) 0.9GBRSS forked into 382 millisecodns (424 milliseconds per GB).
说明:Redis的fork操作主要发生在写RDB文件和AOF rewrite的过程中,Redis通过fork出一个子进程来完成上面的工作,通过利用fork操作的COW(copy on write)功能,使得系统能够仅仅复制内存页面引用来实现数据快照的功能。