pgsql: Use pg_pread() and pg_pwrite() for data files and WAL.

Started by Thomas Munroover 7 years ago3 messagescomitters
Jump to latest
#1Thomas Munro
thomas.munro@gmail.com

Use pg_pread() and pg_pwrite() for data files and WAL.

Cut down on system calls by doing random I/O using offset-based OS
routines where available. Remove the code for tracking the 'virtual'
seek position. The only reason left to call FileSeek() was to get
the file's size, so provide a new function FileSize() instead.

Author: Oskari Saarenmaa, Thomas Munro
Reviewed-by: Thomas Munro, Jesper Pedersen, Tom Lane, Alvaro Herrera
Discussion: /messages/by-id/CAEepm=02rapCpPR3ZGF2vW=SBHSdFYO_bz_f-wwWJonmA3APgw@mail.gmail.com
Discussion: /messages/by-id/b8748d39-0b19-0514-a1b9-4e5a28e6a208@gmail.com
Discussion: /messages/by-id/a86bd200-ebbe-d829-e3ca-0c4474b2fcb7@ohmu.fi

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/c24dcd0cfd949bdf245814c4c2b3df828ee7db36

Modified Files
--------------
src/backend/access/heap/rewriteheap.c | 2 +-
src/backend/access/transam/xlog.c | 30 +----
src/backend/storage/file/buffile.c | 46 +-------
src/backend/storage/file/fd.c | 205 +++++-----------------------------
src/backend/storage/smgr/md.c | 35 +-----
src/include/storage/fd.h | 12 +-
6 files changed, 42 insertions(+), 288 deletions(-)

#2Andrew Dunstan
andrew@dunslane.net
In reply to: Thomas Munro (#1)
Re: pgsql: Use pg_pread() and pg_pwrite() for data files and WAL.

On 11/6/18 4:01 PM, Thomas Munro wrote:

Use pg_pread() and pg_pwrite() for data files and WAL.

Cut down on system calls by doing random I/O using offset-based OS
routines where available. Remove the code for tracking the 'virtual'
seek position. The only reason left to call FileSeek() was to get
the file's size, so provide a new function FileSize() instead.

Getting this warning (gcc 8.2.1 Fedora 29):

Nov 06 17:18:55
/home/bf/bfr/root/HEAD/pgsql.build/../pgsql/src/backend/storage/file/fd.c:
In function ‘FileSize’:
Nov 06 17:18:55
/home/bf/bfr/root/HEAD/pgsql.build/../pgsql/src/backend/storage/file/fd.c:2007:11:
warning: variable ‘vfdP’ set but not used [-Wunused-but-set-variable]
Nov 06 17:18:55   Vfd     *vfdP;
Nov 06 17:18:55            ^~~~

cheers

andrew

--

Andrew Dunstan https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#3Thomas Munro
thomas.munro@gmail.com
In reply to: Andrew Dunstan (#2)
Re: pgsql: Use pg_pread() and pg_pwrite() for data files and WAL.

On Wed, Nov 7, 2018 at 11:32 AM Andrew Dunstan
<andrew.dunstan@2ndquadrant.com> wrote:

On 11/6/18 4:01 PM, Thomas Munro wrote:

Use pg_pread() and pg_pwrite() for data files and WAL.

Cut down on system calls by doing random I/O using offset-based OS
routines where available. Remove the code for tracking the 'virtual'
seek position. The only reason left to call FileSeek() was to get
the file's size, so provide a new function FileSize() instead.

Getting this warning (gcc 8.2.1 Fedora 29):

Nov 06 17:18:55
/home/bf/bfr/root/HEAD/pgsql.build/../pgsql/src/backend/storage/file/fd.c:
In function ‘FileSize’:
Nov 06 17:18:55
/home/bf/bfr/root/HEAD/pgsql.build/../pgsql/src/backend/storage/file/fd.c:2007:11:
warning: variable ‘vfdP’ set but not used [-Wunused-but-set-variable]
Nov 06 17:18:55 Vfd *vfdP;
Nov 06 17:18:55 ^~~~

Thanks, will fix.

--
Thomas Munro
http://www.enterprisedb.com