It also appears Parallels is doing 16k reads and writes to and from the .sav file.
ktrace yields:
728 Parallels CALL open(0xaf32d8,0x202,0x1b6)
728 Parallels NAMI "/Users/bbraun/Library/Parallels/win98/win98.sav"
728 Parallels RET open 18/0x12
728 Parallels CALL ioctl(0xe,0xc0185405 ,0xb011ad54)
728 Parallels RET ioctl 0
728 Parallels CALL ioctl(0xe,0xc0185405 ,0xb011ad54)
728 Parallels RET ioctl 0
728 Parallels CALL ioctl(0xe,0xc0185405 ,0xb011ad54)
728 Parallels RET ioctl 0
728 Parallels CALL lseek(0x12,0x4000,0)
728 Parallels RET lseek 16384/0x4000
728 Parallels CALL write(0x12,0x22f6a000,0x4000)
728 Parallels GIO fd 18 wrote 16384 bytes
Using 128k reads and writes on OSX is roughly 30% faster for me, using the following test code:
fd = open(argv[1], O_RDONLY);
fcntl(fd, F_NOCACHE, 1);
while( read(fd, buf, sizeof(buf)) > 0 );
I tested this on the same .sav file Parallels was reading/writing from/to.
Sadly, ktrace omits timestamps, so it is difficult to tell exactly how much of an impact this would have on real word suspend/resume performance.
Additionally, it is probable that those ioctls and lseeks can be avoided. However, it is probably also a result of Parallels using high level Carbon APIs.
A slightly irrelevent, but amusing little tidbit from ktrace:
728 Parallels CALL open(0x582490,0,0x1b6)
728 Parallels NAMI "/proc/parallels/mem"
728 Parallels RET open -1 errno 2 No such file or directory
It seems some code from the linux port slipped into the osx port. ;-)