mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
buf0buf.c, buf0buf.ic, buf0buf.h:
Reduce memory usage of the buffer headers Many files: Merge InnoDB-4.1 with AWE support sql/mysqld.cc: Merge InnoDB-4.1 with AWE support sql/set_var.cc: Merge InnoDB-4.1 with AWE support sql/ha_innodb.h: Merge InnoDB-4.1 with AWE support sql/ha_innodb.cc: Merge InnoDB-4.1 with AWE support innobase/btr/btr0cur.c: Merge InnoDB-4.1 with AWE support innobase/btr/btr0pcur.c: Merge InnoDB-4.1 with AWE support innobase/buf/buf0flu.c: Merge InnoDB-4.1 with AWE support innobase/buf/buf0lru.c: Merge InnoDB-4.1 with AWE support innobase/buf/buf0rea.c: Merge InnoDB-4.1 with AWE support innobase/include/btr0pcur.h: Merge InnoDB-4.1 with AWE support innobase/include/buf0lru.h: Merge InnoDB-4.1 with AWE support innobase/include/log0recv.h: Merge InnoDB-4.1 with AWE support innobase/include/os0proc.h: Merge InnoDB-4.1 with AWE support innobase/include/srv0srv.h: Merge InnoDB-4.1 with AWE support innobase/log/log0log.c: Merge InnoDB-4.1 with AWE support innobase/log/log0recv.c: Merge InnoDB-4.1 with AWE support innobase/os/os0file.c: Merge InnoDB-4.1 with AWE support innobase/os/os0proc.c: Merge InnoDB-4.1 with AWE support innobase/srv/srv0srv.c: Merge InnoDB-4.1 with AWE support innobase/srv/srv0start.c: Merge InnoDB-4.1 with AWE support innobase/trx/trx0sys.c: Merge InnoDB-4.1 with AWE support innobase/trx/trx0trx.c: Merge InnoDB-4.1 with AWE support innobase/ut/ut0ut.c: Merge InnoDB-4.1 with AWE support innobase/include/buf0buf.h: Reduce memory usage of the buffer headers innobase/include/buf0buf.ic: Reduce memory usage of the buffer headers innobase/buf/buf0buf.c: Reduce memory usage of the buffer headers
This commit is contained in:
@ -15,6 +15,76 @@ Created 9/30/1995 Heikki Tuuri
|
||||
typedef void* os_process_t;
|
||||
typedef unsigned long int os_process_id_t;
|
||||
|
||||
/* The cell type in os_awe_allocate_mem page info */
|
||||
#ifdef __NT__
|
||||
typedef ULONG_PTR os_awe_t;
|
||||
#else
|
||||
typedef ulint os_awe_t;
|
||||
#endif
|
||||
|
||||
/* Physical page size when Windows AWE is used. This is the normal
|
||||
page size of an Intel x86 processor. We cannot use AWE with 2 MB or 4 MB
|
||||
pages. */
|
||||
#define OS_AWE_X86_PAGE_SIZE 4096
|
||||
|
||||
/********************************************************************
|
||||
Windows AWE support. Tries to enable the "lock pages in memory" privilege for
|
||||
the current process so that the current process can allocate memory-locked
|
||||
virtual address space to act as the window where AWE maps physical memory. */
|
||||
|
||||
ibool
|
||||
os_awe_enable_lock_pages_in_mem(void);
|
||||
/*=================================*/
|
||||
/* out: TRUE if success, FALSE if error;
|
||||
prints error info to stderr if no success */
|
||||
/********************************************************************
|
||||
Allocates physical RAM memory up to 64 GB in an Intel 32-bit x86
|
||||
processor. */
|
||||
|
||||
ibool
|
||||
os_awe_allocate_physical_mem(
|
||||
/*=========================*/
|
||||
/* out: TRUE if success */
|
||||
os_awe_t** page_info, /* out, own: array of opaque data containing
|
||||
the info for allocated physical memory pages;
|
||||
each allocated 4 kB physical memory page has
|
||||
one slot of type os_awe_t in the array */
|
||||
ulint n_megabytes); /* in: number of megabytes to allocate */
|
||||
/********************************************************************
|
||||
Allocates a window in the virtual address space where we can map then
|
||||
pages of physical memory. */
|
||||
|
||||
byte*
|
||||
os_awe_allocate_virtual_mem_window(
|
||||
/*===============================*/
|
||||
/* out, own: allocated memory, or NULL if did not
|
||||
succeed */
|
||||
ulint size); /* in: virtual memory allocation size in bytes, must
|
||||
be < 2 GB */
|
||||
/********************************************************************
|
||||
With this function you can map parts of physical memory allocated with
|
||||
the ..._allocate_physical_mem to the virtual address space allocated with
|
||||
the previous function. Intel implements this so that the process page
|
||||
tables are updated accordingly. A test on a 1.5 GHz AMD processor and XP
|
||||
showed that this takes < 1 microsecond, much better than the estimated 80 us
|
||||
for copying a 16 kB page memory to memory. But, the operation will at least
|
||||
partially invalidate the translation lookaside buffer (TLB) of all
|
||||
processors. Under a real-world load the performance hit may be bigger. */
|
||||
|
||||
ibool
|
||||
os_awe_map_physical_mem_to_window(
|
||||
/*==============================*/
|
||||
/* out: TRUE if success; the function
|
||||
calls exit(1) in case of an error */
|
||||
byte* ptr, /* in: a page-aligned pointer to
|
||||
somewhere in the virtual address
|
||||
space window; we map the physical mem
|
||||
pages here */
|
||||
ulint n_mem_pages, /* in: number of 4 kB mem pages to
|
||||
map */
|
||||
os_awe_t* page_info); /* in: array of page infos for those
|
||||
pages; each page has one slot in the
|
||||
array */
|
||||
/********************************************************************
|
||||
Converts the current process id to a number. It is not guaranteed that the
|
||||
number is unique. In Linux returns the 'process number' of the current
|
||||
|
Reference in New Issue
Block a user