|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v5 03/16] libs/guest: Reduce number of I/O vectors in write_batch
From: Frediano Ziglio <frediano.ziglio@xxxxxxxxxx>
Each page was sent using a different iovec item. This potentially exceed
Linux maximum (1024).
Coalesce adjacent IO vector elements to attempt to reduce the number of
overall IO vectors for each operation.
Also some implementation (MiniOS) emulate writev with multiple write calls.
Signed-off-by: Frediano Ziglio <frediano.ziglio@xxxxxxxxxx>
Reviewed-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
--
Changes since v2:
- change prefix in subject.
Changes since v4:
- added Reviewed-by;
- improved commit message;
- minor style fix.
---
tools/libs/guest/xg_sr_save.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/tools/libs/guest/xg_sr_save.c b/tools/libs/guest/xg_sr_save.c
index 68ce1aeb98..eba33f861a 100644
--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/guest/xg_sr_save.c
@@ -239,13 +239,21 @@ static int write_batch(struct xc_sr_context *ctx)
{
for ( i = 0; i < nr_pfns; ++i )
{
- if ( guest_data[i] )
+ if ( !guest_data[i] )
+ continue;
+
+ if ( iov[iovcnt - 1].iov_base + iov[iovcnt - 1].iov_len !=
+ guest_data[i] )
{
iov[iovcnt].iov_base = guest_data[i];
iov[iovcnt].iov_len = PAGE_SIZE;
iovcnt++;
- --nr_pages;
}
+ else
+ {
+ iov[iovcnt - 1].iov_len += PAGE_SIZE;
+ }
+ --nr_pages;
}
}
--
2.43.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |