片上内存使用分析与性能优化
本节介绍如何确定片上内存的使用方式以提高程序性能。
- 运行目标程序,执行如下命令观察内存使用情况。
- 执行如下命令,查看内存的增长及SWAP使用情况,此时查看的MEM包含片上内存和DDR,无法明确不同NUMA对应的是片上内存还是DDR。
回显如下。
total used free shared buff/cache available Mem: 567Gi 93Gi 425Gi 156Gi 67Gi 473Gi Swap: 0B 0B 0B
- 执行如下命令,可以看到具体的NUMA node的内存使用情况,
如下图所示1-15 NUMA为DDR,每个NUMA 32G;16 -31 NUMA 为片上内存,每个NUMA 4G
... node 14 cpus:532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 node 14 size:32250 MB node 14 free:28237 MB node 15 cpus:570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 node 15 size:32231 MB node 15 free:28098 MB node 16 cpus: node 16 size:4096 MB node 16 free:4085 MB node 17 cpus: node 17 size:4096 MB node 17 free:4089 MB node 18 cpus: node 18 size:4096 MB node 18 free:4090 MB
- 执行如下命令,查看内存的增长及SWAP使用情况,此时查看的MEM包含片上内存和DDR,无法明确不同NUMA对应的是片上内存还是DDR。
- 确定片上内存的使用方式。
- 如果整体使用内存量小于目标大小(平均单NUMA使用小于4GB),则可以直接使用numactl -m指定片上内存。
- 如果整体使用内存大于目标大小(平均单NUMA使用大于4GB),则需要选择采用如下方式之一申请内存:1. 使用cache模式; 2. 使用numactl -P指定片上内存,超出部分会分配在DDR内存; 3. 修改代码使用上文提到的方法二:使用KUPL接口申请片上内存或方法三:使用memkind接口申请片上内存。
父主题: 应用分析