提高 Linux上socket 性能的技巧 最小化系统调用的负载

运维 系统运维
如何提高Linux上socket的性能,从而加速网络应用程序,你可以通过使用API来开发客户机和服务器之间的应用程序。本文分节介绍了Linux上提高socket性能的技巧。

  本文内容包括Linux下对于 Sockets API 的使用、两个可以提高性能的 socket 选项以及 GNU/Linux 优化。为了能够开发性能卓越的应用程序,请遵循以下技巧:最小化报文传输的延时;最小化系统调用的负载;为 Bandwidth Delay Product 调节 TCP 窗口;动态优化 GNU/Linux TCP/IP 栈。

  最小化系统调用的负载

  任何时候通过一个 socket 来读写数据时,您都是在使用一个系统调用(system call)。这个调用(例如 read 或 write)跨越了用户空间应用程序与内核的边界。另外,在进入内核之前,您的调用会通过 C 库来进入内核中的一个通用函数(system_call())。从 system_call() 中,这个调用会进入文件系统层,内核会在这儿确定正在处理的是哪种类型的设备。最后,调用会进入 socket 层,数据就是在这里进行读取或进行排队从而通过 socket 进行传输的(这涉及数据的副本)。

  这个过程说明系统调用不仅仅是在应用程序和内核中进行操作的,而且还要经过应用程序和内核中的很多层次。这个过程耗费的资源很高,因此调用次数越多,通过这个调用链进行的工作所需要的时间就越长,应用程序的性能也就越低。

  由于我们无法避免这些系统调用,因此惟一的选择是最小化使用这些调用的次数。幸运的是,我们可以对这个过程进行控制。

  解决方案

  在将数据写入一个 socket 时,尽量一次写入所有的数据,而不是执行多次写数据的操作。对于读操作来说,最好传入可以支持的最大缓冲区,因为如果没有足够多的数据,内核也会试图填充整个缓冲区(另外还需要保持 TCP 的通告窗口为打开状态)。这样,您就可以最小化调用的次数,并可以实现更好的整体性能。

使用 Sockets API,我们可以开发客户机和服务器应用程序,它们可以在本地网络上进行通信,也可以通过 Internet 在全球范围内进行通信。与其他 API 一样,您可以通过一些方法使用 Sockets API,从而提高 Socket 性能,或者限制 Socket 的性能。

【编辑推荐】

  1. 2.1.3 Socket服务器
  2. TCP Socket之linux实现
  3. Linux操作系统下Socket编程地址结构介绍
  4. 16.5.4 socket编程实例(2)
  5. 16.5.4 socket编程实例(1)

 

责任编辑:zhaolei 来源: 网络转载
相关推荐

2011-01-18 10:35:02

Linuxsocket性能

2011-01-18 13:42:18

Linuxsocket性能

2011-01-18 11:50:51

Linuxsocket性能

2011-01-19 14:40:45

Thunderbird

2021-04-13 16:00:54

加密货币数据货币

2013-05-31 09:26:11

云宕机SLA云应用弹性

2015-09-18 09:23:34

云APIAPI升级云服务中断

2009-07-02 17:59:51

2009-08-14 10:35:25

C#最小化编写

2017-11-06 13:25:25

MySQL数据库技巧

2015-10-29 10:09:57

混合云影子IT SaaS

2009-12-23 17:07:37

WPF性能

2023-04-03 10:20:16

JavaScript前端Alpine.js

2018-01-15 14:36:34

Linux负载CPU

2022-06-01 08:00:00

开发成本功能

2022-01-09 23:06:39

JavaScript

2023-02-21 14:55:40

React开发技巧

2011-01-05 13:48:55

Linux提高性能

2009-12-24 14:36:15

Linux系统应对短连

2011-01-13 09:44:19

Linuxsudo技巧
点赞
收藏

51CTO技术栈公众号