MySQL AIO<br />丹臣/赵林<br />2011/8/16<br />
content<br />aio参数,以及aio线程状态<br />5个os_aio_array_struct结构体,以及初始化<br />aio的消费者-IO线程的启动及运行流程<br />aio的生产者<br />
aio参数<br />一些控制参数:<br />innodb_thread_concurrency=16<br />innodb_read_io_threads=8<br />innodb_write_io_threads=8<br />
查看aio线程状态<br />Show innodb statusG中FILE I/O部份<br />
5个aio arrays的定义<br />
os_aio_array_struct<br />
aio初始化,以及创建I/O线程<br />os_aio_init(io_limit,<br />srv_n_read_io_threads,<br />srv_n_write_io_threads,<br />		    SRV_MAX_N_...
这5个aio arrays数组初始化,请注意这个函数最上面的注解<br />
os_aio_array_create<br /><ul><li> slots指向一个os_aio_slot_t结构体数组,数组大小为n
n_reserved是指这个array中正在使用的slot有多少个
os_aio_slot_struct结构体中的reserved为true时,n_reserved会++1</li></li></ul><li>I/O线程运行主函数<br />
fil_aio_wait函数<br />
os_aio_simulated_handle函数<br />
mutex为什么可以提前释放?<br />
os_aio_write_array<br />一个segment包含很多个slots,这里每个只画了2个,是一个示例.每个segment会有对应的一个IO线程来处理.<br />Segment 2<br />Segment 3<br />几个...
Mutex再次获得,修改slot状态<br />
好处与前提<br />最耗时的os i/o操作,io thread不会持有mutex,减少了mutex争用<br />read/write aio array里存在多个segments,提高了并发<br />os_aio_read_array<...
aio的生产者<br />Fil_io<br />/* Queue the aio request */<br />ret = os_aio(type, mode | wake_later, node->name, node->handle, ...
aio的生产者<br />fio_io调用os_aio函数<br />
os_aio_simulated_wake_handler_thread<br />
Upcoming SlideShare
Loading in...5
×

MySQL aio

2,222

Published on

Published in: Education
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,222
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
70
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

MySQL aio

  1. 1. MySQL AIO<br />丹臣/赵林<br />2011/8/16<br />
  2. 2. content<br />aio参数,以及aio线程状态<br />5个os_aio_array_struct结构体,以及初始化<br />aio的消费者-IO线程的启动及运行流程<br />aio的生产者<br />
  3. 3. aio参数<br />一些控制参数:<br />innodb_thread_concurrency=16<br />innodb_read_io_threads=8<br />innodb_write_io_threads=8<br />
  4. 4. 查看aio线程状态<br />Show innodb statusG中FILE I/O部份<br />
  5. 5. 5个aio arrays的定义<br />
  6. 6. os_aio_array_struct<br />
  7. 7. aio初始化,以及创建I/O线程<br />os_aio_init(io_limit,<br />srv_n_read_io_threads,<br />srv_n_write_io_threads,<br /> SRV_MAX_N_PENDING_SYNC_IOS);<br />/* Create i/o-handler threads: */<br /> for (i = 0; i < srv_n_file_io_threads; i++) {<br /> n[i] = i;<br />os_thread_create(io_handler_thread, n + i, thread_ids + i);<br /> }<br />
  8. 8. 这5个aio arrays数组初始化,请注意这个函数最上面的注解<br />
  9. 9. os_aio_array_create<br /><ul><li> slots指向一个os_aio_slot_t结构体数组,数组大小为n
  10. 10. n_reserved是指这个array中正在使用的slot有多少个
  11. 11. os_aio_slot_struct结构体中的reserved为true时,n_reserved会++1</li></li></ul><li>I/O线程运行主函数<br />
  12. 12. fil_aio_wait函数<br />
  13. 13. os_aio_simulated_handle函数<br />
  14. 14. mutex为什么可以提前释放?<br />
  15. 15. os_aio_write_array<br />一个segment包含很多个slots,这里每个只画了2个,是一个示例.每个segment会有对应的一个IO线程来处理.<br />Segment 2<br />Segment 3<br />几个io线程消费slots,以及连接线程将aio请求放入slots中,每个线程都要去获得os_aio_write_array->mutex,所以这里存在争用,各个线程需要减少持有mutex的时间<br />Segment 4<br />Segment 5<br />
  16. 16. Mutex再次获得,修改slot状态<br />
  17. 17. 好处与前提<br />最耗时的os i/o操作,io thread不会持有mutex,减少了mutex争用<br />read/write aio array里存在多个segments,提高了并发<br />os_aio_read_array<br />os_aio_write_array<br />前提:一个io线程只能操作对应的一个segment,其它io线程无法访问这个segment<br />
  18. 18. aio的生产者<br />Fil_io<br />/* Queue the aio request */<br />ret = os_aio(type, mode | wake_later, node->name, node->handle, buf,offset_low, offset_high, len, node, message);<br />
  19. 19. aio的生产者<br />fio_io调用os_aio函数<br />
  20. 20. os_aio_simulated_wake_handler_thread<br />
  21. 21. About me<br />新浪微博:http://weibo.com/zhaolinjnu<br />个人blog:http://zhaolinjnu.blog.sohu.com/<br />Email: danchen@taobao.com<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×