jemalloc、mmap 和共享内存?

2024-01-14

Can jemalloc http://www.canonware.com/jemalloc/修改为从共享内存分配? FreeBSD 的功能dallocx() http://www.unix.com/man-page/freebsd/3/dallocx/意味着您可以提供一个用于分配的指针,但我没有看到明显的方法来告诉jemalloc限制all从该内存分配(也不设置大小等)。

The dallocx()函数导致内存引用ptr可用于未来的分配。

如果没有,那么为实现这样的功能付出了多少努力?我正在努力寻找一种现成的分配方案,可以从我提供的共享内存部分进行分配。

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

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

我正在探索的想法是 - 因为您可以创建用于在线程环境中分配的竞技场/堆,如jemalloc确实为了最大限度地减少争用,这个概念似乎可以扩展到在多处理环境中分配共享内存区域,即我使用以下命令创建 N 个共享内存区域mmap(),我想利用jemalloc(或任何分配方案)从这些共享区域之一以最小的线程争用尽可能高效地分配,即,如果线程/进程不访问相同的共享区域和区域,则争用的机会是最小的,并且速度这malloc操作量增加。

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

edit 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对此目的有用的命名空间;它们允许您指定每个竞技场、特定于应用程序的块分配挂钩。特别是,arena.<i>.chunk_hooks http://www.canonware.com/download/jemalloc/jemalloc-latest/doc/jemalloc.html#arena.i.chunk_hooks命名空间和arenas.extend http://www.canonware.com/download/jemalloc/jemalloc-latest/doc/jemalloc.html#arenas.extend mallctl选项是有用的。一个集成测试 https://github.com/jemalloc/jemalloc/blob/master/test/integration/chunk.c存在演示如何使用此 API。

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

由于 jemalloc 已经采用了多种技术来减少争用,因此您可以通过使用以下命令创建额外的区域,从而在高度线程环境中获得类似的行为opt.narenas http://www.canonware.com/download/jemalloc/jemalloc-latest/doc/jemalloc.html#opt.narenas。这会减少争用,因为映射到竞技场的线程会减少,但由于线程实际上是循环的,因此无论如何您都有可能到达热点。

为了解决这个问题,您可以进行争用计数和热点检测,并且只需使用thread.arena http://www.canonware.com/download/jemalloc/jemalloc-latest/doc/jemalloc.html#thread.arena mallctl将线程切换到争用较少的区域的接口。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jemalloc、mmap 和共享内存? 的相关文章

  • DispatcherTimer 未按时执行

    我正在使用 c 中的 DispatchTimer 编写一个时钟应用程序 但由于某些原因 我的时钟似乎时不时地跳过 1 秒 例如 52 秒 gt 54 秒 跳过 53 秒 在我看来 计时器并不是每秒都执行一次 DispatcherTimer
  • MVC 重定向到没有控制器的视图

    希望应该是一个简单的 我创建了一个通用错误视图 当整个站点的操作方法内发生异常时 我想显示该视图 我创建了一个部分页面 所有导航都位于其中 因此我不需要在此视图上使用控制器 那么如何从控制器内的操作方法重定向到它 像这样的东西 HttpPo
  • 更快的算法来计算有多少数字可以被范围内的特定整数整除

    int a b c d 0 cin gt gt a gt gt b gt gt c for int i a i lt b i if i c 0 d cout lt
  • SetWindowsHookEx 函数返回 NULL

    我正在研究 DLL 注入 但收到错误如下 挂接进程失败 87 参数不正确 目标进程和dll都是64位的 注入代码为 BOOL HookInjection TCHAR target TCHAR dll name https msdn micr
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 没有 Unicode 字节顺序标记。无法切换到 Unicode

    我正在使用 XSD 编写 XML 验证器 下面是我所做的 但是当验证器到达该线时while list Read 它给了我错误 没有 Unicode 字节顺序标记 无法切换到 Unicode 有人可以帮我解决吗 public class Va
  • 如何使用汇编获取BIOS时间?

    我正在从头开始实现一个小型操作系统 用于教育目的 现在 我想使用汇编来获取 BIOS 时间 我对此进行了很多搜索 但找不到任何代码示例来执行此操作 如果有人可以提供任何参考或代码示例或与此相关的任何内容 我将非常感激 See 时钟中断 1a
  • 通过引用传递时取消引用指针

    当通过引用传递给函数时取消引用指针时会发生什么 这是一个简单的例子 int returnSame int example return example int main int inum 3 int pinum inum std cout
  • 为什么假设 send 可能返回的数据少于在阻塞套接字上传输的请求数据?

    在流套接字上发送数据的标准方法始终是调用 send 并写入一大块数据 检查返回值以查看是否发送了所有数据 然后再次调用 send 直到整个消息被接受 例如 这是一个常见方案的简单示例 int send all int sock unsign
  • Microsoft.Graph - 如何从具有不同用户名的共享邮箱发送?

    我目前正在将使用 SMTP 的服务代码移植到 Office 365 通过 SMTP 我可以使用 发件人 字段在来自共享收件箱的邮件上设置不同的用户名 同时保留共享电子邮箱地址 这似乎无法通过 Office 365 运行 其工艺流程为 客户填
  • c# 如何生成锦标赛括号 HTML 表

    所以我已经被这个问题困扰了三个星期 但我一生都无法弄清楚 我想做的是使用表格获得这种输出 演示 http www esl world net masters season6 hanover sc2 playoffs rankings htt
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • C# 中处理 SQL 死锁的模式?

    我正在用 C 编写一个访问 SQL Server 2005 数据库的应用程序 该应用程序是数据库密集型的 即使我尝试优化所有访问 设置适当的索引等 我预计迟早会遇到死锁 我知道为什么会发生数据库死锁 但我怀疑我能否在某个时候发布不发生死锁的
  • 是什么原因导致 Linq 错误:此方法无法转换为存储表达式?

    我有一堆具有相同 select 语句的 Linq to Entity 方法 所以我想我会很聪明 并将其分离到它自己的方法中以减少冗余 但是当我尝试运行代码时 我得到了以下内容错误 该方法不能转化为 商店表达式 这是我创建的方法 public
  • asp.net c# 防止在从服务器端代码更改索引时触发 selectedindexchanged 事件

    我在同一个 aspx 页面上有两个下拉列表控件
  • 在 .NET 中记录 StackOverflowException

    最近 我的 NET 应用程序 asp net 网站 中出现了堆栈溢出异常 我之所以知道该异常是因为它出现在我的 EventLog 中 我知道 StackOverflow 异常无法被捕获或处理 但是有没有办法在它杀死您的应用程序之前记录它 我
  • Dynamics Crm:获取状态代码/状态代码映射的元数据

    在 Dynamics CRM 2011 中 在事件实体上 状态原因 选项集 也称为状态代码 与 状态 选项集 也称为状态代码 相关 例如看这个截图 当我使用 API 检索状态原因选项集时 如下所示 RetrieveAttributeRequ
  • 为什么C语言中可以使用多个分号?

    在 C 中我可以执行以下操作 int main printf HELLO WORLD 它有效 这是为什么 我个人的想法 分号是一个 NO OPERATION 来自维基百科 指示符 拥有一大串分号与拥有一个分号并告诉 C 语句已结束具有相同的
  • c# 替代方案中 cfusion_encrypt 中填充的密钥是什么?

    我找到了从这里复制 C 中的 cfusion encrypt 函数的答案 ColdFusion cfusion encrypt 和 cfusion decrypt C 替代方案 https stackoverflow com questio
  • 通过 cmake 链接作为外部项目包含的 opencv 库[重复]

    这个问题在这里已经有答案了 我对 cmake 比较陌生 经过几天的努力无法弄清楚以下事情 我有一个依赖于 opencv 的项目 它本身就是一个 cmake 项目 我想静态链接 opencv 库 我正在做的是我的项目中有一份 opencv 源

随机推荐

  • 如何让 KendoUI Validator 忽略隐藏的表单元素?

    我正在尝试将 KendoUI Validator 与 ASP NET WebForms 项目一起使用 我有一个简单的页面 有许多输入 当然 ASP NET 也添加了一些隐藏的表单元素 我有以下问题 为什么 KendoUI 验证器不忽略隐藏的
  • 实现 JTree 工具提示的最佳方法?

    由于 JTree 和 TreeModel 不直接提供开箱即用的工具提示 您认为为 JTree 提供特定于项目的工具提示的最佳方式是什么 编辑 之后回答我自己的问题 Zarkonnen 感谢 getTooltipText 的想法 我发现了另一
  • C# 5.0 EBNF 语法

    我正在寻找 5 0 版编程语言 C 的 EBNF 语法 这个语法应该是机器可读的 所以我可以用这个 EBNF 语法做一些处理 直到现在我才发现Visual Studio的安装中包含了C 的语言规范文档 PROGRAMFILES x86 Mi
  • 是否可以将 Zeppelin 笔记与 git 集成?

    是否可以将 Zeppelin 笔记与 git 集成 人们可以设置存储库位置 但如何将其设置为远程 git 存储库 不过 此功能可在 Amazon EMR 上使用 是的 这是可能的 我使用以下方式 创建一个 github 存储库并推送所有笔记
  • HighCharts:如何将自定义颜色与渐变相结合

    一段时间以来 我正在玩饼图的着色 或者我得到了没有渐变的自定义颜色 或者带有渐变的默认颜色 我的颜色存储在 php 字段中 我想像这样加载colors 我的代码的实际状态是这样的 它显示带渐变的默认颜色 colors Highcharts
  • 通过 FCM 消息控制台在后台向我的 iOS 应用程序发送静默通知

    我想向我的 iOS 应用程序发送静默通知 为此我已在其中实现了 FCM 当应用程序在后台运行时 当应用程序从 FCM 收到通知时 我需要执行一些操作 为此 执行过程将进入调用的方法 void application UIApplicatio
  • 仅获取容器中 Azure blob 文件的所有名称?

    我想要容器中 Azure Blob 文件中的所有名称 出于某种目的 我发现了一些类似的问题 甚至在 stackoverflow com 上也发现了一个 获取容器中 Azure blob 文件的名称列表 https stackoverflow
  • 评估 ansible 条件中的返回码

    我正在致力于自动化一项需要将 最新版本的软件附加到文件的任务 我不希望它对同一版本多次执行此操作 它查看以下示例文件 var software releases new Array 4 3 0 4 4 0 4 5 0 4 7 0 4 8 0
  • 从数据表中读取值

    我有一个填充有 samo 数据 值的 DataTable 我想从 DataTable 读取数据并将其传递给字符串变量 我有这个代码 DataTable dr art line 2 ds Tables QuantityInIssueUnit
  • 对数字列表求和比使用 for 循环更快的方法?

    有没有一种方法可以比使用 for 循环更快地对数字列表进行求和 也许在 Python 库中 或者这真的只有多线程 矢量处理才能有效地完成吗 编辑 为了澄清 它可以是任何数字的列表 未排序 只是用户输入的 您可以使用 sum 对数组的值求和
  • CSS3 旋转 - Firefox 和 Safari 中的渲染问题

    我正在尝试使用 CSS3 属性 旋转 将简单的文本行旋转一定角度 精确1 5度 webkit transform rotate 1 5deg moz transform rotate 1 5deg ms transform rotate 1
  • Node-phantom 显示生成的 pdf 页数

    我在获取 phantomjs 中生成的 pdf 页数时遇到问题 基本上我将 phantomjs 与 nodejs 一起使用 我想在第 5 页中显示总页数 function generatePdf Load ejs template fs r
  • 将 List 转换为 List 的最快方法

    获取基元列表并将其转换为可为空的基元列表的最快方法是什么 例如 List
  • 为什么在 Lua 中使用 do-end 块?

    我一直试图寻找这个问题的答案 但未能成功 我想知道 do end 块实际上是用来做什么的 它只是说在我的书中需要时使用值 那么我该如何使用它呢 我是否可以通过将函数放置在 do end 循环中并将局部变量放置在函数外部但在此 do end
  • 结构化绑定,参考 ?是否可以删除它们

    假设我有这样一个元组 std tuple
  • 如何在 React-native 或 Expo 中使用 SVG-Uri?

    我下载了expo svg uri module https github com thongdn it expo svg uri使用 Svg 图像 但图像显示不正确 我失败的代码
  • 将翻转 lambda 转换为 SKI 项

    我在将用于翻转的 lambda 转换为 SKI 组合器时遇到问题 我希望这是有道理的 这是我的转换 fxy fyx f x y fyx f x S y fy y x f x S f y x f x S f K x f S x S f x K
  • 如何在 PHP 中将对象转换(转换)为没有类名前缀的数组?

    如何在 PHP 中将对象转换 转换 为没有类名前缀的数组 class Teste private a private b function construct a b this gt a a this gt b b var dump arr
  • kubectl exec 返回“握手状态 500”

    我在 AWS 上使用 python kubernetes 3 0 0 库和 kubernetes 1 6 6 我的豆荚可以很快消失 有时 当我尝试执行它们时 我会得到 ApiExceptionHandshake status 500错误状态
  • jemalloc、mmap 和共享内存?

    Can jemalloc http www canonware com jemalloc 修改为从共享内存分配 FreeBSD 的功能dallocx http www unix com man page freebsd 3 dallocx