当前位置:首页 > 内存 > 正文

共享内存key(共享gpu内存怎么利用起来)

  • 内存
  • 2024-08-17 13:25:29
  • 5377

一、linux共享内存使用的过程什么是Linux进程使用共享内存?
1.共享内存
顾名思义,共享内存允许两个相邻进程访问同一逻辑内存。共享内存是在两个正在运行的进程之间共享和传输数据的非常有效的方式。不同进程之间的公共内存通常被分配为同一物理内存段。进程可以将共享内存的同一部分加入地址空间,并且所有进程都可以使用C语言的malloc函数访问共享内存中的地址,就像访问分区内存一样。如果进程将数据写入共享内存,则这些地址会发生变化。立即影响可以访问同一部分公共内存的另一个进程
重要警告:共享内存不提供同步机制。也就是说,在第一进程完成对共享内存的写入之前,现有技术中不存在第二进程不开始写入的机制。到共同的记忆。因此,通常需要使用其他机制来同步访问共享内存,例如上面提到的信号量。
2.共享内存的使用
和信号量一样,Linux也提供了一套使用共享内存的工具,并且共享接口的使用与信号量兼容,并且比信号量简单。在名为sys/shm.h的文件中声明。
函数中,程序必须提供一个关键参数(非零整数),该参数有效地命名共享内存段以供后续使用。调用失败,返回-1。
不合格的进程可以通过该函数的返回值访问相同的内存共享,代表对程序使用的帮助。间接地,程序首先调用shmget函数,提供key,然后系统标识符生成对应的共享内存(shmget函数的返回值)。semget函数返回的信号量标识符。
第二个参数,大小,指定内存共享字节的能力。开放式办公室。参数方式相同。如果您想创建一个在键不存在时具有键的共享内存,您可以使用IPC_CREAT来执行此操作。标准共享内存权限与文件读写权限相同。由创作者的记忆。


二、如何设置LINUX的共享内存我们可以更改shmmax内核参数,使SGA存在于共享内存段中。
这可以通过更改/proc/sys/kernel/shmmax参数来实现。
[root@neirongroot]#echo1073741824>/proc/sys/kernel/shmmax
[root@neirongroot]#more/proc/sys/kernel/shmmax
1073741824这里设置为1G。
如果对shmmax文件进行了更改,系统将在重新启动后重置。通过修改/etc/可以使更改永久化。
将以下行=1073741824添加到文件中。此更改将在系统重新启动后生效。
1.设置SHMMAX。
SHMMAX
参数定义共享内存段的最大大小(以字节为单位)。设置SHMMAX时,请记住SGA的大小应适合共享内存段。SHMMAX设置不足可能会导致以下问题:
ORA-27123:unabletoattachtosharedmemorysegment
您可以通过运行以下命令来确定SHMMAX的值:
#cat/proc/sys/kernel/shmmax
33554432
SHMMAX的默认值为32MB。一般情况下,我使用以下方法之一将SHMMAX参数设置为2GB:
通过直接修改/proc文件系统,可以更改SHMMAX的默认设置,而无需重新启动计算机。我使用的方法是在启动文件/etc/中添加如下命令:
#>echo"2147483648">/proc/sys/kernel/shmmax
也可以使用sysctl命令更改SHMMAX的值:
#=2147483648
最后,您可以通过将此内核参数添加到启动文件/etc/来使此更改永久生效插入:
#echo"=2147483648">>/etc/
2.设置SHMMNI
现在我们来看看SHMMNI参数。该内核参数设置系统范围内共享内存段的最大数量。该参数的默认值为4096。该值已足够,通常不需要更改。
可以通过运行以下命令找到SHMMNI的值:
#cat/proc/sys/kernel/shmmni
4096
3最后:让我们看看SHMALL共享内存内核参数。该参数控制系统一次可以使用的共享内存总量(以页为单位)。简而言之,该参数的值至少应为:
ceil(SHMMAX/PAGE_SIZE)
SHMALL的默认大小为2097152,可以通过以下命令查询:
#cat/proc/sys/kernel/shmall
2097152
SHMALL的默认设置对于我们的Oracle9iRAC安装来说应该足够了。
注:RedHatLinux在i386平台上的页面大小为4096字节。但是,您可以使用Bigpages,它支持配置更大的内存页面大小。