Q4M - とりあえず pwrite を複数スレッドから呼ぶようにしてみた

とりあえず pwrite を複数スレッドから呼ぶようにしてみた。でもってベンチとろうとしたら perl のテストコードじゃサチってどうしようもなくなっていたので C で書いた。

$ MESSAGES=400000 CONCURRENCY=40 DBI='dbi:mysql:test;mysql_socket=/tmp/mysql51.sock' t/05-multireader.t 
1..4
ok 1
ok 2
ok 3
ok 4


Multireader benchmark result:
    Number of messages: 400000
    Number of readers:  40
    Elapsed:            20.282 seconds
    Throughput:         19721.561 mess./sec.

その間の top はこんな感じ。並走度 2.5 あたりが現在の上限らしい (クライアント数を 40 から 80 に変更してもアイドルが発生する) 。次はやっぱ mmap なんでしょうなぁ。

top - 12:20:02 up 40 days, 19:49,  3 users,  load average: 5.85, 2.64, 1.25
Tasks: 192 total,   4 running, 188 sleeping,   0 stopped,   0 zombie
Cpu(s): 44.4%us, 32.6%sy,  0.0%ni, 20.5%id,  2.0%wa,  0.0%hi,  0.5%si,  0.0%st
Mem:  32967696k total, 32433632k used,   534064k free,   458044k buffers
Swap: 10485752k total,        0k used, 10485752k free, 27667516k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
17786 kazuho    18   0  369m  27m 4960 S  259  0.1   7:58.66 mysqld             
21515 kazuho    15   0 19240 1504 1168 S    2  0.0   0:00.16 05-multireader-    
21536 kazuho    15   0 19244 1504 1168 S    2  0.0   0:00.14 05-multireader-    
21538 kazuho    15   0 19244 1508 1168 S    2  0.0   0:00.17 05-multireader-    
21586 kazuho    15   0 19240 1504 1168 S    2  0.0   0:00.17 05-multireader-    
21513 kazuho    15   0 19244 1504 1168 S    1  0.0   0:00.15 05-multireader-    
21514 kazuho    15   0 19244 1508 1168 S    1  0.0   0:00.13 05-multireader-    
21516 kazuho    15   0 19244 1508 1168 R    1  0.0   0:00.15 05-multireader-    
21517 kazuho    15   0 19244 1504 1168 S    1  0.0   0:00.15 05-multireader-    
21520 kazuho    15   0 19244 1508 1168 S    1  0.0   0:00.16 05-multireader-    
21530 kazuho    15   0 19240 1504 1168 S    1  0.0   0:00.15 05-multireader-    
21531 kazuho    15   0 19240 1504 1168 S    1  0.0   0:00.15 05-multireader-    
21539 kazuho    15   0 19244 1500 1168 S    1  0.0   0:00.15 05-multireader-    
21543 kazuho    15   0 19240 1504 1168 S    1  0.0   0:00.17 05-multireader-    
21544 kazuho    15   0 19240 1504 1168 S    1  0.0   0:00.17 05-multireader-    
21549 kazuho    15   0 19244 1504 1168 R    1  0.0   0:00.15 05-multireader-    
21550 kazuho    15   0 19240 1504 1168 S    1  0.0   0:00.15 05-multireader-    
21552 kazuho    15   0 19240 1504 1168 S    1  0.0   0:00.16 05-multireader-    
21553 kazuho    15   0 19244 1508 1168 S    1  0.0   0:00.16 05-multireader-    
21563 kazuho    15   0 19240 1500 1168 S    1  0.0   0:00.14 05-multireader-    
21565 kazuho    15   0 19244 1504 1168 S    1  0.0   0:00.16 05-multireader-    
21571 kazuho    15   0 19240 1504 1168 S    1  0.0   0:00.16 05-multireader-    
21579 kazuho    15   0 19244 1504 1168 S    1  0.0   0:00.14 05-multireader-    
21580 kazuho    15   0 19240 1504 1168 S    1  0.0   0:00.15 05-multireader-    
21581 kazuho    15   0 19240 1504 1168 S    1  0.0   0:00.15 05-multireader-    
21588 kazuho    15   0 19240 1504 1168 S    1  0.0   0:00.16 05-multireader-    
21589 kazuho    15   0 19240 1500 1168 S    1  0.0   0:00.14 05-multireader-    

13:07追記: むー、どうも pwrite の直列化が律速じゃなかったみたい。結局 --with-mt-pwrite=no してもほとんど変わらない速度が出る。ちなみに --with-sync=no して fsync やめると 30,000 transaction/sec. 近い値が出る。