diff --git a/buf/buf0buf.c b/buf/buf0buf.c index 53a63a3b804..ffbd6b54b57 100644 --- a/buf/buf0buf.c +++ b/buf/buf0buf.c @@ -128,8 +128,10 @@ in the database, using tables whose size is a power of 2. Lists of blocks --------------- -There are several lists of control blocks. The free list contains -blocks which are currently not used. +There are several lists of control blocks. + +The free list (buf_pool->free) contains blocks which are currently not +used. The LRU-list contains all the blocks holding a file page except those for which the bufferfix count is non-zero. @@ -146,11 +148,26 @@ table which cannot fit in the memory. Putting the pages near the of the LRU list, we make sure that most of the buf_pool stays in the main memory, undisturbed. -The chain of modified blocks contains the blocks +The chain of modified blocks (buf_pool->flush_list) contains the blocks holding file pages that have been modified in the memory but not written to disk yet. The block with the oldest modification which has not yet been written to disk is at the end of the chain. +The chain of unmodified compressed blocks (buf_pool->zip_clean) +contains the control blocks (buf_page_t) of those compressed pages +that are not in buf_pool->flush_list and for which no uncompressed +page has been allocated in the buffer pool. The control blocks for +uncompressed pages are accessible via buf_block_t objects that are +reachable via buf_pool->chunks[]. + +The chains of free memory blocks (buf_pool->zip_free[]) are used by +the buddy allocator (buf0buddy.c) to keep track of currently unused +memory blocks of size sizeof(buf_page_t)..UNIV_PAGE_SIZE / 2. These +blocks are inside the UNIV_PAGE_SIZE-sized memory blocks of type +BUF_BLOCK_MEMORY that the buddy allocator requests from the buffer +pool. The buddy allocator is solely used for allocating control +blocks for compressed pages (buf_page_t) and compressed page frames. + Loading a file page -------------------