Hugemem Kernel Explained

2、Elixir与Erlang:构建高可用系统的利器 本文介绍了Elixir与Erlang在构建高可用系统方面的优势,深入探讨了Erlang的并发机制、容错能力以及分布式特性,并结合实际应用场景展示了其在服务器端开发中的强大能力。此外,还提供了学习资源和交流平台,帮助开发者快速上手并深入实践。 阅读详情


 红旗DC系列Linux操作系统(x86平台)中带有四类核心:

    * UP (支持单内核)
    * SMP (支持多内核)
    * hugemem
    * Icc* (用intel C编译器编译的核心)


其中hugemem核心往往引起很多困惑,这里希望能一劳永逸地把hugemem解释清楚。


Hugemem vs. SMP

x86平台下, 红旗DC4.1和5.0所带的smp和hugemem核心都打开了PAE支持,也就是说都可以支持4G以上的物理内存。引入hugememe核心的目的_不是_支持超过4G物理内存(SMP核心就可以支持了),而是更稳定地支持大内存x86系统(所谓大内存可以简单理解为超过12G内存的系统)。


smp和hugemem核心的 _唯一_区别是hugemem核心中打入了4G/4G补丁,使用4G/4G补丁可以将直接映射的内核数据代码地址空间从1G扩大到4G,将进程的虚拟地址空间也由 3G扩大到4G。当物理内存过多时,管理这些物理内存的工作本身会占用不少宝贵的内核地址空间(所谓低端内存),此时虽然总的物理内存还有不少空闲,由于低端内存耗尽,也可能会导致内存紧张,触发OOM (Out of memory) killer,导致应用终止甚至核心崩溃。


如果超过12G物理内存,一般建议使用hugemem内核。不过,hugemem会带来一定的性能损失。


以上说明对于一般用户应该足够了,如果想了解4G/4G补丁的更多细节,请继续往下看...

大内存x86系统带来的问题


4G/4G补丁主要应用于大内存x86系统(所谓大内存可以简单理解为超过12G内存的系统),这样的系统往往需要更多的内核地址空间和用户地址空间。

在x86架构下,我们知道虚拟地址空间的大小为4G。在这4G空间中,用户空间占3G (0x00000000到0xbfffffff),核心空间占1G(0xc0000000到0xffffffff)。这样的分配策略成为3G/1G分配。这种分配方式对于拥有1G物理内存以下的系统是没有任何问题的,即使超过1G物理内存,3G/1G分配策略也没有什么问题,因为内核可以在高端内存区域 (物理地址1G以上的内存)中存放一些内核数据结构(比如页缓冲等)。然而,随着物理内存的增多,3G/1G分配策略的问题也逐渐会暴露出来。这是因为一些关键的内核数据结构(比如用于管理物理内存的mem_map[])是存放在1G核心空间之内的。对于32G内存的系统,mem_map[]会占用近 0.5G的低端内存(物理地址896M以下的内存),这样留给核心其他部分的内存就不到所有内存的1.5%;而对于64G内存的系统,mem_map[] 本身就会耗尽所有的低端内存,造成系统无法启动。把mem_map[]放到高端内存的做法也不太实际,因为mem_map[]和内存管理,体系结构相关底层实现,文件系统以及驱动等几乎所有的核心的关键部分均有联系。

4G/4G的作用

与3G/1G不同,4G/4G分配方式可以使核心空间由1G增加到4G,而用户空间也由3G增加到4G。从 /proc/PID/maps 文件中可以直观地看到4G/4G所起的作用:


00e80000-00faf000 r-xp 00000000 03:01 175909 /lib/tls/libc-2.3.2.so

00faf000-00fb2000 rw-p 0012f000 03:01 175909 /lib/tls/libc-2.3.2.so

[...]

feffe000-ff000000 rwxp fffff000 00:00 0


从上面的maps可以看出,堆栈的栈底地址为0xff000000 (4GB 减去 16MB)。

从/proc/maps中则可以看到核心拥有了4G大小的低端内存,即使对于64G物理内存的系统,也有3.1G低端内存可供使用:


MemTotal: 66052020 kB

MemFree: 65958260 kB

HighTotal: 62914556 kB

HighFree: 62853140 kB

LowTotal: 3137464 kB

LowFree: 3105120 kB


相比3G/1G分配策略,对于4G物理内存系统,使用4G/4G分配可以增加低端内存达3倍以上,而对于32G物理内存系统,则会有更多的提升,达到原来的6倍。 理论上,4G/4G策略可以支持物理内存达200G的x86系统(如果硬件没有限制的话),即使对于这样的系统,4G/4G策略也能保证留有1G可用的低端内存。

4G/4G的代价

天下没有免费的午餐,4G/4G也是如此。4G/4G通过完全分离用户空间和核心空间的地址映射来增加低端内存,这样做会带来一些性能损失,具体而言,当发生上下文切换的时候(比如进程调用系统调用或者发生中断),必须重新装载页表(3G/1G策略下不需要加载,因为核心可以直接“借用”每个进程的页表进行内存映射),页表的重新装载后必须清空TLB(否则的话TLB中记录的映射就和新的页表不一致了),而清空TLB是一个很费时的操作,原先缓存于 TLB中的“旧”的映射会被丢掉,这一损失到还在其次(因为不经TLB直接从CPU缓存中读取页表也并不会有太大延迟),最大的损失在于清空TLB(通过操作%cr3)这个操作本身代价很高。

何时使用(or不使用)4G/4G?

对于这个问题,没有放之四海而皆准的答案。只有一些拇指定律。一般情况下,超过16G内存几乎肯定需要使用4G/4G (除非运行的应用负载很轻,不过大内存系统很少有负载轻的情况),如果负载很重(不如运行数据库进行着大量I/O操作),那么12G以上的系统就应考虑使用4G/4G。也可以通过观察空闲低端内存大小来大体判断一下(/proc/meminfo),如果空闲低端内存(LowFree)小于100M,那么就可以考虑使用4G/4G了。8G以下的系统一般不必使用4G/4G。


需要指出的是,如果需要大内存,最好的解决方法是用64位系统,而不是使用4G/4G。

 

 原文地址 http://x.uplinux.com/?2/action_viewspace_itemid_26.html

PyTorch深度学习实战(29)——变分自编码器(Variational Autoencoder, VAE) 变分自编码器 (Variational Autoencoder, VAE) 是一种结合了自编码器和概率建模的生成模型,通过编码器将输入数据映射到潜在空间中的概率分布,并通过解码器将从潜在空间采样得到的潜在变量映射回原始数据空间,实现了数据的生成和特征学习。 阅读详情

相关推荐

LAMMPS实操系列(四): 高熵合金FCC-CoCrCuFeNi的退火模拟

我们对FCC-CoCrCuFeNi的退火模拟思路主要是,首先将材料以均匀的速率用100 ps从300 K升温至1000 K,然后在1000 K的温度下平衡100 ps,随后以均匀的速率用100 ps从1000 K降温至300 K,随后通过共轭梯度下降法做静力学结构优化得到退火后的结构。由于FCC-CoCrCuFeNi高熵合金被认为是潜在的工程结构材料[1],接下来我们将对退火前后的结构进行压缩模拟,对比退火前后FCC-CoCrCuFeNi高熵合金的力学性能变化,敬请各位读者关注我们的更新。

Ceshigo_CD的博客 4837

让内核支持大内存-hugemem核心

在内核模块中想使用超过1G的内核空间,需要升级支持大内存的内核(hugemem kernel). 我使用的内核是kernel-2.6.9-22.EL,下载对应支持大内存的升级包kernel-hugemem-2.6.9-22.EL.i686.rpm. 内核 本节涉及与红帽企业 Linux 4 内核相关的问题。 红帽企业 Linux 4 包括一个叫做 hugemem 的新内核。这个内核支持每进程 4GB 用户空间(其它内核只支持 3GB)和 4GB 直接内核空间。使用这个内核允许 红帽企业

guolong201的专栏 1295

FIFO Generate IP核使用——FIFO写操作详解及Status Flags页配置

本文介绍了FIFO的写操作及Status Flags页的配置信息。

u011565038的博客 2284

[转]Hugemem Kernel Explained

最近看到手上有一台数据库(rac中的一个节点),是32位RHEL,但是内存有8G,然后研究了一下,发现用了hugemem内核,故搜索了一些资料,转载之~ 其他转载的:32位Linux设置超大Oracle SGA的分析 ...

cuiding8243的博客 219

嵌入式音频架构 - AudioWeaver 整体概念

AudioWeaver 是DSP Concept公司推出的基于嵌入式平台的音频框架。由AWE Core embedded processing engine 和 Audio Weaver Designer IDE 组成。 Audio Weaver Designer 有三个版本,ST Edition, Standard Edtion 和 Pro Edtion。 Audio Weaver Designer界面: Audio Weaver 的整体使用架构: AWD算法流文件,AWS配置脚本文件,AWB嵌入式b

甲客实验室 6878

BDD测试之Behave使用入门

BDD测试(Behavior-Driven Development Testing)是一种基于“行为驱动开发”(BDD)理念。

想要成为酷盖但是失败的小明 580

如何使linux扩展使用 大内存

HugePages在linux kernel 2.6被完整引进,其目的是为了提供更大的内存页面以便于更好的支持大内存。uname  -a        在linux中,默认的内存页面是4096字节,而现行物理设备中,内存动辄几十G,当系统运行内存较大的应用程序(比如数据库)时,过小的内存页面会产 生大量的TLB miss和缺页中断,将大大降低程序性能。Hugepages提供了2M

怀素的专栏 2634

FPGA实战 —— 基于UART的多设备串口通信系统设计

本文深入探讨了基于FPGA的多设备UART串口通信系统设计。针对工业控制与物联网应用中一对多通信的需求,文章对比了共享总线式、多路独立式等硬件连接方案,并详细阐述了可配置UART IP核、波特率自适应算法以及多路数据仲裁与分发逻辑等核心设计要点。最后,通过一个四传感器采集节点的实战案例,展示了从硬件连接到Verilog代码实现的完整系统构建过程。

weixin_29172963的博客 234

Linux OOM Killer详解

在Linux操作系统中,内存管理至关重要。当系统内存耗尽时,如果不采取措施,会导致系统崩溃。为了解决这个问题,Linux内核引入了一种保护机制——OOM Killer(Out-Of-Memory Killer)。当系统内存耗尽时,OOM Killer会选择并终止一些进程,以释放内存,确保系统继续运行。本博客将详细介绍OOM Killer的技术原理、工作机制,并通过实际场景举例说明其应用。Linux OOM Killer是一种重要的内存保护机制,在系统内存耗尽时通过终止进程来释放内存,确保系统继续运行。

抛物线的博客 2403

基于matlab版本的三维直流电法反演算法

可以使用RESINVM3D工具包等现成的MATLAB工具进行三维直流电法反演。反演问题求解:基于MATLAB的反演问题求解算法实现和应用,包括反演问题数值模拟、反演问题参数优化和反演问题结果分析。希望这个代码示例能帮助你入门三维直流电法反演。如果有更具体的需求或问题,可以进一步探讨。反演过程中可能需要调整正则化参数和优化算法的设置。需要根据实际问题实现,可能涉及复杂的数值计算。

ytttr873的博客 668

网络抓包实战:如何捕获与解析802.1Q VLAN标签报文

在网络通信中,数据包是信息传输的基本单元,而VLAN(虚拟局域网)技术通过在数据链路层插入802.1Q标签,实现了网络流量的逻辑隔离与高效管理。其核心原理是在标准以太网帧头中嵌入4字节的VLAN标识,使交换机能够根据VID(VLAN ID)进行精准转发。掌握VLAN报文的捕获与解析技术,对于网络故障排查、安全审计和性能优化具有重要价值,尤其在需要验证网络隔离策略或诊断Trunk链路异常时。本文聚焦于使用Wireshark工具,结合端口镜像等实操方法,详细演示如何抓取并解读携带802.1Q标签的原始报文,帮助

weixin_33417488的博客 383

【转】一篇关于32位Linux内核使用大内存的文章——Hugemem Kernel Explained  &nb

红旗DC系列Linux操作系统(x86平台)中带有四类核心: UP (支持单内核) SMP (支持多内核) hugemem Icc* (用intel C编译器编译的核心) 其中hugemem核心往往引起很多困惑,这里希望能一劳永逸地把hugemem解释清楚。 Hugemem vs. SMP x86平台下, 红旗DC4.1和5.0所带的smp和hugemem核心都打开了PAE支持,也...

weixin_30564785的博客 204

Yocto系列讲解[入门篇]36 - 编译arm虚拟机qemuarm

玩一下qemuarm,因为之前用的x86架构

fulinux的博客 2571

Hugemem Kernel Explained [转]

这篇文章几个月前就读过,现在忘得也七七八八了。当时读的时候是纯粹的研究下,现在再读是因为有实际需求里面涉及到这个,虽然已经更改用了4G/4G。感觉这次读起来更有感触。 文章中所说的发生 out of mem...

cuiding8243的博客 150

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Linux内核物理内存管理

标准Linux内核对于物理内存的管理采用1:3的分配比例,即物理内存的1/4为内核空间(kernel space),剩下的3/4为用户进程空间(user space),因此,在一台4G内存的服务器上,用户进程可使用的内存最大也就是3G。当进程被内核调入CPU运行时,相应的PAE寄存器也会被调入,即使它和别的进程都访问0x08344的地址,但由于PAE寄存器不同,不同的地址空间数据会被调入4G以内的

1409

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

linux out of memory分析

Linux Out-of-Memory(OOM) Killer       Linux有一个特性:OOM Killer,一个保护机制,用于避免在内存不足的时候不至于出现严重问题,把一些无关的进程优先杀掉,即在内存严重不足时,系统为了继续运转,内核会挑选一个进程,将其杀掉,以释放内存,缓解内存不足情况,不过这种保护是有限的,不能完全的保护进程的运行。     在很多情况下,经常会看到还有剩

Kevin的专栏 3万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

让Linux32位支持4G以上内存

主要需要2个方面设置 1.bios:在bios里开启对大内存的设置 2.安装支持大内存的kernel Centos5上安装方法 centos 5.0 默认安装 for i386的内核不支持 4g+的内存 需要安装上kernel-hugemem CODE:yum install kernel-hugemem结果发现 centos 下面 没有 ke...

weixin_33699914的博客 297

linux-kernel(内核)升级,降级与使用

1,查看当前linux内核版本命令 [root@ ~]uname -a Linux critical-drum-1.localdomain 4.12.10-1.el7.elrepo.x86_64 #1 SMP Wed Aug 30 13:00:07 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux [root@ ~]uname -r 4.12.10-1.el7.el...

network_dream的博客 3874

Out of memory: Kill process 解决

Linux有一个特性:OOM Killer,一个保护机制,用于避免在内存不足的时候不至于出现严重问题,把一些无关的进程优先杀掉,即在内存严重不足时,系统为了继续运转,内核会挑选一个进程,将其杀掉,以释放内存,缓解内存不足情况,不过这种保护是有限的,不能完全的保护进程的运行。 在很多情况下,经常会看到还有剩余内存时,oom-killer依旧把进程杀死了,现象是在/var/log/messages日...

pansaky的博客 3万+

Out of memory

环境: Ubuntu Server 12.04 i686 问题描述: 24G内存,空闲的有20G左右。但是内核老是报这个,动不动就杀程序Jul613:12:4400098kernel:[3112325.883069]Outofmemory:Killprocess2249(nginx)score1orsacrificechild...

weixin_33895695的博客 960

【数据结构】基于比较的排序算法 - 交换排序

本文介绍交换排序中的冒泡排序与快速排序。冒泡排序通过相邻元素比较交换,实现升序,时间复杂度最坏为O(N²),空间复杂度O(1),稳定且适合小规模有序数据。快速排序采用分治思想,以基准值划分区间,平均时间复杂度O(N log N),空间复杂度O(log N),但不稳定,实际应用中性能优异,可通过随机基准、小区间优化等提升效率。

careathers的博客 361

【数据结构-5】单链表的实现

单链表,具体来说是单向的、不带头的、不循环的链表。链表由一个一个节点组成,每个节点分为数据域和指针域,数据域存放数据,指针域存放下一节点的地址。这样,就可以根据指针域中的地址找到下一个节点,节点就串起来了构成了单链表。

weixin_44218929的博客 198

pandas 深度入门:从数据结构到一份真实销售报表

本文系统讲解Pandas核心应用,从三分钟安装到完整月度报表生成,涵盖数据读取、清洗、筛选、分组聚合、表连接、透视表与时间序列等13个关键环节。强调“先看数据再动手”,掌握Series/DataFrame/Index结构本质,熟练运用loc/iloc、merge校验、agg/transform区别,通过真实案例实现高效报表自动化,告别手动Excel操作。最后提供性能优化与高频报错解决方案,助力读者快速上手,真正实现“写二十行代码,跑三秒出结果”。

信息安全领域优质创作者|操作系统领域专家 298

C# 数据结构和特殊类型

.NET Core(现称.NET)提供丰富数据结构,优化性能与开发效率。日常开发首选List<T>和Dictionary<TKey,TValue>;高性能场景推荐Span<T>与Memory<T>减少内存分配;并发环境使用ConcurrentDictionary等线程安全集合;避免非泛型集合如ArrayList。

cccloveforever的博客 693

数据结构的基本概念和算法的初步认识

本文系统阐述数据结构与算法的基础概念,涵盖数据、数据元素、数据对象的层次关系,数据结构的三要素(逻辑结构、存储结构、数据运算),以及抽象数据类型。重点解析算法的特性与设计要求,并深入讲解时间复杂度分析的核心——大O表示法,通过“只保留最高阶项、忽略常数系数、取最坏情况”三大原则,结合实例剖析O(1)、O(n)等常见时间复杂度,揭示算法效率的本质评估方法。

ACH_YYX的博客 192

【数据结构】堆(Heap):堆的实现、建堆与堆排序

堆是一种特殊的完全二叉树,分为大堆(父节点≥孩子)和小堆(父节点≤孩子),可快速获取最值。堆通常用数组存储,通过下标计算父子关系。核心操作为向上调整(插入时)和向下调整(删除或建堆时),时间复杂度均为O(log N)。建堆可采用从后往前的向下调整法,整体复杂度为O(N)。基于堆的堆排序通过反复提取最大值实现升序排列,总时间复杂度为O(N log N),空间复杂度O(1),是高效稳定的排序算法。

2501_93577780的博客 351
上一篇: 根据年月日,计算出是星期几的牛逼公式
下一篇: 处理rm 空间不释放的问题
csallen
博客等级 码龄17年 36粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值