Skip to main content

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

1. 初始化与设备管理 (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写入透传

2. 上下文管理 (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. 流管理 (3个)

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

4. 显存分配与释放 (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异步释放显存更新使用记录

5. 显存拷贝 (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异步预取内存透传

6. 显存设置 (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. 内核启动 (7个)

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

8. 事件管理 (2个)

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

9. 模块加载 (11个)

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

10. 虚拟内存管理 (5个)

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

11. 内存池管理 (14个)

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

12. 指针属性 (6个)

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

13. 外部资源互操作 (8个)

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

14. 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销毁图透传

15. 其他 (4个)

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

16. 统计汇总

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

核心劫持说明

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

17. 参考资料