delphi - 如何将应用程序分配给特定的 NUMA 节点?
问题描述
以下代码仅允许更改当前 NUMA 节点中的关联性。是否有允许我同时指定 NUMA 节点的功能?我宁愿避免使用外部解决方案,例如start /NODE 3 /AFFINITY 1 program.exe
procedure TForm1.FormCreate(Sender: TObject);
var AffinityMask:Cardinal;
begin
AffinityMask:=1;
SetProcessAffinityMask(GetCurrentProcess(),AffinityMask);
end;
解决方案
这在 Microsoft 的NUMA 支持文档中有所介绍:
首先,您需要确定系统中节点的布局。要检索系统中编号最高的节点,请使用该
GetNumaHighestNodeNumber
函数。请注意,此数字不保证等于系统中的节点总数。此外,不保证具有连续编号的节点彼此靠近。要检索系统上的处理器列表,请使用该GetProcessAffinityMask
函数。您可以使用该GetNumaProcessorNode
函数确定列表中每个处理器的节点。或者,要检索节点中所有处理器的列表,请使用该GetNumaNodeProcessorMask
函数。在确定了哪些处理器属于哪些节点之后,您可以优化应用程序的性能。要确保您的进程的所有线程在同一节点上运行,请将该
SetProcessAffinityMask
函数与指定同一节点中的处理器的进程关联掩码一起使用。这提高了线程需要访问相同内存的应用程序的效率。或者,要限制每个节点上的线程数,请使用该SetThreadAffinityMask
函数。
推荐阅读
- javascript - 如何更改更改选择标签上的值
- r - 从 Cronr R 包创建的 Cron 作业停止执行而没有错误消息进行调试
- php - 如何在 PhpWord 中用 templateProcessor 替换页眉/页脚值?
- java - 将 map 传递给 Jackon 的 valueToTree 方法时将 java.sql.Timestamp 转换为 StringNode
- javascript - 无法读取未定义的属性“种类”
- python - 是否可以在滚动条顶部添加文本?
- c# - json反序列化为元素c#返回空值
- amazon-s3 - 基于事件在将文件放入 S3 存储桶时触发和运行气流任务
- c# - System.Text.Json 合并两个对象
- javascript - 线段交点——有时有效,有时无效