Linux下Cache的使用

1.首先我们看一下ARM中Cache的几种设置:

 

 

 

00:表示Cache和Write Buffer都被禁止

01:表示nonCache,Write Buffer使能

10:Write-Through模式

11:Write-Back模式

如果是Write-Through 模式,每次写操作都通过Cache+Write Buffer把数据直接写到主存中去;如果是Write-back模式,数据最初只是写到Cache上,必要的时候再将CACHE上的数据通过Write Buffer实际回写到主存中去。

 

2.Linux下如何设置内存的Cache模式

/*
 * Mark the prot value as uncacheable and unbufferable.
 */
#define pgprot_noncached(prot) /

/* 模式0,nonCahed & nonWriteBuffer */
 __pgprot_modify(prot, L_PTE_MT_MASK, L_PTE_MT_UNCACHED)
#define pgprot_writecombine(prot) /
 __pgprot_modify(prot, L_PTE_MT_MASK, L_PTE_MT_BUFFERABLE)

/* 模式1,NonCache,WriteBuffer被使能 */
#ifdef CONFIG_ARM_DMA_MEM_BUFFERABLE
#define pgprot_dmacoherent(prot) /
 __pgprot_modify(prot, L_PTE_MT_MASK|L_PTE_EXEC, L_PTE_MT_BUFFERABLE)
#else
#define pgprot_dmacoherent(prot) /
 __pgprot_modify(prot, L_PTE_MT_MASK|L_PTE_EXEC, L_PTE_MT_UNCACHED)

#endif

3.Linux下如何处理DMA与Cache的问题

当一块内存同时开始DMA和Cache时,会出现内存一致性问题:

1).在DMA操作前,假如CPU对内存进行了操作但是结果只是保持在Cache中,没有被更新到内存,DMA操作的内存数据就会是错误的。

2).DMA操作后,内存数据已经更新,假如Cache中仍然保持的旧数据,CPU操作会出错。

对于情况(1)调用Cache的Flush操作:

dma_sync_single_for_device(port->dev,
        pdc->dma_addr,
        pdc->dma_size,
        DMA_TO_DEVICE);

对于情况(2)调用Cache的Invalidate操作:

dma_sync_single_for_cpu(port->dev, pdc->dma_addr,
     pdc->dma_size, DMA_FROM_DEVICE);

2010/09/09

 

 

<think>嗯,用户想了解如何在Linux下查看内存缓存(cache)的使用情况。首先,我需要回忆一下Linux系统中内存管理的相关知识。内存缓存通常指的是Page Cache和Slab缓存,这部分信息可以通过一些常用的命令来查看。 首先,最常用的命令应该是`free`,它能显示内存的总量、已用、空闲等信息,包括缓冲区和缓存。不过用户可能不知道`free`命令输出的具体含义,需要解释一下各个字段,尤其是buff/cache那一行。可能需要提到`free -h`以人类可读的格式显示,这样更直观。 然后,`top`和`htop`命令也可以查看内存使用情况。`top`在进程列表中显示内存情况,但用户需要知道如何找到缓存信息,可能是在Mem行中的buff/cache部分。`htop`更友好,但可能需要安装,所以得提醒用户如果没安装的话可以用包管理器安装。 接下来是`vmstat`命令,这个命令能提供虚拟内存统计信息,包括缓存。不过输出可能比较复杂,需要解释各个字段,比如cache在哪个列。可能需要给出具体例子,比如`vmstat -s`来显示更详细的信息。 还有`/proc/meminfo`文件,这是内核提供的虚拟文件系统,里面详细记录了内存使用情况。用户可以通过`cat /proc/meminfo`来查看,其中Cached和Slab分别对应不同的缓存类型。需要指出这两个字段的具体含义,以及如何计算总缓存量。 另外,`sar`命令来自sysstat工具包,可以监控系统资源的历史数据,包括缓存。不过用户可能需要安装sysstat并启用服务,这部分需要简要说明。 在整理回答的时候,要注意结构清晰,分点列出各个方法,每个命令的使用示例和输出解释。同时,确保所有数学表达式或变量按照系统级指令使用正确的LaTeX格式,不过这个问题可能不涉及数学公式,但如果有数字或变量的话需要注意。 可能还需要考虑用户的使用场景,比如是否是系统管理员,或者开发人员,他们可能需要不同的详细程度。但用户的问题比较基础,所以应该保持回答简洁实用,覆盖常用命令即可。 最后,检查每个命令的语法是否正确,比如`free -h`是否适用所有Linux发行版,可能需要提到`-m`或`-g`选项作为备选。确保所有步骤正确,没有遗漏关键点,比如`/proc/meminfo`中的Cached和Slab的区别。</think>在 Linux 系统中查看内存缓存(Cache使用情况,可通过以下常用方法逐步操作: --- ### 1. **使用 `free` 命令** **命令格式**: ```bash free -h ``` **输出示例**: ``` total used free shared buff/cache available Mem: 15Gi 5.2Gi 2.1Gi 356Mi 7.7Gi 9.4Gi Swap: 2.0Gi 0B 2.0Gi ``` **关键字段解释**: - `buff/cache`:合并显示 **缓冲区(Buffers)** 和 **缓存(Cache)** 的总使用量。 - `available`:系统可用内存(包含缓存可回收部分)。 --- ### 2. **使用 `/proc/meminfo` 文件** **命令格式**: ```bash cat /proc/meminfo ``` **输出示例**: ``` Cached: 7345124 kB # 文件系统缓存(Page Cache) Slab: 1234567 kB # 内核对象缓存(Slab) ``` **关键字段**: - `Cached`:文件系统页缓存(Page Cache),用于加速文件读写。 - `Slab`:内核数据结构缓存(如目录项、inode 等)。 --- ### 3. **使用 `vmstat` 命令** **命令格式**: ```bash vmstat -s ``` **输出片段**: ``` 8172564 K total memory 5232140 K used memory 2148576 K active memory 7345124 K inactive memory # 包含缓存和缓冲区 ``` --- ### 4. **使用 `top` 或 `htop` 命令** - **`top` 命令**: 1. 运行 `top`。 2. 查看顶部 `KiB Mem` 行的 `buff/cache` 值。 - **`htop` 命令**(需安装): 1. 运行 `htop`。 2. 头部内存栏会直接显示缓存占用。 --- ### 5. **使用 `sar` 命令(历史监控)** **安装与使用**: ```bash sudo apt install sysstat # Debian/Ubuntu sudo yum install sysstat # CentOS/RHEL sar -r 1 3 # 每秒采样1次,共3次 ``` **输出示例**: ``` kbmemfree kbavail kbmemused %memused kbbuffers kbcached 2148576 9437184 5232140 63.98 234568 7345124 ``` - `kbcached`:缓存使用量。 --- ### 总结 - **快速查看**:`free -h` 或 `cat /proc/meminfo` - **实时监控**:`top` 或 `htop` - **详细分析**:`vmstat -s` 和 `sar -r` - **缓存机制**:Linux 自动管理内存缓存,当应用程序需要更多内存时,系统会优先释放缓存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值