gpt4 book ai didi

c - jemalloc、mmap 和共享内存?

转载 作者:IT王子 更新时间:2023-10-28 23:31:26 25 4
gpt4 key购买 nike

可以jemalloc修改为从共享内存分配? FreeBSD 函数dallocx()意味着您可以提供一个用于分配的指针,但我没有看到一种明显的方法来告诉 jemalloc 限制来自该内存的 all 分配(也不设置大小,等)。

The dallocx() function causes the memory referenced by ptr to be made available for future allocations.

如果没有,这样的功能需要付出多大的努力?我正在努力寻找可以从我提供的共享内存部分进行分配的现成分配方案。

同样,jemalloc 是否可以配置为从内存的锁定区域分配以防止交换?

请随时向我指出需要修改的相关代码部分并提供任何想法或建议。

我正在探索的想法是——因为您可以创建用于在线程环境中分配的 arenas/heaps,就像 jemalloc 所做的那样以最大程度地减少争用,这个概念似乎可以扩展到在一个共享内存中分配区域多处理环境,即我使用 mmap() 创建 N 个共享内存区域,并且我想利用 jemalloc(或任何分配方案)的强大功能来尽可能高效地分配可能,从那些共享区域之一,以最小的线程争用,即如果线程/进程没有访问相同的共享区域和竞技场,争用的机会是最小的并且 malloc 操作的速度是增加了。

这与使用 malloc() API 的全局池分配不同,因为通常这些需要全局锁来有效地序列化用户空间。我想避免这种情况。

编辑 2:

最好是这样的 api:

// init the alloc context to two shmem pools
ctx1 = alloc_init(shm_region1_ptr);
ctx2 = alloc_init(shm_region2_ptr);

(... bunch of code determines pool 2 should be used, based on some method
of pool selection which can minimize possibility of lock contention
with other processes allocating shmem buffers)

// allocate from pool2
ptr = malloc(ctx2, size)

最佳答案

是的。但当你问这个问题时,情况并非如此。

Jemalloc 4(2015 年 8 月发布)有几个 mallctl对此有用的命名空间;它们允许您指定每个竞技场、特定于应用程序的 block 分配 Hook 。特别是 arena.<i>.chunk_hooks 命名空间和 arenas.extend mallctl选项是有用的。一个 integration test存在演示如何使用此 API。

关于基本原理,我希望了解任何特定内存段的争用位置所需的有效“消息传递”开销与仅争用的开销相似,因为您将降级为争用缓存行来准确更新特定竞技场的“争用”值。

由于 jemalloc 已经采用了多种技术来减少争用,您可以通过使用 opt.narenas 创建额外的竞技场在高度线程化的环境中获得类似的行为。 .这将减少争用,因为更少的线程会被映射到一个 arena,但由于线程是有效的循环,无论如何你都有可能到达热点。

要解决这个问题,您可以进行争用计数和热点检测,只需使用 thread.arena mallctl将线程切换到争用较少的竞技场的接口(interface)。

关于c - jemalloc、mmap 和共享内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30836359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com