起動プロセス(6) log_init関数
innobase_start_or_create_for_mysql関数の中で呼び出される。
log0log.cにて。ログバッファを初期化する。
742行目。最初にログのための制御構造体を初期化。log_tのサイズは732バイト。
log_sys = mem_alloc(sizeof(log_t));
757行目。innodb_log_buffer_sizeで指定したバイトサイズ+512バイトのメモリを割り当てて、buf_poolのときと同様にここでもアドレスを切り上げしている。切り上げに使用している単位は512。
buf = ut_malloc(LOG_BUFFER_SIZE + OS_FILE_LOG_BLOCK_SIZE); log_sys->buf = ut_align(buf, OS_FILE_LOG_BLOCK_SIZE);
OS_FILE_LOG_BLOCK_SIZEのコメントを読むと以下のようになっている。
/* The next value should be smaller or equal to the smallest sector size used on any disk. A log block is required to be a portion of disk which is written so that if the start and the end of a block get written to disk, then the whole block gets written. This should be true even in most cases of a crash: if this fails for a log block, then it is equivalent to a media failure in the log. */ #define OS_FILE_LOG_BLOCK_SIZE 512
sectorサイズについて触れている。これが関係しているらしい。
804行目。checkpoint_bufの割り当て。これもalignするので、必要量+αの割り当てを行っている。
log_sys->checkpoint_buf = ut_align( mem_alloc(2 * OS_FILE_LOG_BLOCK_SIZE), OS_FILE_LOG_BLOCK_SIZE);