gpt4 book ai didi

arm - ARM中障碍(DSB,DMB,ISB)的实际使用案例

转载 作者:行者123 更新时间:2023-12-03 11:35:16 33 4
gpt4 key购买 nike

我知道DSB,DMB和ISB是阻止指令重新排序的障碍。
对于它们每个人,我也可以找到很多很好的解释,但是很难想象我必须使用它们的情况。

另外,从开源代码中,我不时看到这些障碍,但是很难理解为什么使用它们。仅作为示例,在Linux内核3.7 tcp_rcv_synsent_state_process函数中,有一行如下:

    if (unlikely(po->origdev))
sll->sll_ifindex = orig_dev->ifindex;
else
sll->sll_ifindex = dev->ifindex;

smp_mb();

if (po->tp_version <= TPACKET_V2)
__packet_set_status(po, h.raw, status);

smp_mb()基本上是DMB。
您能给我一些您现实生活中的例子吗?
这将有助于更多地了解壁垒。

最佳答案

抱歉,不会像您要的那样给您一个直截了当的示例,因为当您已经在浏览Linux源代码时,有很多内容需要解决,而它们似乎无济于事。对此并不感到羞耻-每个理智的人至少最初都对内存访问排序问题感到困惑:)

如果您主要是应用程序开发人员,那么您将无须过多担心它-您使用的任何并发框架都将为您解决它。

如果您主要是设备驱动程序开发人员,那么您将很容易找到示例-只要您的代码在执行某些其他访问之前依赖于先前的访问产生了影响(清除了中断源,写了DMA描述符), (重新启用中断,启动DMA事务)。

如果您正在开发并发框架(或调试其中一个框架),则可能需要多阅读一些有关该主题的内容-但是您的问题表明,这是肤浅的好奇心,而不是紧迫的需求?
如果您正在开发自己的用于在线程之间传递数据的方法,而不是基于并发框架提供的原语,那么就所有目的和目的而言,这都是并发框架。

保罗·麦肯尼(Paul McKenney)撰写了一篇出色的论文,介绍了内存屏障的需求以及它们实际上对处理器产生的影响:Memory Barriers: a Hardware View for Software Hackers

如果这有点过于刻板,我写了一个由三部分组成的博客系列,内容更加轻巧,并且以ARM特定的 View 结束。第一部分是Memory access ordering - an introduction

但是,如果要专门查找示例列表,尤其是对于ARM体系结构,则可能会比Barrier Litmus Tests and Cookbook差很多。

多余的灯光程序员的观点而不是完全正确的体系结构版本是:

  • DMB-每当一个内存访问需要就另一个内存访问进行排序时。
  • DSB-每当需要在执行程序之前完成内存访问时。
  • ISB-每当需要在程序中的某个点之后显式进行指令提取时,例如在内存映射更新后或编写要执行的代码之后。 (在实践中,这意味着“此时丢弃所有预取的指令”。)
  • 关于arm - ARM中障碍(DSB,DMB,ISB)的实际使用案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15491751/

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