Bug #64150 | performance drops with glibc 2.13 when threads are created | ||
---|---|---|---|
Submitted: | 27 Jan 2012 17:46 | Modified: | 26 Mar 2012 18:09 |
Reporter: | Mark Callaghan | Email Updates: | |
Status: | Can't repeat | Impact on me: | |
Category: | MySQL Server: DML | Severity: | S5 (Performance) |
Version: | 5.1.52 | OS: | Any |
Assigned to: | CPU Architecture: | Any | |
Tags: | glibc, performance |
[27 Jan 2012 17:46]
Mark Callaghan
[27 Jan 2012 22:33]
Davi Arnaut
Isn't malloc going to use mmap anyway?
[27 Jan 2012 22:44]
Davi Arnaut
Also, I'm not sure about the relation between jemalloc and the thread stack. When you use jemalloc, somehow glibc does not use mmap anymore?
[13 Mar 2012 20:01]
Mark Callaghan
Reproduction can be done with one sysbench table. Invoke this as: while :; do bash script.sh 128 10 ; done ------- # a test table with 1 row is sufficient nt=$1 s=$2 for i in $( seq 1 $np ); do /data/sysbench.new --batch --batch-delay=5 --test=oltp --mysql-db=test \ --oltp-table-size=1 --max-time=$s --max-requests=0 \ --mysql-table-engine=innodb --db-ps-mode=disable \ --mysql-engine-trx=yes --oltp-table-name=sbtest1 --oltp-read-only \ --oltp-skip-trx --oltp-test-mode=simple --oltp-point-select-all-cols \ --oltp-dist-type=uniform --oltp-range-size=100 \ --num-threads=$nt --seed-rng=$i run > o.1 grep transactions: o.1 ---- The command line requires my branch of sysbench which has the benefit of doing per-interval performance metrics -- https://code.launchpad.net/~mdcallag/sysbench/0.4-dev ---- Example output when there isn't a problem: # while :; do bash b.sh 128 1 10 ; done [1331697100] transactions: 723153 (72296.59 per sec.) [1331697112] transactions: 737465 (73724.95 per sec.) [1331697123] transactions: 716812 (71662.84 per sec.) [1331697135] transactions: 723451 (72324.46 per sec.) [1331697146] transactions: 745423 (74515.82 per sec.) [1331697158] transactions: 735637 (73545.78 per sec.) [1331697170] transactions: 732437 (73224.99 per sec.) [1331697181] transactions: 713139 (71296.18 per sec.) [1331697193] transactions: 712114 (71192.17 per sec.) [1331697204] transactions: 710616 (71042.40 per sec.) [1331697216] transactions: 717644 (71742.54 per sec.) [1331697228] transactions: 718576 (71835.66 per sec.) [1331697239] transactions: 721236 (72101.95 per sec.) [1331697251] transactions: 718568 (71836.64 per sec.) [1331697262] transactions: 746296 (74609.48 per sec.) [1331697274] transactions: 718190 (71799.78 per sec.) [1331697286] transactions: 720597 (72040.34 per sec.) And an example where the problem occurs. It takes ~5000 thread create/destroy operations to occur: [1331697551] transactions: 1499999 (149966.41 per sec.) [1331697562] transactions: 1528138 (152777.01 per sec.) [1331697574] transactions: 1372559 (137229.92 per sec.) [1331697585] transactions: 1298904 (129859.70 per sec.) [1331697597] transactions: 408541 (40843.22 per sec.) [1331697609] transactions: 457317 (45717.58 per sec.) [1331697620] transactions: 368105 (36796.29 per sec.) [1331697632] transactions: 355782 (35568.13 per sec.)
[13 Mar 2012 20:02]
Mark Callaghan
my.cnf during the test [mysqld] innodb_buffer_pool_size=16G innodb_log_file_size=1900M innodb_flush_log_at_trx_commit=1 innodb_doublewrite=1 innodb_flush_method=O_DIRECT innodb_thread_concurrency=0 innodb_max_dirty_pages_pct=80 innodb_file_format=barracuda innodb_file_per_table max_connections=2000 table_cache=2000 key_buffer_size=200M innodb_io_capacity=1000 log_bin sync_binlog=1 query_cache_size=0 query_cache_type=0 innodb_thread_concurrency=0 thread_cache_size=0
[26 Mar 2012 18:09]
Sveta Smirnova
We could not reproduce this on our side after weeks of testing, so closing as "Can't repeat".