On Sat, Apr 9, 2011 at 8:07 PM, Sasha Levin <[email protected]> wrote:
> Now openning map with MAP_SHARED.
>
> Attempt to use mmap first for working with a disk image, if the attempt is
> failed (for example, large image on a 32bit system) fallback to using
> read/write.
>
> Performance (kB/s) test using bonnie++ showed the following improvement:
>
> kvm cmdline: ./kvm run --mem=256 --image=./work/vms/gentoo.img
> --kernel=/boot/bzImage-git
> bonnie++ cmdline: bonnie++ -u 0
>
> Before:
> Version 1.96 ------Sequential Output----- --Sequential Input- -Random-
> Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block--
> --Seeks--
> Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec
> %CP
> tux 480M 673 100 308017 61 288156 49 3286 99 892186 76
> +++++ +++
> Latency 12998us 50992us 35993us 3000us 1999us 201ms
> Version 1.96 ------Sequential Create------ --------Random
> Create--------
> tux -Create-- --Read--- -Delete-- -Create-- --Read---
> -Delete--
> files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
> 16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
> Latency 3000us 1000us 1000us 1000us 1998us 1000us
>
> Version 1.96 ------Sequential Output------ --Sequential Input-
> --Random-
> Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block--
> --Seeks--
> Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec
> %CP
> tux 480M 674 99 366588 42 309514 44 3539 99 954554 76
> +++++ +++
> Latency 17997us 15997us 37993us 4999us 1998us 145ms
> Version 1.96 ------Sequential Create------ --------Random
> Create--------
> tux -Create-- --Read--- -Delete-- -Create-- --Read---
> -Delete--
> files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
> 16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
> Latency 1000us 1000us 2000us 1999us 1000us 1000us
>
> Signed-off-by: Sasha Levin <[email protected]>
I applied this because throughput improves. I need to revisit the
decision after we fix the blocking I/O model.
> +struct disk_image *disk_image__new(int fd, uint64_t size)
> +{
> + struct disk_image *self;
> +
> + self = malloc(sizeof *self);
> + if (!self)
> + return NULL;
> +
> + self->fd = fd;
> + self->size = size;
> + self->priv = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED
> | MAP_NORESERVE, fd, 0);
Btw, I dropped MAP_NORESERVE. It's a no-op with MAP_SHARED.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html