如何测试和测试互斥量实现


12

如标题所述:如何正确测试和基准化c ++中互斥锁的不同实现?

本质上,我为在2核,armv7上运行的项目编写了自己的std :: mutex类似类,目的是在无争议的情况下最大程度地减少开销。现在,我正在考虑在更多地方以及不同的体系结构中使用所说的互斥锁,但是在执行此操作之前,我想确保

  • 这实际上是正确的
  • 没有任何病理情况比标准的std :: mutex表现差很多。

显然,我写了一些基本的单元测试和微基准测试,一切似乎都可以用,但是在多线程代码中,“似乎可以使用”并不能给我带来很大的安慰。

  • 那么,是否有已建立的静态或动态分析技术?
  • 为互斥类编写单元测试时,常见的陷阱有哪些?
  • 在性能方面应该注意哪些典型的极端情况?

我仅将标准库类型用于实现,其中包括对原子的非顺序一致的加载和存储操作。但是,我主要对实现不可知的建议感兴趣,因为我也想对其他实现使用相同的测试工具。


2
我知道这不是必需的,但如果支持者会就这个问题的问题发表评论,我将不胜感激。我是SE的新手,并不完全熟悉该网站的规格。
MikeMB

3
不是否决者,但是我想说,对于完全好问题的匿名否决,该网站特别糟糕。在我看来,很多人都基于我所谓的“宗教”原因而投了反对票。话虽如此,一种可能性是您正在寻求有关工具的建议,我认为这里对此并不满意。但这只是一个猜测。许多人在其他问题中都讨论过此类工具,因此请随心所欲。
user1118321

4
实际上,请查看标题为“拒绝投票,因为我们不同意asker的方法或逻辑的” 这一元文章
user1118321

@ user1118321:该内容不适合该问题,因为恕我直言,该问题没有错误的假设。但是,我当前看到的3个关闭投票中有2个正在使用预定义的“第三方资源请求”关闭原因。MikeMB,您可以尝试编辑您的问题并从中删除那些部分,但是按照目前的形式,我想社区也可能因为范围太广而将其关闭。如果您缩小问题的重点,并要求specificially 什么你想测试你试过到目前为止,你可能会增加你的问题的生存机会。
布朗

这个问题的一个问题是“要求我们找到或推荐工具,库,编程语言,资源(包括书籍,博客,教程和示例)或要进行的项目的问题在这里不合时宜,因为它们吸引了有根据的答案,对别人没有持久的价值。”
David Hammen

Answers:


1

问题很复杂:

复杂性的一些来源包括:

  • 正在进行多少次上下文切换:这非常重要,具体取决于运行这些测试的平台。一些平台比其他平台处理得更好
  • 是否以内联方式测试互斥锁的功能。即互斥锁仅在经过优化或可优化的代码中才能表现良好。
  • 这些互斥量是为缓存局部性设计的吗?高速缓存未命中会大大降低性能或导致更多上下文切换。输入互斥锁之前和之后。
  • 互斥锁本身是否会导致缓存局部性丢失。即互斥量状态数据是动态分配的。
  • 这些互斥锁在上下文切换包含在互斥锁中的情况下,能否表现良好?即io,malloc等。
  • 如果将内核时间包含在Mutex.ie中(即动态内存分配和取消分配),则互斥锁是否会表现良好。
  • 在VM内运行时性能是否保持不变
  • 互斥量的破坏或构建是否昂贵,即状态数据位于动态内存中

1
不知道我是否同意建筑/破坏部分。如果某个程序一直在创建和销毁互斥锁​​,则设计设计会出现问题。否则,谢谢您的指点。
MikeMB

-1

您的想法非常有趣:可以测试互斥量实现的合规性基准。

不幸的是,据我所知,互斥量实现尚无广为人知的合规性基准。因此,我想您手中有一个非常有趣的问题,即为此类合规性基准创建提案。

而且,由于您参与了基准实施的创建,因此您就是这个人。

如果您允许我提出建议,也许您可​​以从一方面针对线程的POSIX标准着手进行这项研究,然后对并发处理(例如CSP或通信顺序过程)的理论文献进行一些研究。这类论文通常涉及经典的并发问题,例如餐饮哲学家。

我想,实施它们可能是合规性基准中有趣的一部分。


3
我没有对你投反对票,但这似乎无法回答我的任何问题。
MikeMB '17年

感谢您不要投票。非常抱歉,没有回答您的问题。您介意我是否要考虑为互斥量创建合规性基准?
费尔南德斯希尔顿酒店

不太可能。即使我唯一关心的标准是c ++标准(尽管就互斥量而言,它可能与posix相同)
MikeMB

为了证明我之前的陈述的正确性:如果我应该为自己的互斥锁找到一个好的测试套件,则很有可能将其开源,但是我非常怀疑它的质量或完整性是否足以成为实际的互斥锁。 “合规性”基准-无论如何,通过静态分析可能可以更好地处理它。
MikeMB '17年

我同意您的观点,即互斥基元没有一个好的测试套件。我想它应该来自三个不同的来源:并发处理理论,POSIX互斥量的规范以及使用互斥量表示的并发算法。你同意吗 ?
费尔南德斯希尔顿酒店
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.