系统与设计
的意见

发现和避免并发bug

早期解决并发问题,否则将面临成本增加和延迟验证。

受欢迎程度

理解有意和无意的硬件和软件组件之间的相互作用是改变架构变得更加异构和互连拓扑变得更加复杂。这会影响性能、功耗和成本的项目。许多大学正在研究这个从软件的角度来看,虽然少数看硬件方面的影响。很少有这个从软件/硬件相结合的角度分析是至关重要的考虑到新水平的预期两者之间的关系。

作为我们现代系统更加突出依赖“多核肌”和异质性,设备变得更容易并发相关错误只发生在系统级。这些虫子越来越难以复制,理解和解决,事实上它不是经常听到附带设备的缺陷,只有清单后几天甚至几个月的操作。例如,这可以引起的有害软件程序员预先种族没有看到的数据,或由于违反规则的硬件同步协议验证期间不覆盖。

当HW事件深深与SW交互,如在司机或嵌入应用程序中,车可能发生相互作用,体现在任何层面上,从HW协议,到OS-privileged空间,用户应用程序。

并发性通常会导致一个不确定的环境作为工程师和开发人员的困难的事情,因为它需要很多努力和仔细考虑输入和环境设置,不同组合的控制流和数据流,执行时间表,组件行为随机(如一个缓存,分支预测CPU)和许多其他因素,不是开发人员的控制下。

这种更加复杂化,传统的调试或分析方法,通常的干扰性,也改变系统状态,有时甚至导致隐瞒错误。如果你有一个侵入性的方法,在理想的情况下它能够发现更多的错误和不隐瞒他们。

驯服并发需要掌握先进的硬件和软件的概念从不同的领域。因此,它很容易变异成一个跨学科的努力传播跨团队,地理位置,预算和项目阶段。如果一个组织没有在正确的时间正确的专家,这是一个完美的灾难。

此外,缺乏专门的工具可以帮助开发人员供应推断依赖关系,并行性和确定性,尤其是在系统水平上。

有关并发性的推理是一个极其困难的精神挑战使用方法从更少的复杂系统。开发人员需要预测的影响因素他们控制或不知道,同时保持在他们的头几成百上千的系统状态可能采取的可能性。

在设计时避免并发bug或检测验证过程中需要的工具分类,理解,很多时候生成抽象模型和模拟硬件事件以及软件操作,影响系统的决定论。这包括西南同步原语如互斥或操作系统调度器。

利用传统的软件调试方法像源调试器或操作系统内核追踪了解依赖和相互作用的限制,因为自然侵入。很少有专门的产品来支持开发人员在这个过程。

一些有趣的技术可以帮助在设计和调试阶段,如所谓的虚拟平台上的仿真,SW HW模型系统。系统级分析HW / SW交互对一个真正的非侵入性的环境可以证明有助于检查和操作错误的系统状态。然而,在定制的成本,推出虚拟平台和维护以及调试脚本和额外的插件。

另一个例子是西南的子集在编译时静态源代码分析器提供支持主流并行SW POSIX线程环境如叮当声/ LLVM线程安全分析扩展。这支持软件开发人员在避免和检测错误虽然静态分析有其局限性,例如:缺乏精确的所有依赖项的决议;不可能废弃所有指针访问在C或c++等语言;缺乏相关的其他系统级事件,因为它只给你一个源代码以代码为中心的视图。所以实际上,静态分析是有用的,但不是灵丹妙药。

Silexica花费了许多年的发展正确的组合技术来帮助驯服并发的桥梁。我们的基金编程工具是由一个源代码分析引擎基于叮当声/ LLVM,用于关联静态信息和动态数据来自执行跟踪。它有助于揭开静态和动态函数调用和数据访问依赖、访问频率、调用计数和许多其他人。也理解线程化和同步语义和计算其可能对应用程序流的影响。

它可以帮助开发人员识别线程间依赖像创建/加入关系都必须与现实当中常见的线程间的功能,使用同步的功能,关键部分,和共享变量和访问保护。

最后,考虑到以硬件为中心为属性,例如微体系结构内的可用的处理器数量,基金还允许抽象行为的模拟应用程序的同步和通信模式。这允许拟定和回答这样的问题“假设现有线程的调度是怎么发生的呢?”或“线程等待其他线程?会有任何冲突或平台资源瓶颈?”

为了避免头痛和缩短集成的努力,我们鼓励您考虑你当前的方法,尽早解决并发问题。



留下一个回复


(注意:这个名字会显示公开)

Baidu