共享内存

2019年12月2日Linux开发手记

試著忘記壹切 提交于 2019-12-06 08:51:00
开始学习在Linux下视频源捕获驱动框架,也就是V4L2(video4linux),本次关于v4l2的知识准备主要在于其的官方例程,理解官方例程也就差不多掌握了v4l2的基本内容。例程在: http://blog.chinaunix.net/uid-23983143-id-3351976.html 知识准备: v42视频编程的流程和对文件操作并没有什么本质的不同,大概的流程如下 1.打开视频设备(通常是/dev/video0) 2.获得设备信息。 3.根据需要更改设备的相关设置。 4.获得采集到的图像数据(在这里v4l提供了两种方式,直接通过打开的设备读取数据,使用mmap内存映射的方式获取数据)。 5.对采集到的数据进行操作(如显示到屏幕,图像处理,存储成图片文件)。 6.关闭视频设备。 知道了流程之后,我们就需要根据流程完成相应的函数。 第一步: 那么我们首先完成第1步打开视频设备,需要完成int v4l_open(char *, v4l_device *); 具体的函数如下 #define DEFAULT_DEVICE “/dev/video0” int v4l_open(char *dev , v4l_device *vd) { if(!dev)dev= DEFAULT_DEVICE; if((vd-fd=open(dev,O_RDWR))<0){perror(“v4l

动手学深度学习_2.1_tensor

ε祈祈猫儿з 提交于 2019-12-06 04:31:18
数据操作 1 import torch 2 3 torch.manual_seed(0) 4 torch.cuda.manual_seed(0) 5 print(torch.__version__) # 1.3.1 创建tensor 1 # 创建一个5x3的未初始化的tensor 2 x = torch.empty(5, 3) 3 print(x) 4 5 # tensor([[1.3563e-19, 1.3563e-19, 7.9717e-10], 6 # [5.8270e-10, 5.8270e-10, 4.9153e-14], 7 # [1.3563e-19, 1.8578e-01, 3.9157e-02], 8 # [4.7429e+30, 2.2639e+35, 1.8971e+31], 9 # [1.4587e-19, 1.1703e-19, 1.5637e-01]]) # 随机初始化的tensor x = torch.rand(5, 3) print(x) # tensor([[0.4963, 0.7682, 0.0885], # [0.1320, 0.3074, 0.6341], # [0.4901, 0.8964, 0.4556], # [0.6323, 0.3489, 0.4017], # [0.0223, 0.1689, 0.2939]]) #

PGI 用户手册之 Site-Specific Customization of the Compilers

时光怂恿深爱的人放手 提交于 2019-12-06 04:19:11
翻译自 PGI Compiler User's Guide 1.6. 使用PGI编译器进行并行编程 PGI编译器支持多种样式的并行编程: 使用pgf77,pgf95,pgfortran,pgcc或pgc +++的-⁠Mconcur选项的 自动共享内存并行程序(Automatic shared-memory parallel programs )的 编译。此类并行程序可以在共享内存并行(shared-memory parallel,SMP)系统上运行,例如双核或多处理器工作站。 使用pgf77,pgf95,pgfortran,pgcc或pgc +++的-⁠mp选项 的 OpenMP共享内存并行程序 的编译。这种并行程序可以在SMP系统上运行。使用OpenMP 指令编译的并行程序通常可以在双核工作站或SMP服务器系统上的大量处理器上实现显著的加速。 使用 OpenMP 一节包含用户控制的并行编程的完整说明。 使用基于分布式进程之间通信的MPI消息传递库进行分布式计算。 使用低级模型(例如CUDA Fortran)或高级模型(例如PGI加速器模型或OpenACC)来加速计算,以针对多核GPU或其他附加的加速器为目标。 前两种并行程序统称为SMP并行程序。 在单个硅芯片上,当今的CPU集成了两个或多个完整的处理器内核-功能单元,寄存器,一级缓存,二级缓存等。这些CPU被称为多核处理器

ORA-27102: out of memory

江枫思渺然 提交于 2019-12-06 03:01:05
此种报错一般有两种情况, 1> 数据库sga+pga分配太大,如果是此种情况需要调整新的pfile.ora文件重启启动数据库 2> 另外一种情况就是系统资源足够但是参数做了限制 影响sga分配的参数为cat /etc/sysctl.conf 标记的两个参数 fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 536870912 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 1. kernel.shmmax : 是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值。设置应该足够大,能在一个共享内存段下容纳下整个的 SGA , 设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降。至于导致系统下降的主要原因为在实例启动以及 ServerProcess 创建的时候,

深浅copy

假装没事ソ 提交于 2019-12-05 19:13:12
针对 不可变类型 赋值,浅copy ,深copy 都是相同的,都是 指针的引用,没有开辟 新的内存,完全 共享数据 针对可变类型 赋值是共享内存 数据只有一层时,浅copy,深copy 都是完全开辟不同内存空间, 数据独立 当数据有父子层时,也就是数据嵌套 浅copy ,父层是不共享内存,子层及更深层次数据共享内存 深copy, 父子层完全独立 来源: https://www.cnblogs.com/zuohangyu123/p/11940705.html

分享一个Linux C++消息通信框架TCPSHM

徘徊边缘 提交于 2019-12-05 15:31:22
由于本人从事行业关系,Linux环境下的低延迟通信是我关注的技术之一。要达到极端的低延迟,当然同机器内IPC比网络通信快,而Linux IPC方式中无疑是共享内存延迟最低。不过相对于TCP这种通用的通信方式来说,共享内存缺少了一些控制层的协议,比如进程A和B通过一个基于共享内存的消息队列通信,A很难知道队列另一端的B是否存在,具体的说就是基于共享内存的简单消息队列缺少了连接建立和断开的控制。 另一方面,相对于SHM(共享内存)来说,使用TCP也有些自己的痛点:除了延迟以外,重连恢复是个所有应用场景下都不可避免的问题。我们知道,由于网络问题或进程崩溃,TCP连接断开是很常见的事情,断开前发送方发出的数据可能没有被接收,也可能接收了还没被处理接收方就挂了,所以为了确保不丢失信息,发送方的应用程序需要保存已发送的信息,即使自己并不需要,等收到对方的确认消息才能丢弃。也就是说,一个真正可靠的TCP应用程序需要做很多无关业务的控制层的事情。而这个问题SHM并不存在,只要机器不掉电,程序的崩溃与重启对于SHM是透明的,也就是说崩溃前已写入且未读取的数据还会在那里,程序重启后不需做任何数据重传之类的事情。 于是我想,如果TCP和SHM分别弥补了上述各自的缺点,那么它们使用起来将会及其相似:就像一个带连接属性的持久化消息队列,用户可以像操作一个普通消息队列一样push和pop消息

IPC之共享内存

*爱你&永不变心* 提交于 2019-12-05 14:50:17
在多进程程序中(vfork创建的多进程除外),即使是全局变量也无法共享,各个进程都会保存局部变量或全局变量的副本,供自己使用。 共享内存将文件地址映射到内存中即可让多个进程共享内存中的数据。 内存映射API #include<sys/mman.h> void *mmp(void *addr, size_t len, int prot, int flags, int fd, off_t offset);//调用成功则返回被映射区的起始地址,出错则为MAP_FAILED addr可以指定描述符fd应被映射到的进程内空间的起始地址。它通常被指定为一个空指针,这样告诉内核自己去选择起始地址。无论那种情况,该函数的返回值都是描述符fd所映射到内存区的起始地址。 使用例程 #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/types.h> #include<sys/stat.h> #include<sys/mman.h> #include<fcntl.h> #include<semaphore.h> #define SEM_NAME "mysem" int main(int argc, char *argv[]) { int fd, i, nloop, zero = 0; int *ptr; sem_t

共享内存——如何在本地没有句柄的两个地方互传数据

爷,独闯天下 提交于 2019-12-05 04:00:50
  一直对匿名管道这个名字有着相当的兴趣,然而至今没有完全弄明白匿名管道的原理,可能本人的记忆属于感觉型的,没有经历过的东西印象始终不深,以至于一些技术虽然当时理解了,一段时间之后使大抵的都忘了。 现在有一种更简单,且觉得相当实用的数据传递方法,记录下来以加深记忆。 共享内存   其实微软件的sendmessage、postmessage内部实现也使用了内存共享技术,该技术初衷是用于解决大文件的频繁读写操作,通过创建一个内核对象的方式,将文件直接映射在内存中,并且提交物理内存到该内存空间,如此一来省去了读写的I/O操作,也不需要为文件开辟缓冲区域。多个进程可以打开该文件内核(内存)进行操作。   这里的用法是创建一个文件无关的文件内存映射,来进行数据交换,如此一来有一块内存是共享的,在不同的进程中都可以读写,相当的方便。   与匿名管道类似,没有同步驱动机制。但是这一点可以通过写入窗口句柄之后,再使用sendmessage、postmessge等方式协调的完成整个过程。   贴出部分代码,大家共勉 1.创建部分 HANDLE m_hShareHandle = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,dwMapSize,_T("Share"));//创建一个共享内存 if(m_hShareHandle)

高性能最终一致性框架Ray之基本概念原理

前提是你 提交于 2019-12-04 21:02:22
高性能最终一致性框架Ray之基本概念原理 一、Actor介绍 Actor是一种并发模型,是共享内存并发模型的替代方案。 共享内存模型的缺点: 共享内存模型使用各种各样的锁来解决状态竞争问题,性能低下且让编码变得复杂和容易出错。 共享内存受限于单节点的服务器资源限制。 Actor模型的优点: 线程之间以消息进行通信,消息按顺序单线程处理,不存在状态竞争。 以消息方式通信,可以方便的组建集群。 把State和Behavior绑定,能更好的控制状态。 名词解释: Mailbox:可以理解为先入先出队列,负责接收和缓存送达的消息。 State:状态信息,比如用户的账户余额信息。 Behavior:负责按顺序处理Mailbox中的消息,比如扣款消息、到账消息,查询余额消息等。 二、Orleans介绍 Orleans是.Net基金会维护的一个Actor跨平台开源框架,独创Virtual Actor概念,支持分布式集群。 项目地址: http://dotnet.github.io/orleans/ 有以下优点: 以对象方式访问Actor,符合面向对象的使用习惯。 提出Virtual Actor概念,可以通过ID访问细粒度的Actor,能承载数千万的Actor对象。 支持Stateful,能替代缓存层来对内存状态进行更精确的控制,减少数据库的压力。 高性能,单个Actor能支持10万+的QPS。

Linux命令:ipcs/ipcrm命令

断了今生、忘了曾经 提交于 2019-12-04 15:22:44
ipcs/ipcrm命令 是linux/uinx上提供关于一些进程间通信方式的信息,包括共享内存,消息队列,信号 多进程间通信常用的技术手段包括共享内存、消息队列、信号量等等,Linux系统下自带的ipcs命令是一个极好的工具,可以帮助我们查看当前系统下以上三项的使用情况,从而利于定位多进程通信中出现的通信问题。 ipcs -a命令可以查看当前使用的共享内存、消息队列及信号量所有信息,对于该选项对应的结果,介绍以下几个部分: 1、信号量在创建时分信号量集和信号量的概念,该命令的查询结果中,Semaphore Arrays下面每一行代表一个信号量集,其中perms对应信号量集的权限,nsems对应信号量集中信号量的个数,对于信号量集的创建方法可以查询semctl相关的函数使用方法。 2、对于消息队列Message Queues而言,可以看到msqid对应创建队列时得到的id值,从messages中可以看到当前队列中存在的消息个数,从used_bytes中可以看到当前所有消息占用的字节数,所以单个消息的字节数则为总字节数除以消息数,同时如果消息个数不为零则说明消息队列中的消息没有得到及时处理,可以据此判断是否存在队列阻塞的风险。 1. 命令格式   ipcs [resource-option] [output-format]   ipcs [resource-option] -i id