UNIX DOMAIN SOCKET效率

关于UNIX DOMAIN SOCKET和普通udp socket的对比

在TX1(4核A57 1.7GHz)的板卡上进行测试,每个包大小设置为1024,全速收发,UDS的速度在90Mbps左右,UDP在120Mbps左右(略有丢包)

CPU占用率,UDS比UDP低10%,但是实际上,如果码率相近时,CPU占用率是差不多的

下面是UDP的CPU占用:

top - 08:44:46 up  3:04,  5 users,  load average: 1.78, 1.70, 1.66
Threads: 195 total,   3 running, 192 sleeping,   0 stopped,   0 zombie
%Cpu(s): 15.4 us, 31.3 sy,  0.0 ni, 51.3 id,  0.0 wa,  0.0 hi,  2.1 si,  0.0 st
KiB Mem :  4078676 total,  3061964 free,   399460 used,   617252 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  3180808 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
1397 root     -88   0  487920 156364   2100 R 65.9  3.8   2:04.03 udp_send
1396 root     -91   0  487920 156364   2100 R 56.3  3.8   1:48.16 udp_recv
1395 root      rt   0  487920 156364   2100 S 38.7  3.8   1:15.88 data_out
1398 root     -81   0  487920 156364   2100 S 29.8  3.8   0:58.27 data_in
  915 nvidia    20   0    9020   3280   2568 S  0.7  0.1   1:25.59 top
    7 root      20   0       0      0      0 S  0.3  0.0   0:43.18 rcu_preempt
  146 root      rt   0       0      0      0 S  0.3  0.0   0:26.44 cfinteractive
  327 systemd+  20   0   77312   1952   1740 S  0.3  0.0   0:06.22 sd-resolve
1393 root      20   0  487920 156364   2100 S  0.3  3.8   0:01.00 test_udp.out
1400 admin     20   0    8932   3304   2632 R  0.3  0.1   0:00.07 top
    1 root      20   0    7044   5452   3524 S  0.0  0.1   0:02.68 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd
    3 root      20   0       0      0      0 S  0.0  0.0   2:52.41 ksoftirqd/0
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_sched
    9 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
   10 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
   11 root      rt   0       0      0      0 S  0.0  0.0   0:00.22 watchdog/0

  

这个是UDS的CPU占用率:

top - 08:45:22 up  3:05,  5 users,  load average: 1.64, 1.68, 1.65
Threads: 195 total,   1 running, 194 sleeping,   0 stopped,   0 zombie
%Cpu(s): 12.9 us, 28.2 sy,  0.0 ni, 58.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  4078676 total,  3061868 free,   399532 used,   617276 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  3180712 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
1406 root     -88   0  487916 156400   2136 S 53.5  3.8   0:05.85 udp_send
1405 root     -91   0  487916 156400   2136 S 41.6  3.8   0:04.57 udp_recv
1407 root     -81   0  487916 156400   2136 S 34.0  3.8   0:03.77 data_in
1404 root      rt   0  487916 156400   2136 S 29.7  3.8   0:03.24 data_out
  915 nvidia    20   0    9020   3280   2568 S  0.7  0.1   1:25.79 top
1402 root      20   0  487916 156400   2136 S  0.7  3.8   0:00.41 test.out
  146 root      rt   0       0      0      0 S  0.3  0.0   0:26.49 cfinteractive
1400 admin     20   0    8932   3304   2632 R  0.3  0.1   0:00.27 top
1403 root      rt   0  487916 156400   2136 S  0.3  3.8   0:00.01 trace_tsk
    1 root      20   0    7044   5452   3524 S  0.0  0.1   0:02.68 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd
    3 root      20   0       0      0      0 S  0.0  0.0   2:52.41 ksoftirqd/0
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
    7 root      20   0       0      0      0 S  0.0  0.0   0:43.20 rcu_preempt
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_sched
    9 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
   10 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
   11 root      rt   0       0      0      0 S  0.0  0.0   0:00.22 watchdog/0
   12 root      rt   0       0      0      0 S  0.0  0.0   0:00.20 watchdog/1
   13 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/1
   14 root      20   0       0      0      0 S  0.0  0.0   0:00.29 ksoftirqd/1
   15 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kworker/1:0
   16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/1:0H
   17 root      rt   0       0      0      0 S  0.0  0.0   0:00.21 watchdog/2
   18 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/2
   19 root      20   0       0      0      0 S  0.0  0.0   0:00.20 ksoftirqd/2
   21 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/2:0H
   22 root      rt   0       0      0      0 S  0.0  0.0   0:00.22 watchdog/3
   23 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/3
   24 root      20   0       0      0      0 S  0.0  0.0   0:00.31 ksoftirqd/3
   26 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/3:0H

  

理论上UDS不经过协议栈,不用计算校验和,但是为什么实际UDP速度还要快一些,那么UDS存在的价值在哪?

原文地址:https://www.cnblogs.com/djw316/p/10187451.html

时间: 2024-08-28 08:56:49

UNIX DOMAIN SOCKET效率的相关文章

【转】PHP实现系统编程(四)--- 本地套接字(Unix Domain Socket)

原文:http://blog.csdn.net/zhang197093/article/details/78143687?locationNum=6&fps=1 -------------------------------------------------------------------------------------------------------------------------------------------------------- Socket API一开始是为了

ndk学习16: unix domain socket

一.UNIX Domain Socket 概念: UNIX Domain Socket是在socket架构上发展起来的用于同一台主机的进程间通讯(IPC) 特点: 1. 它不需要经过网络协议栈,不需要打包拆包.计算校验和.维护序号和应答等 2. 只是将应用层数据从一个进程拷贝到另一个进程. 工作模式: SOCK_DGRAM     类似于UDP SOCK_STREAM    类似于TCP 用途: UNIX Domain Socket可用于两个没有亲缘关系的进程,是全双工的,是目前使用最广泛的IP

由一个简单需求到Linux环境下的syslog、unix domain socket

本文记录了因为一个简单的日志需求,继而对linux环境下syslog.rsyslog.unix domain socket的学习.本文关注使用层面,并不涉及rsyslog的实现原理,感兴趣的读者可以参考rsyslog官网.另外,本文实验的环境实在debian8,如果是其他linux发行版本或者debian的其他版本,可能会稍微有些差异. 需求: 工作中有一个在Linux(debian8)环境下运行的服务器程序,用python语言实现,代码中有不同优先级的日志需要记录,开发的时候都是使用pytho

unix domain socket示例一(SOCK_DGRAM)

unix domain socket 是IPC通信的一种方式,可用于与管理进程间通信,同时由和网络socket统一,所以很好管理,使用还是比较多.现举个例子: server.c 1 #include <stdio.h> 2 #include <string.h> 3 #include <unistd.h> 4 #include <stdlib.h> 5 #include <sys/types.h> 6 #include <sys/socke

UNIX Domain Socket IPC

目录 目录 概述 socket函数使用 struct sockaddr_un socket bind listen accept connect Socket IPC 实例 server client 运行结果 概述 socket API原本是为网络通讯设计的,但是后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket. 虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于

问题解决:psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket &quot;/var/run/postgresql/.s.PGSQL.5432&quot;?

错误提示: psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? 出现该问题的很多,以下是目前碰到的几种情况,之后碰到继续补充: 1.删除了/tmp路径中的.s.PGSQL.5432 与.s.

[dev][socket] unix domain socket删除socket文件

问题 在使用unix domain socket的时候,bind之后,会在本地路径里 产生一个与path对应的socket文件. 如何正确的在用完socket之后,对其销毁呢? 方案 使用 unlink()函数手工删除. 见: https://stackoverflow.com/questions/34873151/how-can-i-delete-a-unix-domain-socket-file-when-i-exit-my-application syslogd的代码里就是这样干的: ht

Unix domain socket

Unix domain socket 原文:https://www.cnblogs.com/sparkdev/p/8359028.html UNIX Domain Socket是在socket架构上发展起来的用于同一台主机的进程间通讯(IPC),它不需要经过网络协议栈,不需要打包拆包.计算校验和.维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程.UNIX Domain Socket有SOCK_DGRAM或SOCK_STREAM两种工作模式,类似于UDP和TCP,但是面向消息的UNIX

redis性能测试tcp socket and unix domain

UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket.虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包.计算校验和.维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程.UNIX域套接字与TCP套接字相比较,在同一台主