Обсуждение: Difference between fsync and open_sync

Поиск
Список
Период
Сортировка

Difference between fsync and open_sync

От
Oscar Calderon
Дата:
Hi, have a nice day everybody. I'm reading about WAL and i'm trying to understand the theory about it, i mean, all the stuff related to disk caches, controller caches and so on, and now in my lectures there is a section about the different methods to force WAL updates, wal_sync_method

And googling more i found a very good article (old but useful)


And i understood the difference between, for example, fsync and fdatasync, and between open_datasync and open_sync, but i cannot understand the difference between open_sync and fsync or between open_datasync and fdatasync , As far as i could understand, the open_* methods call the open() method of linux, and f*sync methods calls the fsync() method of linux? 

My doubt is about what's the difference between them, or a link where this is explained. In the previous link it talks about the 4 methods but i cannot distinguish the difference between them.

Regards.

***************************
Oscar Calderon
Analista de Sistemas
Soluciones Aplicativas S.A. de C.V.
www.solucionesaplicativas.com
Cel. (503) 7741 7850 Tel. (503) 2522-2834

Re: Difference between fsync and open_sync

От
David G Johnston
Дата:
ocalderon wrote
> Hi, have a nice day everybody. I'm reading about WAL and i'm trying to
> understand the theory about it, i mean, all the stuff related to disk
> caches, controller caches and so on, and now in my lectures there is a
> section about the different methods to force WAL updates, wal_sync_method
>
> And googling more i found a very good article (old but useful)
>
> http://www.westnet.com/~gsmith/content/postgresql/TuningPGWAL.htm
>
> And i understood the difference between, for example, fsync and fdatasync,
> and between open_datasync and open_sync, but i cannot understand the
> difference between open_sync and fsync or between open_datasync and
> fdatasync , As far as i could understand, the open_* methods call the
> open() method of linux, and f*sync methods calls the fsync() method of
> linux?
>
> My doubt is about what's the difference between them, or a link where this
> is explained. In the previous link it talks about the 4 methods but i
> cannot distinguish the difference between them.

fsync and open are both system functions for which documentation exists on
the Internet.

Short answer seems to be that the physical write is guaranteed: open =
immediately; fsync = at commit

As long as "fsync mode" is on after a commit command returns the WAL is
promised to be physically written to disk; the means and speed of doing so
vary according to the method chosen (limited by platform), the workload, the
hardware, and the OS.

Others will correct any misunderstandings I may have acquired in my quick
reading and reasoning.

David J.







--
View this message in context:
http://postgresql.1045698.n5.nabble.com/Difference-between-fsync-and-open-sync-tp5800666p5800669.html
Sent from the PostgreSQL - admin mailing list archive at Nabble.com.


Re: Difference between fsync and open_sync

От
Bruce Momjian
Дата:
On Thu, Apr 17, 2014 at 08:54:25PM -0700, David G Johnston wrote:
> > And i understood the difference between, for example, fsync and fdatasync,
> > and between open_datasync and open_sync, but i cannot understand the
> > difference between open_sync and fsync or between open_datasync and
> > fdatasync , As far as i could understand, the open_* methods call the
> > open() method of linux, and f*sync methods calls the fsync() method of
> > linux?
> >
> > My doubt is about what's the difference between them, or a link where this
> > is explained. In the previous link it talks about the 4 methods but i
> > cannot distinguish the difference between them.
>
> fsync and open are both system functions for which documentation exists on
> the Internet.
>
> Short answer seems to be that the physical write is guaranteed: open =
> immediately; fsync = at commit
>
> As long as "fsync mode" is on after a commit command returns the WAL is
> promised to be physically written to disk; the means and speed of doing so
> vary according to the method chosen (limited by platform), the workload, the
> hardware, and the OS.
>
> Others will correct any misunderstandings I may have acquired in my quick
> reading and reasoning.

The open* sync methods use a flag when the file is open that cause
_every_ write to be flushed to disk automatically.  The non-open* types
allow multiple writes and require a specific sync* command to be issued
when needed.

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + Everyone has their own god. +