当前位置: 首页 > 面试题库 >

记忆障碍和TLB

欧盛
2023-03-14
问题内容

内存屏障可确保数据缓存保持一致。但是,是否可以保证TLB保持一致?

我看到一个问题,即在线程之间传递MappedByteBuffer时,JVM(java 7更新1)有时会因内存错误(SIGBUS,SIGSEG)而崩溃。

例如

final AtomicReference<MappedByteBuffer> mbbQueue = new AtomicReference<>();

// in a background thread.
MappedByteBuffer map = raf.map(MapMode.READ_WRITE, offset, allocationSize);
Thread.yield();
while (!inQueue.compareAndSet(null, map));


// the main thread. (more than 10x faster than using map() in the same thread)
MappedByteBuffer mbb = inQueue.getAndSet(null);

没有Thread.yield(),我有时会在force(),put()和C的memcpy()中崩溃,所有这些都表明我试图非法访问内存。使用Thread.yield(),我没有问题,但这听起来不像是可靠的解决方案。

有人遇到过这个问题吗?是否有关于TLB和内存屏障的保证?

编辑:操作系统是Centos 5.7,我已经在i7和Dual Xeon机器上看到了行为。

我为什么要这样做?由于写入消息的平均时间为35-100
ns(取决于长度),因此使用普通的write()并不那么快。如果我在当前线程中进行内存映射和清理,这将花费50-130微秒,而使用后台线程来执行,则主线程交换缓冲区大约需要3-5微秒。为什么我需要交换所有缓冲区?因为我正在写入许多GB的数据,所以ByteBuffer的大小不能超过2
GB。


问题答案:

映射是通过mmap64(FileChannel.map)完成的。当访问该地址时,将出现页面错误,内核将在其中为您读取/写入。在mmap期间不需要更新TLB。

在munmap期间,(所有cpus的)TLB是无效的,这是由MappedByteBuffer的终结处理的,因此munmap成本很高。

映射涉及很多同步,因此地址值不得损坏。

您是否有机会通过Unsafe尝试一些奇特的东西?



 类似资料:
  • 我试图在一个对java无锁程序员有用的层次上理解内存障碍。我觉得这个级别介于学习挥发物和学习x86手册中存储/加载缓冲区的工作之间。 我花了一些时间阅读了大量的博客/食谱,并总结了以下内容。能不能请一些知识更渊博的人看看总结,看看我是否遗漏了什么或列错了什么。 LFENCE公司: SFENCE公司 MFENCE 最后,如果SFENCE和MFENCE都耗尽了storeBuffer(使缓存线失效并等待

  • 我读过关于记忆障碍如何工作的不同文章。 例如,用户Johan在这个问题中的回答说,内存屏障是CPU执行的指令。 虽然用户Peter Cordes在这个问题中的评论对CPU如何重新排序指令说了以下内容: 它的读取速度比执行速度快,因此它可以看到即将到来的指令窗口。有关详细信息,请参阅 x86 标签 wiki 中的一些链接,如 Agner Fog 的微搜索 pdf,以及大卫·坎特对英特尔哈斯韦尔设计的

  • 引子 这篇教程旨在帮助开发者快速上手 Rax iOS 上的无障碍开发。 无障碍,即「accessibility」(常常缩写成「a11y」),是相对有障碍访问而言的,常见的有障碍访问场景有两类。 一种是用户因为生理缺陷,没有能力按正常的交互方式访问,举几个例子: 视障人士看不见或看不清,无法感受手淘上的信息,动效,氛围; 听障人士听不见或听不清,无法听到音乐以及视频的语音部分; 老年人视力和听力的退

  • 无障碍性(a11y) 当你设计一款扩展,需要让扩展对于诸如视觉缺陷,失聪,行动不便的残疾人没有使用障碍。 所有人 — 不仅仅是有特殊需求的人 — 都应该能从那些无障碍扩展所提供的相应模式中获益。例如,键盘的快捷键对于盲人,灵敏度较差的那些人非常重要,然而他们也能提高高级用户在无鼠标状态下的工作效率。 字幕和手抄本提供了聋人获取影音内容的通道,然而他们对语言学习者也非常有用。 人们可以通过各种方式和

  • 无障碍设计 无障碍设计是指产品, 设备, 服务, 或者环境是为残疾人设计的. 无障碍设计的概念意味着与一个人的辅助技术(例如, 电脑屏幕阅读器)相兼容, 确保直接访问(即独立)和"间接访问". 无障碍设计可以理解为 "能够访问", 并对一个系统或实体是有利的, 其侧重于使身体残障, 或有特殊需要, 或要依赖辅助技术的人群能够访问 Web. 然后, 研究和开发无障碍设计对每个人都带来了好处. 无障碍