
Linux 内存与存储
文章平均质量分 66
内存与存储
Aitel@
三尺微命,一介书生。
展开
-
eFuse技术
1. 概念eFuse的概念最早来源于2004年IBM工程师的发现。该发现表明:与更旧的激光熔断技术相比,电子迁移(EM)特性可以用来生成小得多的熔丝结构。EM熔丝可以在芯片上编程,不论是在晶圆探测阶段还是在封装中。采用I/O电路的片上电压(通常为2.5V),一个持续200微秒的10毫安直流脉冲就足以编程单根熔丝。通过运用eFuse技术,允许计算机芯片的动态实时重新编程。抽象地说计算机逻辑通常是“蚀刻”或“硬编码”到芯片上,在芯片完成后不能改变。通过使用eFuse技术,芯片制造商可以允许..转载 2022-04-02 15:52:37 · 4954 阅读 · 0 评论 -
NVM, PROM, OTP, eFuse傻傻分不清楚
1. 什么是NVM?NVM: Non-Volatile Memory,非易失性存储器NVM 的特点是存储的数据不会因为电源关闭而消失,像 Mask ROM、PROM、EPROM、EEPROM、NAND / NOR 闪存 (Flash Memory) 等传统 NVM,以及,目前许多正在研发的新型态存储器,如磁性存储器 (MRAM)、阻变存储器 (RRAM)、相变存储器 (PRAM)、铁电存储器 (FeRAM) 等等都属于 NVM。所以NVM的概念很大。从可编程次数来看,NVM可以分为3类:MTP:转载 2022-04-02 15:48:56 · 3127 阅读 · 0 评论 -
几种内存分配函数比较
__get_free_pages 直接对页框进行操作,最大分配内存为4M,适用于分配较大量的连续物理内存。 kmem_cache_alloc 基于slab机制实现,最大分配内存为128kb, 适合需要频繁申请释放相同大小内存块时使用. kmalloc 基于kmem_cache_alloc实现,最大分配内存为128kb, 最常见的分配方式,需要小于页框大小的内存时可以使用。 vmalloc 建立非连续物理内存到虚拟地址的映射,物理不连续,适合需要大内存,但是对地址连续性没有原创 2021-12-29 20:07:58 · 551 阅读 · 0 评论 -
Linux内核环境下申请大块内存
在Linux内核环境下,申请大块内存的成功率随着系统运行时间的增加而减少,虽然可以通过vmalloc系列调用申请物理不连续但虚拟地址连续的内存,但毕竟其使用效率不高且在32位系统上vmalloc的内存地址空间有限。所以,一般的建议是在系统启动阶段申请大块内存,但是其成功的概率也只是比较高而已,而不是100%。如果程序真的比较在意这个申请的成功与否,只能退用“启动内存”(Boot Memory)。下面就是申请并导出启动内存的一段示例代码:void* x_bootmem = NULL;EXPORT_SY转载 2021-12-29 20:02:39 · 1072 阅读 · 0 评论 -
linux内核的内存分配函数
内存空间函数列表 分配原理 最大分配 使用情况 __get_free_pages 直接对页框进行操作 4MB 适用于分配较大量的连续物理内存 kmem_cache_alloc 基于slab机制实现 128KB 适合需要频繁申请释放相同大小内存块 kmall.转载 2021-12-29 09:24:24 · 619 阅读 · 0 评论 -
内核态使用vmalloc申请大块内存
经常在内核版看到网友发帖,问如何在内核态申请大块内存,上百兆甚至上G的内存。用kmalloc或get_free_pages都不能满足这样的要求。今天又在内核版看到这样的帖子,其中白金兄回复说可以用vmalloc实现,并且给出了例程。本人也进行了实践,初步看来是分配成功了,但至于是否可以有效的应用于生产环境还有待于验证。本文的总结仅作为学习环境上的探讨和时间。以下是申请大块内存的代码。代码是以白金兄提供的代码:(http://linux.chinaunix.net/bbs/...转载 2021-12-29 19:59:46 · 1398 阅读 · 0 评论 -
使用devm_kzalloc分配内核内存空间
devm_kzmalloc()是资源管理版本的kzalloc(),它与设备关联,来进行内存的申请与释放。也就是当设备从系统中剥离,设备驱动被卸载后,使用该函数申请的内存会自动释放。主要是为了防止忘记释放内存导致内存泄漏。函数原型:void * devm_kzalloc(struct device *dev, size_t size, gfp_t gfp);参数:dev --> 需要申请内存的设备size --> 申请的内存大小gfp --> 内存申请方式返回值:转载 2021-12-29 09:03:17 · 987 阅读 · 0 评论 -
Linux内核中申请内存( kmalloc,kzalloc,vmalloc)几种方式的区别
在linux中,用户空间在动态申请内存时是用 malloc() 函数,对应的释放函数是 free() 。而在内核空间中申请内存,一般会用到 kmalloc()、kzalloc()、vmalloc() 这三个函数,以下是这些函数的使用及它们之间的区别。kmalloc()函数原型:void *kmalloc(size_t size, gfp_t flags)(重点☆)kmalloc() 申请的内存位于物理内存映射区域(即虚拟内存地址)。但是在物理上它是连续的,它们与真实的...原创 2021-12-27 15:07:11 · 5088 阅读 · 0 评论 -
malloc,calloc 和 realloc 的实现原理
malloc,calloc 和 realloc是应用层用于开辟内存的三个函数。 实现原理 malloc / calloc 函数的实现原理:它维护一个可用内存链表(即所谓空闲链表)。调用时,它在该链表中寻找一个满足用户请求所需要的内存块,这样就会出现三种情况:如果找到一块与用户请求所需要大小相同的内存块,那就将该块内存返还给用户。 如果找到一块比用户请求所需要大小更大的内存块,则将该内存块一分为二(一块的大小与用户申请的大小一样,另一块就是剩下的字节),将分配给用户的那块内存传递给用户,将原创 2021-12-30 10:13:22 · 795 阅读 · 0 评论 -
伙伴系统分配器 - PF_MEMALLOC 标志位
这是一个进程标记位,除了在内存管理子系统中使用外,还在其他的内核子系统中使用。之所以在伙伴系统分配器中讨论,是因为这个标记和内存管理密不可分。当一个进程被设置PF_MEMALLOC后,那么对进程会有如下影响:1. 当进程进行页面分配时,可以忽略内存管理的水印进行分配,这是告诉内存管理系统,给我一点紧急内存使用,我将会释放更多的内存给你。2. 如果忽略水印分配仍然失败,那么直接返回ENOMEM,而不是等待kswapd回收或者缩减内存3. 如果忽略水印分配仍然失败,那么直接返回E...转载 2021-12-27 16:01:00 · 729 阅读 · 0 评论 -
Linux内核中用GFP_ATOMIC申请内存究竟意味着什么?
本文目的本文补充校正一些Linux内核开发者关于GFP_ATOMIC的认知不完整的地方,阐述GFP_ATOMIC与free内存watermark的关系,并明确什么时候应该用GFP_ATOMIC申请内存。目录:1. GFP_ATOMIC vs. GFP_KERNEL2. 内存水位,PF_MEMALLOC和GFP_ATOMIC3. 何时使用GFP_ATOMIC(一个patch分析)GFP_ATOMIC vs. GFP_KERNEL我们都知道,在中断、软中断、spinlock等原子上下文里转载 2021-12-27 16:21:12 · 351 阅读 · 0 评论 -
linux下使用fdisk对磁盘进行分区
在实际生产服务器中,会遇到磁盘空间不足,临时挂载磁盘扩大容量的问题,如果所加磁盘空间小于2TB,可以使用fdisk完成,如果大于2TB请用parted进行分区;一般建议linux服务器规划使用lvm对磁盘进行逻辑管理。接下来演示如何使用fdisk对磁盘进行分区格式化并开机自动挂载。分4步走:添加磁盘——分区——格式化并挂载——设置开机自动挂载首先添加一块虚拟磁盘5G容量:执行fdisk -l查看分区详情,可以看到多了一个/dev/sdb 5g的可用空间执行fdi...转载 2021-12-21 17:04:05 · 1777 阅读 · 0 评论 -
Linux内存管理中对PAGE_OFFSET的理解
Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G。Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为"内核空间".而将较低的3G字节(从虚拟地址 0x00000000到0xBFFFFFFF),供各个进程使用,称为"用户空间")。因为每个进程可以通过系统调用进入内核,因此,Linux内核由系统内的所有进程共享。于是,从具体进程的角度来看,每个进...转载 2021-12-14 11:50:15 · 3194 阅读 · 0 评论 -
linux下通过debugfs查看Emmc使用状态
EMMC芯片是有使用寿命的。 确认EMMC器件的NAND FLASH类型,是MLC还是TLC,一般是TLC,器件手册标称1000-3000次,取平均值2000次作为评估。 EMMC寿命对照表: 挂载debugfs到debug目录:mount -t debugfs none /sys/kernel/debug 进入/sys/kernel/debug/mmc0/mmc0:0001/目录,有以下几个文件(以我A40/T3平台为例): 查看 ext_csd 文件后为以上的.原创 2021-12-02 14:54:16 · 10371 阅读 · 0 评论 -
NANDflash常见问题汇总
转载:https://blog.youkuaiyun.com/MENGHUANBEIKE/article/details/87184421掉程序(这里专指使用NAND flash的主板掉程序),这是一个让工程师浑身发毛的问题,特别是用着用着程序就没有了,往往这个时候很多工程师都无法下手,问题出现的时候你可能根本不在旁边,无法看到问题现象,而且通过测量信号也很难发现问题的原因,这个时候很多工程师可能会采用更换主板器件的方式,用排除法来定位问题,基本上换一个NAND flash就可以解决问题了。这个时候很多工程师可能.转载 2021-09-08 11:56:55 · 2985 阅读 · 0 评论 -
遇到Nand Flash坏块怎么处理?
转载:https://blog.youkuaiyun.com/MENGHUANBEIKE/article/details/87182824Nand Flash存储器是Flash存储器的一种,为固态大容量内存的实现提供了廉价有效的解决方案。NAND存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,如嵌入式产品中包括数码相机、记忆卡、体积小巧的U盘等。1989年,东芝公司发表了Nand Flash结构,强调降低每比特的成本,更高的性能,并且像磁盘一样可以通过接口轻松升级。经过十几年的发展,NAND应用转载 2021-09-08 11:55:34 · 6572 阅读 · 0 评论 -
Nand Flash基础知识与坏块管理机制的研究
转载:https://blog.youkuaiyun.com/MENGHUANBEIKE/article/details/87180719概述Flash名称的由来,Flash的擦除操作是以block块为单位的,与此相对应的是其他很多存储设备,是以bit位为最小读取/写入的单位,Flash是一次性地擦除整个块:在发送一个擦除命令后,一次性地将一个block,常见的块的大小是128KB/256KB,全部擦除为1,也就是里面的内容全部都是0xFF了,由于是一下子就擦除了,相对来说,擦除用的时间很短,可以用一闪而过转载 2021-09-08 11:53:25 · 2942 阅读 · 0 评论 -
DDR存储颗粒度大小
总结:DDR存储结构,从大到小排列依次是:channel/rank/chip/bank/row/col/cell, DDR/GDDR/HBMDDR/GDDR/HBM请参考文献1.ddr的层级结构一个soc或者PC上的ddr都是有很多颗ddr single chip组成的。这么多颗ddr又组成了不同的层级。这些层级从大到小分为:channel->rank->chip->bank->row->col->cell其中channel->rank-&g转载 2021-07-30 17:37:59 · 8813 阅读 · 0 评论