Adjusted calculation of shared memory requirements to new
ARC buffer replacement strategy. Jan
This commit is contained in:
parent
cfd7fb7ed4
commit
dfdd59e918
|
@ -8,7 +8,7 @@
|
|||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/storage/buffer/buf_init.c,v 1.60 2003/12/20 17:31:21 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/storage/buffer/buf_init.c,v 1.61 2004/01/15 16:14:26 wieck Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
@ -231,13 +231,19 @@ BufferShmemSize(void)
|
|||
size += hash_estimate_size(SHMEM_INDEX_SIZE, sizeof(ShmemIndexEnt));
|
||||
|
||||
/* size of buffer descriptors */
|
||||
size += MAXALIGN((NBuffers + 1) * sizeof(BufferDesc));
|
||||
size += MAXALIGN(NBuffers * sizeof(BufferDesc));
|
||||
|
||||
/* size of the shared replacement strategy control block */
|
||||
size += MAXALIGN(sizeof(BufferStrategyControl));
|
||||
|
||||
/* size of the ARC directory blocks */
|
||||
size += MAXALIGN(NBuffers * 2 * sizeof(BufferStrategyCDB));
|
||||
|
||||
/* size of data pages */
|
||||
size += NBuffers * MAXALIGN(BLCKSZ);
|
||||
|
||||
/* size of buffer hash table */
|
||||
size += hash_estimate_size(NBuffers, sizeof(BufferLookupEnt));
|
||||
size += hash_estimate_size(NBuffers * 2, sizeof(BufferLookupEnt));
|
||||
|
||||
return size;
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/storage/buffer/freelist.c,v 1.38 2003/11/29 19:51:56 pgsql Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/storage/buffer/freelist.c,v 1.39 2004/01/15 16:14:26 wieck Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
@ -32,13 +32,6 @@
|
|||
#include "storage/proc.h"
|
||||
#include "access/xact.h"
|
||||
|
||||
#define STRAT_LIST_UNUSED -1
|
||||
#define STRAT_LIST_B1 0
|
||||
#define STRAT_LIST_T1 1
|
||||
#define STRAT_LIST_T2 2
|
||||
#define STRAT_LIST_B2 3
|
||||
#define STRAT_NUM_LISTS 4
|
||||
|
||||
#ifndef MAX
|
||||
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
|
||||
#endif
|
||||
|
@ -46,40 +39,6 @@
|
|||
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The Cache Directory Block (CDB) of the Adaptive Replacement Cache (ARC)
|
||||
*/
|
||||
typedef struct bufstratcdb
|
||||
{
|
||||
int prev; /* links in the queue */
|
||||
int next;
|
||||
int list; /* current list */
|
||||
BufferTag buf_tag; /* buffer key */
|
||||
Buffer buf_id; /* currently assigned data buffer */
|
||||
TransactionId t1_xid; /* the xid this entry went onto T1 */
|
||||
} BufferStrategyCDB;
|
||||
|
||||
/*
|
||||
* The shared ARC control information.
|
||||
*/
|
||||
typedef struct bufstratcontrol
|
||||
{
|
||||
|
||||
int target_T1_size; /* What T1 size are we aiming for */
|
||||
int listUnusedCDB; /* All unused StrategyCDB */
|
||||
int listHead[STRAT_NUM_LISTS]; /* ARC lists B1, T1, T2 and B2 */
|
||||
int listTail[STRAT_NUM_LISTS];
|
||||
int listSize[STRAT_NUM_LISTS];
|
||||
Buffer listFreeBuffers; /* List of unused buffers */
|
||||
|
||||
long num_lookup; /* Some hit statistics */
|
||||
long num_hit[STRAT_NUM_LISTS];
|
||||
time_t stat_report;
|
||||
|
||||
BufferStrategyCDB cdb[1]; /* The cache directory */
|
||||
} BufferStrategyControl;
|
||||
|
||||
|
||||
static BufferStrategyControl *StrategyControl = NULL;
|
||||
static BufferStrategyCDB *StrategyCDB = NULL;
|
||||
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* buf_internals.h
|
||||
* Internal definitions for buffer manager.
|
||||
* Internal definitions for buffer manager and the buffer replacement
|
||||
* strategy.
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/storage/buf_internals.h,v 1.66 2003/12/14 00:34:47 neilc Exp $
|
||||
* $PostgreSQL: pgsql/src/include/storage/buf_internals.h,v 1.67 2004/01/15 16:14:26 wieck Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
@ -135,6 +136,49 @@ typedef struct
|
|||
Buffer id;
|
||||
} BufferLookupEnt;
|
||||
|
||||
/*
|
||||
* Definitions for the buffer replacement strategy
|
||||
*/
|
||||
#define STRAT_LIST_UNUSED -1
|
||||
#define STRAT_LIST_B1 0
|
||||
#define STRAT_LIST_T1 1
|
||||
#define STRAT_LIST_T2 2
|
||||
#define STRAT_LIST_B2 3
|
||||
#define STRAT_NUM_LISTS 4
|
||||
|
||||
/*
|
||||
* The Cache Directory Block (CDB) of the Adaptive Replacement Cache (ARC)
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
int prev; /* links in the queue */
|
||||
int next;
|
||||
int list; /* current list */
|
||||
BufferTag buf_tag; /* buffer key */
|
||||
Buffer buf_id; /* currently assigned data buffer */
|
||||
TransactionId t1_xid; /* the xid this entry went onto T1 */
|
||||
} BufferStrategyCDB;
|
||||
|
||||
/*
|
||||
* The shared ARC control information.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
|
||||
int target_T1_size; /* What T1 size are we aiming for */
|
||||
int listUnusedCDB; /* All unused StrategyCDB */
|
||||
int listHead[STRAT_NUM_LISTS]; /* ARC lists B1, T1, T2 and B2 */
|
||||
int listTail[STRAT_NUM_LISTS];
|
||||
int listSize[STRAT_NUM_LISTS];
|
||||
Buffer listFreeBuffers; /* List of unused buffers */
|
||||
|
||||
long num_lookup; /* Some hit statistics */
|
||||
long num_hit[STRAT_NUM_LISTS];
|
||||
time_t stat_report;
|
||||
|
||||
BufferStrategyCDB cdb[1]; /* The cache directory */
|
||||
} BufferStrategyControl;
|
||||
|
||||
/* counters in buf_init.c */
|
||||
extern long int ReadBufferCount;
|
||||
extern long int ReadLocalBufferCount;
|
||||
|
|
Loading…
Reference in New Issue