Details
-
Bug
-
Status: Closed (View Workflow)
-
Minor
-
Resolution: Fixed
-
10.2.2, 10.3.0, 10.4.0, 10.5.0, 10.5.3
Description
Default implementation of InnoDB logger class uses std::stringstream inside.
STL streams are famous for generation lots of bloat code after compiling.
Usage of logger class in hot functions, which is typical for error handling,
generates a lot of code which is inlined right in the invocation point, and
99.99% of time this code isn't used. This leads to a huge instruction cache
waste.
We can point the compiler at the fact, that any logging is an expremely rare
operation for database, so the compiler can reduce unnecessary inlining and
pessimize 'cold' logging branches, meanwhile optimize really hot branches
and reduce intruction case misses.
Profit: in our tests, this optimization results in up to 2% performance
increase in sysbench OLTP PS/RO/RW tests.
Suggested fix:
Mark all public logger method and all derived class contructors with 'cold'
and 'noinline' attibutes.
Attachments
Issue Links
- causes
-
MDEV-23183 Infinite loop on page_validate() on corrupted page
- Closed
- relates to
-
MDEV-24973 Performance schema duplicates rarely executed code for mutex operations
- Closed
-
MDEV-35498 InnoDB logger class causes significant code bloat
- Open