mysql访问延迟问题分析
问题背景
收到数据库同学的问题排查的请求,
同一个数据中心里,dbproxy到mysql的连接失败率偏高,其tcp connect调用的超时时间是20ms+。
kernel version v4.5
两个重要并且容易混淆的函数:
tcp_v4_rcv
tcp_v4_do_rcv
类似于中断处理的上半部和下半部,
tcp的处理分为了的总入口函数是tcp_v4_rcv
,
而tcp_v4_do_rcv
则是真正处理tcp报文,
并传送到用户空间。
其他的像拥塞控制,乱序调整等都在tcp_v4_do_rcv
之前被做掉了。
bind的port是通过tcp_hashinfo
里的bhash管理的。
跟tcp client的端口号管理有一样。
注:bind 系统调用时,还不会把当前的socket挂载到listen队列上,需要等待listen系统调用。
bind系统调用只是把对应的这个端口給占用上了, 其他程序没发bind。