Commit 2aed566d authored by Marko Mäkelä's avatar Marko Mäkelä

Cleanup: alignas(CPU_LEVEL1_DCACHE_LINESIZE)

Let us replace all use of MY_ALIGNED in InnoDB with C++11 alignas.

CACHE_LINE_SIZE: Replaced with CPU_LEVEL1_DCACHE_LINESIZE.
parent 03f9bb8c
...@@ -1229,7 +1229,7 @@ struct log_flush_request ...@@ -1229,7 +1229,7 @@ struct log_flush_request
}; };
/** Buffer of pending innodb_log_flush_request() */ /** Buffer of pending innodb_log_flush_request() */
MY_ALIGNED(CPU_LEVEL1_DCACHE_LINESIZE) static alignas(CPU_LEVEL1_DCACHE_LINESIZE) static
struct struct
{ {
/** first request */ /** first request */
......
...@@ -1585,7 +1585,7 @@ class buf_pool_t ...@@ -1585,7 +1585,7 @@ class buf_pool_t
static constexpr uint32_t READ_AHEAD_PAGES= 64; static constexpr uint32_t READ_AHEAD_PAGES= 64;
/** Buffer pool mutex */ /** Buffer pool mutex */
MY_ALIGNED(CPU_LEVEL1_DCACHE_LINESIZE) mysql_mutex_t mutex; alignas(CPU_LEVEL1_DCACHE_LINESIZE) mysql_mutex_t mutex;
/** Number of pending LRU flush; protected by mutex. */ /** Number of pending LRU flush; protected by mutex. */
ulint n_flush_LRU_; ulint n_flush_LRU_;
/** broadcast when n_flush_LRU reaches 0; protected by mutex */ /** broadcast when n_flush_LRU reaches 0; protected by mutex */
...@@ -1767,7 +1767,7 @@ class buf_pool_t ...@@ -1767,7 +1767,7 @@ class buf_pool_t
/** mutex protecting flush_list, buf_page_t::set_oldest_modification() /** mutex protecting flush_list, buf_page_t::set_oldest_modification()
and buf_page_t::list pointers when !oldest_modification() */ and buf_page_t::list pointers when !oldest_modification() */
MY_ALIGNED(CPU_LEVEL1_DCACHE_LINESIZE) mysql_mutex_t flush_list_mutex; alignas(CPU_LEVEL1_DCACHE_LINESIZE) mysql_mutex_t flush_list_mutex;
/** "hazard pointer" for flush_list scans; protected by flush_list_mutex */ /** "hazard pointer" for flush_list scans; protected by flush_list_mutex */
FlushHp flush_hp; FlushHp flush_hp;
/** modified blocks (a subset of LRU) */ /** modified blocks (a subset of LRU) */
......
...@@ -1354,7 +1354,7 @@ class dict_sys_t ...@@ -1354,7 +1354,7 @@ class dict_sys_t
std::atomic<ulonglong> latch_ex_wait_start; std::atomic<ulonglong> latch_ex_wait_start;
/** the rw-latch protecting the data dictionary cache */ /** the rw-latch protecting the data dictionary cache */
MY_ALIGNED(CACHE_LINE_SIZE) srw_lock latch; alignas(CPU_LEVEL1_DCACHE_LINESIZE) srw_lock latch;
#ifdef UNIV_DEBUG #ifdef UNIV_DEBUG
/** whether latch is being held in exclusive mode (by any thread) */ /** whether latch is being held in exclusive mode (by any thread) */
bool latch_ex; bool latch_ex;
......
...@@ -684,7 +684,7 @@ class lock_sys_t ...@@ -684,7 +684,7 @@ class lock_sys_t
bool m_initialised; bool m_initialised;
/** mutex proteting the locks */ /** mutex proteting the locks */
MY_ALIGNED(CPU_LEVEL1_DCACHE_LINESIZE) srw_spin_lock latch; alignas(CPU_LEVEL1_DCACHE_LINESIZE) srw_spin_lock latch;
#ifdef UNIV_DEBUG #ifdef UNIV_DEBUG
/** The owner of exclusive latch (0 if none); protected by latch */ /** The owner of exclusive latch (0 if none); protected by latch */
std::atomic<os_thread_id_t> writer{0}; std::atomic<os_thread_id_t> writer{0};
...@@ -707,7 +707,7 @@ class lock_sys_t ...@@ -707,7 +707,7 @@ class lock_sys_t
hash_table prdt_page_hash; hash_table prdt_page_hash;
/** mutex covering lock waits; @see trx_lock_t::wait_lock */ /** mutex covering lock waits; @see trx_lock_t::wait_lock */
MY_ALIGNED(CPU_LEVEL1_DCACHE_LINESIZE) mysql_mutex_t wait_mutex; alignas(CPU_LEVEL1_DCACHE_LINESIZE) mysql_mutex_t wait_mutex;
private: private:
/** The increment of wait_count for a wait. Anything smaller is a /** The increment of wait_count for a wait. Anything smaller is a
pending wait count. */ pending wait count. */
......
...@@ -451,7 +451,7 @@ struct log_t{ ...@@ -451,7 +451,7 @@ struct log_t{
private: private:
/** The log sequence number of the last change of durable InnoDB files */ /** The log sequence number of the last change of durable InnoDB files */
MY_ALIGNED(CPU_LEVEL1_DCACHE_LINESIZE) alignas(CPU_LEVEL1_DCACHE_LINESIZE)
std::atomic<lsn_t> lsn; std::atomic<lsn_t> lsn;
/** the first guaranteed-durable log sequence number */ /** the first guaranteed-durable log sequence number */
std::atomic<lsn_t> flushed_to_disk_lsn; std::atomic<lsn_t> flushed_to_disk_lsn;
...@@ -461,7 +461,7 @@ struct log_t{ ...@@ -461,7 +461,7 @@ struct log_t{
std::atomic<bool> check_flush_or_checkpoint_; std::atomic<bool> check_flush_or_checkpoint_;
public: public:
/** mutex protecting the log */ /** mutex protecting the log */
MY_ALIGNED(CPU_LEVEL1_DCACHE_LINESIZE) mysql_mutex_t mutex; alignas(CPU_LEVEL1_DCACHE_LINESIZE) mysql_mutex_t mutex;
/** first free offset within the log buffer in use */ /** first free offset within the log buffer in use */
size_t buf_free; size_t buf_free;
/** recommended maximum size of buf, after which the buffer is flushed */ /** recommended maximum size of buf, after which the buffer is flushed */
...@@ -470,7 +470,7 @@ struct log_t{ ...@@ -470,7 +470,7 @@ struct log_t{
dirty blocks in the list. The idea behind this mutex is to be able dirty blocks in the list. The idea behind this mutex is to be able
to release log_sys.mutex during mtr_commit and still ensure that to release log_sys.mutex during mtr_commit and still ensure that
insertions in the flush_list happen in the LSN order. */ insertions in the flush_list happen in the LSN order. */
MY_ALIGNED(CPU_LEVEL1_DCACHE_LINESIZE) mysql_mutex_t flush_order_mutex; alignas(CPU_LEVEL1_DCACHE_LINESIZE) mysql_mutex_t flush_order_mutex;
/** log_buffer, append data here */ /** log_buffer, append data here */
byte *buf; byte *buf;
/** log_buffer, writing data to file from this buffer. /** log_buffer, writing data to file from this buffer.
......
...@@ -55,7 +55,7 @@ Created 10/10/1995 Heikki Tuuri ...@@ -55,7 +55,7 @@ Created 10/10/1995 Heikki Tuuri
/** Simple non-atomic counter /** Simple non-atomic counter
@tparam Type the integer type of the counter */ @tparam Type the integer type of the counter */
template <typename Type> template <typename Type>
struct MY_ALIGNED(CPU_LEVEL1_DCACHE_LINESIZE) simple_counter struct alignas(CPU_LEVEL1_DCACHE_LINESIZE) simple_counter
{ {
/** Increment the counter */ /** Increment the counter */
Type inc() { return add(1); } Type inc() { return add(1); }
......
...@@ -125,7 +125,7 @@ class purge_sys_t ...@@ -125,7 +125,7 @@ class purge_sys_t
{ {
public: public:
/** latch protecting view, m_enabled */ /** latch protecting view, m_enabled */
MY_ALIGNED(CACHE_LINE_SIZE) mutable srw_spin_lock latch; alignas(CPU_LEVEL1_DCACHE_LINESIZE) mutable srw_spin_lock latch;
private: private:
/** The purge will not remove undo logs which are >= this view */ /** The purge will not remove undo logs which are >= this view */
ReadViewBase view; ReadViewBase view;
......
...@@ -81,7 +81,7 @@ void trx_temp_rseg_create(); ...@@ -81,7 +81,7 @@ void trx_temp_rseg_create();
#define TRX_RSEG_MAX_N_TRXS (TRX_RSEG_N_SLOTS / 2) #define TRX_RSEG_MAX_N_TRXS (TRX_RSEG_N_SLOTS / 2)
/** The rollback segment memory object */ /** The rollback segment memory object */
struct MY_ALIGNED(CPU_LEVEL1_DCACHE_LINESIZE) trx_rseg_t struct alignas(CPU_LEVEL1_DCACHE_LINESIZE) trx_rseg_t
{ {
/** tablespace containing the rollback segment; constant after init() */ /** tablespace containing the rollback segment; constant after init() */
fil_space_t *space; fil_space_t *space;
......
...@@ -830,8 +830,8 @@ class thread_safe_trx_ilist_t ...@@ -830,8 +830,8 @@ class thread_safe_trx_ilist_t
void unfreeze() const { mysql_mutex_unlock(&mutex); } void unfreeze() const { mysql_mutex_unlock(&mutex); }
private: private:
alignas(CACHE_LINE_SIZE) mutable mysql_mutex_t mutex; alignas(CPU_LEVEL1_DCACHE_LINESIZE) mutable mysql_mutex_t mutex;
alignas(CACHE_LINE_SIZE) ilist<trx_t> trx_list; alignas(CPU_LEVEL1_DCACHE_LINESIZE) ilist<trx_t> trx_list;
}; };
/** The transaction system central memory data structure. */ /** The transaction system central memory data structure. */
...@@ -841,7 +841,7 @@ class trx_sys_t ...@@ -841,7 +841,7 @@ class trx_sys_t
The smallest number not yet assigned as a transaction id or transaction The smallest number not yet assigned as a transaction id or transaction
number. Accessed and updated with atomic operations. number. Accessed and updated with atomic operations.
*/ */
MY_ALIGNED(CACHE_LINE_SIZE) Atomic_counter<trx_id_t> m_max_trx_id; alignas(CPU_LEVEL1_DCACHE_LINESIZE) Atomic_counter<trx_id_t> m_max_trx_id;
/** /**
...@@ -852,7 +852,8 @@ class trx_sys_t ...@@ -852,7 +852,8 @@ class trx_sys_t
@sa assign_new_trx_no() @sa assign_new_trx_no()
@sa snapshot_ids() @sa snapshot_ids()
*/ */
MY_ALIGNED(CACHE_LINE_SIZE) std::atomic<trx_id_t> m_rw_trx_hash_version; alignas(CPU_LEVEL1_DCACHE_LINESIZE)
std::atomic<trx_id_t> m_rw_trx_hash_version;
bool m_initialised; bool m_initialised;
...@@ -872,7 +873,7 @@ class trx_sys_t ...@@ -872,7 +873,7 @@ class trx_sys_t
Works faster when it is on it's own cache line (tested). Works faster when it is on it's own cache line (tested).
*/ */
MY_ALIGNED(CACHE_LINE_SIZE) rw_trx_hash_t rw_trx_hash; alignas(CPU_LEVEL1_DCACHE_LINESIZE) rw_trx_hash_t rw_trx_hash;
#ifdef WITH_WSREP #ifdef WITH_WSREP
......
/***************************************************************************** /*****************************************************************************
Copyright (c) 2012, 2015, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, 2015, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2017, 2019, MariaDB Corporation. Copyright (c) 2017, 2022, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software the terms of the GNU General Public License as published by the Free Software
...@@ -31,13 +31,6 @@ Created 2012/04/12 by Sunny Bains ...@@ -31,13 +31,6 @@ Created 2012/04/12 by Sunny Bains
#include "os0thread.h" #include "os0thread.h"
#include "my_rdtsc.h" #include "my_rdtsc.h"
/** CPU cache line size */
#ifdef CPU_LEVEL1_DCACHE_LINESIZE
# define CACHE_LINE_SIZE CPU_LEVEL1_DCACHE_LINESIZE
#else
# error CPU_LEVEL1_DCACHE_LINESIZE is undefined
#endif /* CPU_LEVEL1_DCACHE_LINESIZE */
/** Use the result of my_timer_cycles(), which mainly uses RDTSC for cycles /** Use the result of my_timer_cycles(), which mainly uses RDTSC for cycles
as a random value. See the comments for my_timer_cycles() */ as a random value. See the comments for my_timer_cycles() */
/** @return result from RDTSC or similar functions. */ /** @return result from RDTSC or similar functions. */
...@@ -71,19 +64,18 @@ be zero-initialized by the run-time environment. ...@@ -71,19 +64,18 @@ be zero-initialized by the run-time environment.
@see srv_stats */ @see srv_stats */
template <typename Type> template <typename Type>
struct ib_atomic_counter_element_t { struct ib_atomic_counter_element_t {
MY_ALIGNED(CACHE_LINE_SIZE) Atomic_relaxed<Type> value; alignas(CPU_LEVEL1_DCACHE_LINESIZE) Atomic_relaxed<Type> value;
}; };
template <typename Type> template <typename Type>
struct ib_counter_element_t { struct ib_counter_element_t {
MY_ALIGNED(CACHE_LINE_SIZE) Type value; alignas(CPU_LEVEL1_DCACHE_LINESIZE) Type value;
}; };
/** Class for using fuzzy counters. The counter is multi-instance relaxed atomic /** Class for using fuzzy counters. The counter is multi-instance relaxed atomic
so the results are not guaranteed to be 100% accurate but close so the results are not guaranteed to be 100% accurate but close
enough. Creates an array of counters and separates each element by the enough. */
CACHE_LINE_SIZE bytes */
template <typename Type, template <typename Type,
template <typename T> class Element = ib_atomic_counter_element_t, template <typename T> class Element = ib_atomic_counter_element_t,
int N = 128 > int N = 128 >
...@@ -123,9 +115,9 @@ struct ib_counter_t { ...@@ -123,9 +115,9 @@ struct ib_counter_t {
} }
private: private:
static_assert(sizeof(Element<Type>) == CACHE_LINE_SIZE, ""); static_assert(sizeof(Element<Type>) == CPU_LEVEL1_DCACHE_LINESIZE, "");
/** Array of counter elements */ /** Array of counter elements */
MY_ALIGNED(CACHE_LINE_SIZE) Element<Type> m_counter[N]; alignas(CPU_LEVEL1_DCACHE_LINESIZE) Element<Type> m_counter[N];
}; };
#endif /* ut0counter_h */ #endif /* ut0counter_h */
/* Copyright (C) 2019, 2021, MariaDB Corporation. /* Copyright (C) 2019, 2022, MariaDB Corporation.
This program is free software; you can redistribute itand /or modify This program is free software; you can redistribute itand /or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -128,7 +128,7 @@ enum worker_wake_reason ...@@ -128,7 +128,7 @@ enum worker_wake_reason
/* A per-worker thread structure.*/ /* A per-worker thread structure.*/
struct MY_ALIGNED(CPU_LEVEL1_DCACHE_LINESIZE) worker_data struct alignas(CPU_LEVEL1_DCACHE_LINESIZE) worker_data
{ {
/** Condition variable to wakeup this worker.*/ /** Condition variable to wakeup this worker.*/
std::condition_variable m_cv; std::condition_variable m_cv;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment