From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Guthro Subject: [PATCH] Dump flush write performance Date: Wed, 24 Oct 2007 17:10:23 -0400 Message-ID: <471FB4BF.6030008@virtualiron.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------070600040607050609080507" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel Cc: Daniel Li List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------070600040607050609080507 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Two changes to avoid disk driver using up kernel memory and triggering oom-killer while creating guest dump to a disk file: 1) Decreased write chunks from 16MB to 2MB; 2) Flush (fsync) after each 2MB write. To make sure we don't suffer significant write performance penalty, each of the following cases have been tested several times to dump a 1GB guest to a file on a SAN disk: With current code (16MB writes, sync once after all writes); ~38s 16MB writes, sync after each write: ~46s 2MB writes, sync after each write: ~49s Sync-often costs us about 20%, smaller-write-size costs another 8%. The total is less than 30% and about 10 seconds more for a 1GB guest. Signed-off-by: Ben Guthro Signed-off-by: Daniel Li --------------070600040607050609080507 Content-Type: text/x-patch; name="xen-dump-flush-writes.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="xen-dump-flush-writes.patch" diff -r 9d263e1fcd02 tools/libxc/xc_core.c --- a/tools/libxc/xc_core.c Wed Oct 24 16:25:11 2007 -0400 +++ b/tools/libxc/xc_core.c Wed Oct 24 16:26:04 2007 -0400 @@ -56,7 +56,7 @@ #include /* number of pages to write at a time */ -#define DUMP_INCREMENT (4 * 1024) +#define DUMP_INCREMENT (512) /* Don't yet support cross-address-size core dump */ #define guest_width (sizeof (unsigned long)) @@ -875,7 +875,7 @@ static int local_file_dump(void *args, c if (length >= DUMP_INCREMENT*PAGE_SIZE) { // Now dumping pages -- make sure we discard clean pages from // the cache after each write - discard_file_cache(da->fd, 0 /* no flush */); + discard_file_cache(da->fd, 1 /* flush */); } return 0; --------------070600040607050609080507 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------070600040607050609080507--