Speed up test suite by avoiding fsync

Add grub_util_disable_fd_syncs call to turn grub_util_fd_sync calls into
no-ops, and use it in programs that copy files but do not need to take
special care to sync writes (grub-mknetdir, grub-rescue,
grub-mkstandalone).

On my laptop, this reduces partmap_test's runtime from 1236 seconds to
204 seconds.
This commit is contained in:
Colin Watson committed 2013-11-27 10:10:22 +00:00
1 parent fc3f2b72cd
commit 5c7206e45e
9 files changed
+52 -11

No files matched your search

+7
View File
@@ -1,3 +1,10 @@
2013-11-27 Colin Watson <cjwatson@ubuntu.com>
Add grub_util_disable_fd_syncs call to turn grub_util_fd_sync calls
into no-ops, and use it in programs that copy files but do not need
to take special care to sync writes (grub-mknetdir, grub-rescue,
grub-mkstandalone).
2013-11-26 Colin Watson <cjwatson@ubuntu.com>
* tests/util/grub-fs-tester.in: Execute xorriso from $PATH rather
+18 -7
View File
@@ -455,6 +455,8 @@ grub_util_fd_close (grub_util_fd_t fd)
}
}
static int allow_fd_syncs = 1;
static void
grub_util_fd_sync_volume (grub_util_fd_t fd)
{
@@ -469,17 +471,26 @@ grub_util_fd_sync_volume (grub_util_fd_t fd)
void
grub_util_fd_sync (grub_util_fd_t fd)
{
switch (fd->type)
if (allow_fd_syncs)
{
case GRUB_UTIL_FD_FILE:
fsync (fd->fd);
return;
case GRUB_UTIL_FD_DISK:
grub_util_fd_sync_volume (fd);
return;
switch (fd->type)
{
case GRUB_UTIL_FD_FILE:
fsync (fd->fd);
return;
case GRUB_UTIL_FD_DISK:
grub_util_fd_sync_volume (fd);
return;
}
}
}
void
grub_util_disable_fd_syncs (void)
{
allow_fd_syncs = 0;
}
void
grub_hostdisk_flush_initial_buffer (const char *os_dev __attribute__ ((unused)))
{
+10 -1
View File
@@ -191,10 +191,19 @@ grub_util_fd_strerror (void)
return strerror (errno);
}
static int allow_fd_syncs = 1;
void
grub_util_fd_sync (grub_util_fd_t fd)
{
fsync (fd);
if (allow_fd_syncs)
fsync (fd);
}
void
grub_util_disable_fd_syncs (void)
{
allow_fd_syncs = 0;
}
void
+10 -1
View File
@@ -240,10 +240,19 @@ grub_util_fd_write (grub_util_fd_t fd, const char *buf, size_t len)
return real_read;
}
static int allow_fd_syncs = 1;
void
grub_util_fd_sync (grub_util_fd_t fd)
{
FlushFileBuffers (fd);
if (allow_fd_syncs)
FlushFileBuffers (fd);
}
void
grub_util_disable_fd_syncs (void)
{
allow_fd_syncs = 0;
}
void
+2
View File
@@ -50,6 +50,8 @@ EXPORT_FUNC(grub_util_fd_strerror) (void);
void
grub_util_fd_sync (grub_util_fd_t fd);
void
grub_util_disable_fd_syncs (void);
void
EXPORT_FUNC(grub_util_fd_close) (grub_util_fd_t fd);
grub_uint64_t
+1 -1
View File
@@ -492,7 +492,7 @@ grub_install_make_image_wrap (const char *dir, const char *prefix,
memdisk_path, config_path,
mkimage_target, note, comp);
fflush (fp);
fsync (fileno (fp));
grub_util_fd_sync (fileno (fp));
fclose (fp);
}
+1
View File
@@ -171,6 +171,7 @@ main (int argc, char *argv[])
const char *pkglibdir;
grub_util_host_init (&argc, &argv);
grub_util_disable_fd_syncs ();
rootdir = xstrdup ("/srv/tftp");
pkglibdir = grub_util_get_pkglibdir ();
+2 -1
View File
@@ -369,6 +369,7 @@ main (int argc, char *argv[])
const char *pkgdatadir;
grub_util_host_init (&argc, &argv);
grub_util_disable_fd_syncs ();
pkgdatadir = grub_util_get_pkgdatadir ();
@@ -529,7 +530,7 @@ main (int argc, char *argv[])
GRUB_COMPRESSION_AUTO);
sz = ftello (sa);
fflush (sa);
fsync (fileno (sa));
grub_util_fd_sync (fileno (sa));
fclose (sa);
if (sz > 32768)
+1
View File
@@ -305,6 +305,7 @@ main (int argc, char *argv[])
int i;
grub_util_host_init (&argc, &argv);
grub_util_disable_fd_syncs ();
files = xmalloc ((argc + 1) * sizeof (files[0]));