首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Cache和DMA一致性

这也是Linux系统中dma_alloc_coherent()接口的实现方法。 软件维护cache一致性 为了充分使用cache带来的好处。我们映射依然采用cache的方式。但是我们需要格外小心。...这也是Linux系统中流式DMA映射dma_map_single()接口的实现方法。 DMA Buffer对齐要求 假设我们有2个全局变量temp和buffer,buffer用作DMA缓存。...我们应该保证DMA Buffer不会跟其他数据共享cacheline。所以我们要求DMA Buffer首地址必须cacheline对齐,并且buffer的大小也cacheline对齐。...这样就不会跟其他数据共享cacheline。也就不会出现这样的问题。 Linux对DMA Buffer分配的要求 Linux中,我们要求DMA Buffer不能是从栈和全局变量分配。...这就要求某些不支持总线监视的架构必须保证kmalloc分配的内存必须是cacheline对齐。所以linux提供了一个宏,保证kmalloc分配的object最小的size。

9910
您找到你想要的搜索结果了吗?
是的
没有找到

图解 | CPU-Cache | 2

歧义:查找到的Cacheline先后指向多个物理地址。 别名:一个物理地址被加载到不同的Cacheline中。 VIVT ? 歧义:VIVT时,相同的虚拟地址映射不同的物理地址就会出现歧义。...别名:基于VIVT,在2个虚拟地址对应同一个物理地址时,对于index和tag,2个虚拟地址都是可能不同的,它们完全可能在2个Cacheline同时命中。此时就出现了别名问题。...歧义:PIPT时,同时index和tag都是基于物理地址,也不存在查到多个Cacheline对应一个物理地址,所以不存在歧义问题。...别名:基于PIPT,在2个虚拟地址对应同一个物理地址时,由于物理地址一样,基于此物理地址去查找和比对Cache,是不会查到两个Cacheline的,所以PIPT不存在别名问题。...在Linux内核中PIPT高速缓存的管理函数都是空函数,无需管理。 VIPT ? 歧义:VIPT以物理地址部分位作为tag,因此不会存在歧义问题。

1.3K20

罗玉平: 关于ARM Linux原子操作的底层支持

来源:Linux阅码场, 罗玉平原创,欢迎投稿原创文章(要求投稿前未在任何平台发表),稿费500元人民币。...投稿邮箱:21cnbao@gmail.com 作者简介: 罗玉平, IT行业工作近20年,先后从事无线通讯,linux平台和firmware开发多年,目前从事ARMv8-A架构和CPU软件的客户支持和培训工作...引子 前文宝华的《宋宝华:关于ARM Linux原子操作的实现》谈到软件如何使用ARM V7之后的LDREX和STREX指令来实现spin lock和atomic 函数,这篇文章接着探讨ARM架构和总线协议如何来支持的...例如, 假如某个SOC不支持外部global exclusivemonitor,软件把MMU disabled的情况下,启动SMP Linux,系统是没法启动起来的,在spinlock处会挂掉。...的时候,在每个CPU的内部cache里面都有cacheline allocation, cacheline的状态会变成Shared;但是当某个CPU做写的时候,会把其它CPU里面的cacheline数据给

3.1K20

宋宝华:深入理解cache对写好代码至关重要

工程师(其他的非Linux工程师也一样)写出高效能代码,以及优化Linux系统的性能是至关重要的。...比如这台的Linux里面运行lstopo命令: 人们也常常称呼L2cache为MLC(MiddleLevel Cache),L3cache为LLC(Last LevelCache)。...,cacheline的长度是64字节。 下面我们来想象一个16KB大小的cache,假设是4路组相联,cacheline的长度是64字节。...由于2个虚拟地址指向1个物理地址,这样CPU写过第一个虚拟地址后,写入cacheline1。CPU读第2个虚拟地址,读到的是过时的cacheline2,这样就出现了不一致。...CPU与设备(其实也可能是个异构处理器,不过在Linux运行的CPU眼里,都是设备,都是DMA)的cache同步问题 先看一下ICACHE和DCACHE同步问题。

1.6K42

Linux内核:memory barrier

: #define preempt_disable() \ do { \     preempt_count_inc(); \     barrier(); \ } while (0) linux...这时候,写的性能变得非常的差,因为CPU 0必须要等到CPU n上的cacheline 数据传递到其cacheline之后,才能进行写的操作(CPU n上的cacheline 变成invalid状态,CPU...而从一个CPU的cacheline传递数据到另外一个CPU的cacheline是非常消耗时间的,而这时候,CPU 0的写的动作只是hold住,直到cacheline的数据完成传递。...在CPU n的cacheline把数据传递到其cache 0的cacheline之后,硬件将store buffer中的内容写入cacheline。...三、linux kernel的API linux kernel的memory barrier相关的API列表如下: 接口名称 作用 barrier() 优化屏障,阻止编译器为了进行性能优化而进行的memory

98230

宋宝华:深入理解cache对写好代码至关重要(上)

工程师(其他的非Linux工程师也一样)写出高效能代码,以及优化Linux系统的性能是至关重要的。...比如这台的Linux里面运行lstopo命令: 人们也常常称呼L2cache为MLC(MiddleLevel Cache),L3cache为LLC(Last LevelCache)。...,cacheline的长度是64字节。 下面我们来想象一个16KB大小的cache,假设是4路组相联,cacheline的长度是64字节。...由于2个虚拟地址指向1个物理地址,这样CPU写过第一个虚拟地址后,写入cacheline1。CPU读第2个虚拟地址,读到的是过时的cacheline2,这样就出现了不一致。...CPU与设备(其实也可能是个异构处理器,不过在Linux运行的CPU眼里,都是设备,都是DMA)的cache同步问题 先看一下ICACHE和DCACHE同步问题。

2.2K71

Linux时间子系统之时间的表示示例详解

它的声明如下(代码位于kernel/time/timer.c中): __visible u64 jiffies_64 __cacheline_aligned_in_smp = INITIAL_JIFFIES...jiffies的引用(代码位于include/linux/jiffies.h中)申明为: extern u64 __cacheline_aligned_in_smp jiffies_64; extern...unsigned long volatile __cacheline_aligned_in_smp __jiffy_arch_data jiffies; 因此,jiffies变量是一个unsigned...3)ktime_t 在Linux的时间子系统内,一般使用ktime_t来表示时间,其定义如下(代码位于include/linux/ktime.h): typedef s64 ktime_t; 就是一个非常简单的...总结 到此这篇关于Linux时间子系统之时间的表示的文章就介绍到这了,更多相关Linux时间的表示内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!

3.6K21

甄建勇:五分钟搞定Cache(上)

的第2个(2%4=2)cacheline,内存的3地址只能映射到cache的第3个(3%4=3)cacheline,内存的4地址只能映射到cache的第0个(4%4=0)cacheline,。。。。。。...内存的0地址能映射到cache的第0个cacheline,也可以映射到第1个cacheline,也可以映射到第2个cache line,也可以映射到第3个cacheline。...cacheline。...内存的1地址只能映射到cache的第1个组(1%2=1),但是在组内也是任意的,既可以映射到组内的第0个cacheline,也可以映射到第1个cacheline。...内存的2地址只能映射到cache的第0个组(2%2=0),但是在组内也是任意的,既可以映射到组内的第0个cacheline,也可以映射到第1个cacheline,。。。。。。。依次类推。

74641

云存储技术硬核内幕 (34) —— 75度角的美妙

可是,当子虚考虑到Linux IO的工作方式时,明白了。 原来,计算机对NVME SSD盘的写入动作,最终需要对PCIe的寄存器做动作。...由于Linux工作在x86的保护模式下,应用层无法读写PCIe的地址空间,需要通过syscall一类的系统调用,切换到内核态的驱动程序,才可以对PCIe的寄存器进行操作,从而向NVMe盘发起读写操作。...这会引起Cacheline miss。在Intel x86体系结构中,指令Cacheline miss的代价,相当于一次DRAM的访问周期,这个时间大致为0.1us。...有几大核心技术: 1、用户态驱动,避免进出内核以及数据包复制的开销; 2、CPU核心绑定,避免进程在不同CPU之间调度带来的上下文切换的开销; 3、大页机制,避免内存换页的开销; 4、轮询模式,避免Linux...Reactor作为数据平面,一方面与其他Core通过event交互,另一方面可以与用户自行编写的Poller通过轮询方式交互,由于Reactor是绑定HT的,避免了进程在不同HT之间调度的上下文切换以及cacheline

66120

老司机乱谈『代码之美』 ——不要束缚了自己前进的脚步

Ethernet CNA XL710-QDA1 (Transfer rate :40 Gbps,每cpu对应一个网卡) 使用Seastar开发的应用层代码和底层网络模式是隔离的,应用无需编译,可以通过配置选择使用Linux...作者解释为了避免cpu的prefecther造成A core的Cacheline和 B core的Cacheline加载了相同的内容 。这里多解释一下,如果多加载了会造成什么现象。...我们以Intel处理器来举例,如果prefecth失败了,数据块2(这里已经按照cacheline的大小64字节对齐)只存在于B core的cacheline中,状态可能为E(Exclusive),如果中间没有其他数据结构...数据块2还存在于Acore中,cacheline的状态可能为 S(Shared)。S状态的写需要操作到InvalidateQueue,必然在硬件层面上造成了性能上的负担。

38010

谈谈 Linux 文件系统

最近在看一本 Linux 环境编程的书,加上之前工作中接触了一些关于存储的东西,便突然有兴趣整理一下 Linux 是怎么支撑文件系统的。...的位置: VFS 本身可以理解为是 Linux 针对文件系统约定的 Interface,Linux 为了实现这种这套接口,采用类似面向对象的设计思路(而且代码结构也像极了)。...; struct list_lru s_inode_lru ____cacheline_aligned_in_smp; struct rcu_head rcu; }; 虽然字段有点多...传统的文件系统:ext2 ext2 曾是一款优秀的文件系统,是Linux 上使用最为广泛的文件系统,也是原始 Linux 文件系统 ext 的继任者。...参考 •《Linux/UNIX 系统编程手册》•《Linux 内核设计与实现》•《Porting the SGI XFS File System to Linux

4.6K21
领券