All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Vladimir 'φ-coder/phcoder' Serbinenko" <phcoder@gmail.com>
To: The development of GNU GRUB <grub-devel@gnu.org>
Subject: Re: [PATCH] Speed up test suite by avoiding fsync
Date: Wed, 27 Nov 2013 11:30:12 +0100	[thread overview]
Message-ID: <5295C9B4.3040205@gmail.com> (raw)
In-Reply-To: <20131127101332.GZ16147@riva.ucam.org>

[-- Attachment #1: Type: text/plain, Size: 6181 bytes --]

On 27.11.2013 11:13, Colin Watson wrote:
> 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).
> 
Go ahead.
> On my laptop, this reduces partmap_test's runtime from 1236 seconds to
> 204 seconds.
> ---
>  ChangeLog                          |  7 +++++++
>  grub-core/osdep/aros/hostdisk.c    | 25 ++++++++++++++++++-------
>  grub-core/osdep/unix/hostdisk.c    | 11 ++++++++++-
>  grub-core/osdep/windows/hostdisk.c | 11 ++++++++++-
>  include/grub/emu/hostfile.h        |  2 ++
>  util/grub-install-common.c         |  2 +-
>  util/grub-mknetdir.c               |  1 +
>  util/grub-mkrescue.c               |  3 ++-
>  util/grub-mkstandalone.c           |  1 +
>  9 files changed, 52 insertions(+), 11 deletions(-)
> 
> diff --git a/ChangeLog b/ChangeLog
> index 2e0d96e..4bbec86 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -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
> diff --git a/grub-core/osdep/aros/hostdisk.c b/grub-core/osdep/aros/hostdisk.c
> index 9c0a6c8..b153907 100644
> --- a/grub-core/osdep/aros/hostdisk.c
> +++ b/grub-core/osdep/aros/hostdisk.c
> @@ -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,18 +471,27 @@ 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)))
>  {
>  }
> diff --git a/grub-core/osdep/unix/hostdisk.c b/grub-core/osdep/unix/hostdisk.c
> index 78d4adb..fc88ed4 100644
> --- a/grub-core/osdep/unix/hostdisk.c
> +++ b/grub-core/osdep/unix/hostdisk.c
> @@ -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
> diff --git a/grub-core/osdep/windows/hostdisk.c b/grub-core/osdep/windows/hostdisk.c
> index 6d7d120..4748a61 100644
> --- a/grub-core/osdep/windows/hostdisk.c
> +++ b/grub-core/osdep/windows/hostdisk.c
> @@ -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
> diff --git a/include/grub/emu/hostfile.h b/include/grub/emu/hostfile.h
> index ab01fbc..8e37d5a 100644
> --- a/include/grub/emu/hostfile.h
> +++ b/include/grub/emu/hostfile.h
> @@ -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
> diff --git a/util/grub-install-common.c b/util/grub-install-common.c
> index 7ecef3e..fcf994d 100644
> --- a/util/grub-install-common.c
> +++ b/util/grub-install-common.c
> @@ -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);
>  }
>  
> diff --git a/util/grub-mknetdir.c b/util/grub-mknetdir.c
> index 3f91705..40ca724 100644
> --- a/util/grub-mknetdir.c
> +++ b/util/grub-mknetdir.c
> @@ -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 ();
>  
> diff --git a/util/grub-mkrescue.c b/util/grub-mkrescue.c
> index 7a76bc3..b081b3b 100644
> --- a/util/grub-mkrescue.c
> +++ b/util/grub-mkrescue.c
> @@ -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)
> diff --git a/util/grub-mkstandalone.c b/util/grub-mkstandalone.c
> index 774af2f..3097f70 100644
> --- a/util/grub-mkstandalone.c
> +++ b/util/grub-mkstandalone.c
> @@ -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]));
>  
> 



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 291 bytes --]

      reply	other threads:[~2013-11-27 10:30 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-27 10:13 [PATCH] Speed up test suite by avoiding fsync Colin Watson
2013-11-27 10:30 ` Vladimir 'φ-coder/phcoder' Serbinenko [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5295C9B4.3040205@gmail.com \
    --to=phcoder@gmail.com \
    --cc=grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.