diff -u postgresql-8.2.3/src/backend/port/sysv_shmem.c /usr/src/redhat/BUILD/postgresql-8.2.3/src/backend/port/sysv_shmem.c
--- postgresql-8.2.3/src/backend/port/sysv_shmem.c	2006-07-13 22:28:28.000000000 -0700
+++ /usr/src/redhat/BUILD/postgresql-8.2.3/src/backend/port/sysv_shmem.c	2007-03-03 17:05:37.000000000 -0800
@@ -46,6 +46,7 @@
 #define PG_SHMAT_FLAGS			0
 #endif
 
+#define PG_LARGE_PAGE_SIZE 2048 * 1024
 
 unsigned long UsedShmemSegID = 0;
 void	   *UsedShmemSegAddr = NULL;
@@ -75,7 +76,8 @@
 	IpcMemoryId shmid;
 	void	   *memAddress;
 
-	shmid = shmget(memKey, size, IPC_CREAT | IPC_EXCL | IPCProtection);
+	size = ((size - 1) & ~(PG_LARGE_PAGE_SIZE - 1)) + PG_LARGE_PAGE_SIZE;
+	shmid = shmget(memKey, size, IPC_CREAT | IPC_EXCL | IPCProtection | SHM_HUGETLB);
 
 	if (shmid < 0)
 	{
