srv_pass_corrupt_table can share the cache line with row counters

Bug #1125259 reported by Alexey Kopytov on 2013-02-14
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Percona Server moved to
Fix Released
Alexey Kopytov
Won't Fix
Fix Released
Alexey Kopytov

Bug Description

The way srv_pass_corrupt_table (and a few other options) is declared in srv0srv.c may become an infinite source of false sharing due to their proximity to row counters.

UNIV_INTERN ulint srv_expand_import = 0; /* 0:disable 1:enable */
UNIV_INTERN ulint srv_pass_corrupt_table = 0; /* 0:disable 1:enable */

UNIV_INTERN ulint srv_dict_size_limit = 0;

UNIV_INTERN ulint srv_lazy_drop_table = 0;


UNIV_INTERN ulint srv_n_rows_inserted = 0;
UNIV_INTERN ulint srv_n_rows_updated = 0;
UNIV_INTERN ulint srv_n_rows_deleted = 0;
UNIV_INTERN ulint srv_n_rows_read = 0;

Whether it shares the cache line with some or all of those counters depends on their addresses in the data segment. Which explain varied regressions we have observed in sysbench across revisions that do not touch anything relevant.

Related branches

Since srv_pass_corrupt_table is already merged to 5.6, opening this bug there in order not to lose it.

Alexey Kopytov (akopytov) wrote :

Row counters are implemented in a completely different way in 5.6, so the problem does not exist there.

Percona now uses JIRA for bug reports so this bug report is migrated to:

To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers