常见的性能指标
- 通用带宽
表示链路的最大传输速率,单位为b/s(比特/秒)
- 吞吐量
表示单位时间内成功传输的数据量,单位通常为b/s(比特/秒)或者B/s(字节/秒)。吞吐量受带宽的限制
- 延时
可以表示建立连接需要的时间(TCP握手延时),或者一个数据包往返所需要的时间(如RTT)
- PPS(Packet Per Second)
表示以网络包为单位的传输速率,通常用来评估网络的转发能力
- 网络的可用性
能否正常通信
- 并发连接数
TCP连接数量
- 丢包率
- 重传率
I/O事件通知的方式
- 水平触发
应用程序可以随时检查文件描述符的状态,然后再根据状态,进行I.O操作
- 边缘触发
只在文件描述符的状态发生改变(也就是I/O请求达到)时,才发送一次通知.这个时候,应用程序需要尽可能多地执行I/O,指导无法继续读写,才可以停止.如果I/O没执行完,或者因为某种原因没来得及处理,那么这次通知也就丢失了
I/O多路复用的方法
使用非阻塞I/O和水平触发通知,比如使用select或者poll
select和poll需要从文件描述符列表中,找出哪些可以执行I/O,然后进行真正的网络I/O,然后进行真正的网络I/O读写.由于I/O是非阻塞的,一个线程中就可以同时监控一批套接字的文件描述符
select和poll的一些限制
select使用固定长度的位相量,表示文件描述符的集合,因此会有最大描述符数量的限制,在32位系统中,默认限制是1024.同时,在select内部,检查套接字状态用的是轮询的方法,再加上应用软件使用时的轮询,就变成了一个O(N^2)的关系.
poll改进了select的表示方法,换出了一个没有固定长度的数组,这样就没有了最大描述符数量的限制.但应用程序依然需要对描述符进行轮询,这样就是O(N)的关系
select和poll都需要把文件描述符的集合,从用户空间传入内核空间,由内核修改后,再传出到用户空间,增加了处理成本
使用非阻塞I/O和边缘触发通知,如epoll
epoll使用红黑树,在内核中管理文件描述符的集合,这样就减少了从内核态切换到用户态的成本
epoll使用事件驱动的机制,只关注有I/O时间发生的文件描述符,不需要轮询扫描整个集合
网友评论