提高Linux系统性能加速网络应用程序

豆豆网   技术应用频道   2006年11月19日  【字号: 收藏本文

本文详细介绍提高Linux系统性能加速网络应用程序

  因此,我们可以将 TCP 窗口设置为 BDP 或 1.25MB。但是在 Linux 2.6 上默认的 TCP 窗口大小是 110KB,这会将连接的带宽限制为 2.2MBps,计算方法如下:

  throughput = window_size / RTT

  110KB / 0.050 = 2.2MBps

  如果使用上面计算的窗口大小,我们得到的带宽就是 12.5MBps,计算方法如下:

  625KB / 0.050 = 12.5MBps

  差别的确很大,并且可以为 socket 提供更大的吞吐量。因此现在您就知道如何为您的 socket 计算最优的缓冲区大小了。但是又该如何来改变呢?

  解决方案

  Sockets API 提供了几个 socket 选项,其中两个可以用于修改 socket 的发送和接收缓冲区的大小。清单 2 展示了如何使用 SO_SNDBUF 和 SO_RCVBUF 选项来调整发送和接收缓冲区的大小。

  注意:尽管 socket 缓冲区的大小确定了通告 TCP 窗口的大小,但是 TCP 还在通告窗口内维护了一个拥塞窗口。因此,由于这个拥塞窗口的存在,给定的 socket 可能永远都不会利用最大的通告窗口。

  int ret, sock, sock_buf_size;
sock = socket( AF_INET, SOCK_STREAM, 0 );
sock_buf_size = BDP;
ret = setsockopt( sock, SOL_SOCKET, SO_SNDBUF,
          (char *)&sock_buf_size, sizeof(sock_buf_size) );
ret = setsockopt( sock, SOL_SOCKET, SO_RCVBUF,
          (char *)&sock_buf_size, sizeof(sock_buf_size) );

  清单 2. 手动设置发送和接收 socket 缓冲区大小

  在 Linux 2.6 内核中,发送缓冲区的大小是由调用用户来定义的,但是接收缓冲区会自动加倍。您可以进行 getsockopt 调用来验证每个缓冲区的大小。

责编:豆豆技术应用

正在加载评论...