下载
中文
注册

drvHdcMallocEx

函数功能

申请快速通道大页内存。

快速通道内存分“发送数据内存”“接收数据内存”“发送控制消息内存” “接收控制消息内存”四种,使用快速通道收发数据之前,根据使用场景需要提前申请内存。

函数原型

void *drvHdcMallocEx(enum drvHdcMemType mem_type, void *addr, unsigned int align, unsigned int len, int devid,unsigned int flag)

参数说明

参数名

输入/输出

说明

mem_type

输入

申请的内存类型

类型:drvHdcMemType

addr

输出

申请快速通道内存成功后返回的虚拟地址

指定起始申请地址,从该地址后面找到一个可用页申请。

若传入默认值“NULL”,表示由系统指定。

类型:void *。

align

输入

对齐长度,仅支持4k(host+device)和2M(device侧),当前该参数预留,为后续扩展使用,保持默认值“0”即可。

类型:int。

len

输入

申请内存大小,取值范围:0~512M。

类型:int。

devid

输入

设备的Device ID,取值范围:[0,64)。

类型:int。

flag

输入

内存申请标志,有以下取值:

  • HDC_FLAG_MAP_VA32BIT:DVPP 4G限制内存空间的地址。
  • HDC_FLAG_MAP_HUGE:大页内存
  • 其他:普通内存

类型:int。

返回值说明

返回申请到的内存地址。

约束说明

  • 调用内核函数申请物理内存,连续物理内存不足时会返回失败,如果是指定了DVPP用的4G限制内存范围内的空间申请,超出可能会申请失败,非DVPP请不要指定在该范围。
  • 当通过此接口申请DDR上的大页内存时(默认情况),如果DDR上没有配置足够的大页,会有申请成功但踩页时触发bus error的情况。建议在DDR上配置足够的大页或者限制申请到有足够大页的节点上。
    判断DDR上是否有大页的方法如下:
    1. 执行如下命令查看哪些node属于DDR。

      cat /sys/devices/system/node/has_normal_memory

    2. 查看DDR对应的node是否有足够的大页。

      假设node0为DDR,可通过如下命令查看:

      cat /sys/devices/system/node/node0/meminfo | grep HugePages_Free