Skip to main content

HAMi Core通过LD_PRELOAD机制劫持CUDA Driver API调用,实现显存隔离和算力限制。以下是完整的劫持API列表:

初始化与设备管理 (18个)​

API名称功能说明劫持目的
cuInit初始化CUDA驱动初始化HAMi运行环境
cuDeviceGet获取设备句柄设备虚拟化映射
cuDeviceGetCount获取设备数量返回虚拟设备数量
cuDeviceGetName获取设备名称透传设备信息
cuDeviceGetAttribute获取设备属性修改显存等属性
cuDeviceCanAccessPeer检查P2P访问能力透传
cuDeviceGetP2PAttribute获取P2P属性透传
cuDeviceGetByPCIBusId通过PCI Bus ID获取设备设备映射
cuDeviceGetPCIBusId获取PCI Bus ID透传
cuDeviceGetUuid获取设备UUID透传
cuDeviceGetDefaultMemPool获取默认内存池透传
cuDeviceGetLuid获取设备LUID透传
cuDeviceGetMemPool获取内存池透传
cuDeviceTotalMem_v2获取总显存返回配额限制的显存
cuDriverGetVersion获取驱动版本透传
cuDeviceGetTexture1DLinearMaxWidth获取纹理最大宽度透传
cuDeviceSetMemPool设置内存池透传
cuFlushGPUDirectRDMAWrites刷新RDMA写入透传

上下文管理 (23个)​

API名称功能说明劫持目的
cuDevicePrimaryCtxGetState获取主上下文状态透传
cuDevicePrimaryCtxRetain保持主上下文透传
cuDevicePrimaryCtxSetFlags_v2设置主上下文标志透传
cuDevicePrimaryCtxRelease_v2释放主上下文透传
cuCtxGetDevice获取当前上下文设备返回虚拟设备
cuCtxCreate_v2创建上下文透传
cuCtxCreate_v3创建上下文(v3)透传
cuCtxDestroy_v2销毁上下文透传
cuCtxGetApiVersion获取API版本透传
cuCtxGetCacheConfig获取缓存配置透传
cuCtxGetCurrent获取当前上下文透传
cuCtxGetFlags获取上下文标志透传
cuCtxGetLimit获取上下文限制透传
cuCtxGetSharedMemConfig获取共享内存配置透传
cuCtxGetStreamPriorityRange获取流优先级范围透传
cuCtxPopCurrent_v2弹出当前上下文透传
cuCtxPushCurrent_v2压入当前上下文透传
cuCtxSetCacheConfig设置缓存配置透传
cuCtxSetCurrent设置当前上下文透传
cuCtxSetLimit设置上下文限制透传
cuCtxSetSharedMemConfig设置共享内存配置透传
cuCtxSynchronize同步上下文透传
cuGetExportTable获取导出表透传

流管理 (3个)​

API名称功能说明劫持目的
cuStreamCreate创建流透传
cuStreamDestroy_v2销毁流透传
cuStreamSynchronize同步流透传

显存分配与释放 (18个)​

API名称功能说明劫持目的
cuMemAlloc_v2分配显存检查配额并记录分配
cuMemAllocHost_v2分配主机固定内存检查配额
cuMemAllocManaged分配统一内存检查配额并记录
cuMemAllocPitch_v2分配对齐显存检查配额并记录
cuMemFree_v2释放显存更新使用记录
cuMemFreeHost释放主机内存透传
cuMemHostAlloc分配主机内存检查配额
cuMemHostRegister_v2注册主机内存检查配额
cuMemHostUnregister注销主机内存透传
cuArray3DCreate_v2创建3D数组计算并检查显存
cuArrayCreate_v2创建数组计算并检查显存
cuArrayDestroy销毁数组更新使用记录
cuMipmappedArrayCreate创建多级纹理数组检查配额
cuMipmappedArrayDestroy销毁多级纹理数组透传
cuMemGetInfo_v2获取显存信息返回虚拟显存信息
cuMemGetAddressRange_v2获取地址范围透传
cuMemAllocAsync异步分配显存检查配额并记录
cuMemFreeAsync异步释放显存更新使用记录

显存拷贝 (20个)​

API名称功能说明劫持目的
cuMemcpy显存拷贝透传
cuMemcpyAsync异步显存拷贝透传
cuMemcpyDtoH_v2设备到主机拷贝透传
cuMemcpyHtoD_v2主机到设备拷贝透传
cuMemcpyDtoD_v2设备到设备拷贝透传
cuMemcpyDtoHAsync_v2异步设备到主机透传
cuMemcpyHtoDAsync_v2异步主机到设备透传
cuMemcpyDtoDAsync_v2异步设备到设备透传
cuMemcpyAtoD_v2数组到设备拷贝透传
cuMemcpyDtoA_v2设备到数组拷贝透传
cuMemcpyPeer跨设备拷贝透传
cuMemcpyPeerAsync异步跨设备拷贝透传
cuMemcpy2D_v22D拷贝透传
cuMemcpy2DUnaligned_v22D非对齐拷贝透传
cuMemcpy2DAsync_v2异步2D拷贝透传
cuMemcpy3D_v23D拷贝透传
cuMemcpy3DAsync_v2异步3D拷贝透传
cuMemcpy3DPeer跨设备3D拷贝透传
cuMemcpy3DPeerAsync异步跨设备3D拷贝透传
cuMemPrefetchAsync异步预取内存透传

显存设置 (12个)​

API名称功能说明劫持目的
cuMemsetD8_v2设置8位值透传
cuMemsetD16_v2设置16位值透传
cuMemsetD32_v2设置32位值透传
cuMemsetD8Async异步设置8位值透传
cuMemsetD16Async异步设置16位值透传
cuMemsetD32Async异步设置32位值透传
cuMemsetD2D8_v22D设置8位值透传
cuMemsetD2D16_v22D设置16位值透传
cuMemsetD2D32_v22D设置32位值透传
cuMemsetD2D8Async异步2D设置8位透传
cuMemsetD2D16Async异步2D设置16位透传
cuMemsetD2D32Async异步2D设置32位透传

内核启动 (7个)​

API名称功能说明劫持目的
cuLaunchKernel启动内核算力限制控制
cuLaunchCooperativeKernel启动协作内核算力限制控制
cuFuncSetCacheConfig设置函数缓存配置透传
cuFuncSetSharedMemConfig设置共享内存配置透传
cuFuncGetAttribute获取函数属性透传
cuFuncSetAttribute设置函数属性透传
cuMemAdvise内存建议透传

事件管理 (2个)​

API名称功能说明劫持目的
cuEventCreate创建事件透传
cuEventDestroy_v2销毁事件透传

模块加载 (11个)​

API名称功能说明劫持目的
cuModuleLoad加载模块透传
cuModuleLoadData从数据加载模块透传
cuModuleLoadDataEx扩展加载模块透传
cuModuleLoadFatBinary加载Fat Binary透传
cuModuleGetFunction获取函数透传
cuModuleUnload卸载模块透传
cuModuleGetGlobal_v2获取全局变量透传
cuModuleGetTexRef获取纹理引用透传
cuModuleGetSurfRef获取表面引用透传
cuLinkCreate_v2创建链接透传
cuLinkDestroy销毁链接透传

虚拟内存管理 (5个)​

API名称功能说明劫持目的
cuMemAddressReserve预留地址空间透传
cuMemCreate创建内存对象检查配额并记录
cuMemRelease释放内存对象更新使用记录
cuMemMap映射内存透传
cuMemImportFromShareableHandle导入共享句柄透传

内存池管理 (14个)​

API名称功能说明劫持目的
cuMemHostGetDevicePointer_v2获取设备指针透传
cuMemHostGetFlags获取主机内存标志透传
cuMemPoolTrimTo修剪内存池透传
cuMemPoolSetAttribute设置内存池属性透传
cuMemPoolGetAttribute获取内存池属性透传
cuMemPoolSetAccess设置内存池访问权限透传
cuMemPoolGetAccess获取内存池访问权限透传
cuMemPoolCreate创建内存池透传
cuMemPoolDestroy销毁内存池透传
cuMemAllocFromPoolAsync从池异步分配透传
cuMemPoolExportToShareableHandle导出内存池句柄透传
cuMemPoolImportFromShareableHandle导入内存池句柄透传
cuMemPoolExportPointer导出内存池指针透传
cuMemPoolImportPointer导入内存池指针透传

指针属性 (6个)​

API名称功能说明劫持目的
cuPointerGetAttribute获取指针属性透传
cuPointerGetAttributes获取多个指针属性修改内存类型信息
cuPointerSetAttribute设置指针属性透传
cuMemRangeGetAttribute获取内存范围属性透传
cuMemRangeGetAttributes获取多个范围属性透传
cuIpcCloseMemHandle关闭IPC内存句柄透传

外部资源互操作 (8个)​

API名称功能说明劫持目的
cuImportExternalMemory导入外部内存透传
cuExternalMemoryGetMappedBuffer获取映射缓冲区透传
cuExternalMemoryGetMappedMipmappedArray获取映射纹理数组透传
cuDestroyExternalMemory销毁外部内存透传
cuImportExternalSemaphore导入外部信号量透传
cuSignalExternalSemaphoresAsync异步信号外部信号量透传
cuWaitExternalSemaphoresAsync异步等待外部信号量透传
cuDestroyExternalSemaphore销毁外部信号量透传

CUDA Graph (47个)​

API名称功能说明劫持目的
cuGraphCreate创建图透传
cuGraphAddKernelNode_v2添加内核节点透传
cuGraphKernelNodeGetParams_v2获取内核节点参数透传
cuGraphKernelNodeSetParams_v2设置内核节点参数透传
cuGraphAddMemcpyNode添加拷贝节点透传
cuGraphMemcpyNodeGetParams获取拷贝节点参数透传
cuGraphMemcpyNodeSetParams设置拷贝节点参数透传
cuGraphAddMemsetNode添加设置节点透传
cuGraphMemsetNodeGetParams获取设置节点参数透传
cuGraphMemsetNodeSetParams设置设置节点参数透传
cuGraphAddHostNode添加主机节点透传
cuGraphHostNodeGetParams获取主机节点参数透传
cuGraphHostNodeSetParams设置主机节点参数透传
cuGraphAddChildGraphNode添加子图节点透传
cuGraphChildGraphNodeGetGraph获取子图透传
cuGraphAddEmptyNode添加空节点透传
cuGraphAddEventRecordNode添加事件记录节点透传
cuGraphEventRecordNodeGetEvent获取事件记录节点事件透传
cuGraphEventRecordNodeSetEvent设置事件记录节点事件透传
cuGraphAddEventWaitNode添加事件等待节点透传
cuGraphEventWaitNodeGetEvent获取事件等待节点事件透传
cuGraphEventWaitNodeSetEvent设置事件等待节点事件透传
cuGraphAddExternalSemaphoresSignalNode添加外部信号量信号节点透传
cuGraphExternalSemaphoresSignalNodeGetParams获取外部信号量信号参数透传
cuGraphExternalSemaphoresSignalNodeSetParams设置外部信号量信号参数透传
cuGraphAddExternalSemaphoresWaitNode添加外部信号量等待节点透传
cuGraphExternalSemaphoresWaitNodeGetParams获取外部信号量等待参数透传
cuGraphExternalSemaphoresWaitNodeSetParams设置外部信号量等待参数透传
cuGraphExecExternalSemaphoresSignalNodeSetParams执行外部信号量信号参数设置透传
cuGraphExecExternalSemaphoresWaitNodeSetParams执行外部信号量等待参数设置透传
cuGraphClone克隆图透传
cuGraphNodeFindInClone在克隆中查找节点透传
cuGraphNodeGetType获取节点类型透传
cuGraphGetNodes获取所有节点透传
cuGraphGetRootNodes获取根节点透传
cuGraphGetEdges获取边透传
cuGraphNodeGetDependencies获取节点依赖透传
cuGraphNodeGetDependentNodes获取依赖节点透传
cuGraphAddDependencies添加依赖透传
cuGraphRemoveDependencies移除依赖透传
cuGraphDestroyNode销毁节点透传
cuGraphInstantiate实例化图透传
cuGraphInstantiateWithFlags带标志实例化图透传
cuGraphUpload上传图透传
cuGraphLaunch启动图透传
cuGraphExecDestroy销毁图执行透传
cuGraphDestroy销毁图透传

其他 (4个)​

API名称功能说明劫持目的
cuIpcGetMemHandle获取IPC内存句柄透传
cuIpcOpenMemHandle_v2打开IPC内存句柄透传
cuGetProcAddress获取函数地址劫持动态加载的API
cuGetProcAddress_v2获取函数地址(v2)劫持动态加载的API

统计汇总​

分类API数量核心劫持透传
初始化与设备管理18117
上下文管理23122
流管理303
显存分配与释放18117
显存拷贝20020
显存设置12012
内核启动725
事件管理202
模块加载11011
虚拟内存管理523
内存池管理14014
指针属性615
外部资源互操作808
CUDA Graph47047
其他422
总计19820178

核心劫持说明:

  • 显存管理:所有显存分配/释放API都会检查配额并记录使用情况
  • 算力控制:内核启动API会进行算力限制控制
  • 信息伪装:cuDeviceTotalMem_v2、cuMemGetInfo_v2返回虚拟显存信息
  • 动态劫持:cuGetProcAddress系列确保动态加载的API也被劫持

参考资料​