`
mryufeng
  • 浏览: 981874 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

让erlang支持Huge TLB

阅读更多
压榨linux2.6最后点内存分配性能,使用hugetlb.

Huge TLB Filesystem
   ===================

   Most modern architectures support more than one page size. For example,
   the IA-32 architecture supports 4KiB pages or 4MiB pages but Linux only
   used large pages for mapping the actual kernel image. As TLB slots are a
   scarce resource, it is desirable to be able to take advantages of the
   large pages especially on machines with large amounts of physical memory.

   In 2.6, Linux allows processes to use large pages, referred to as huge
   pages. The number of available huge pages is configured by the system
   administrator via the /proc/sys/vm/nr_hugepages proc interface. As the
   success of the allocation depends on the availability of physically
   contiguous memory, the allocation should be made during system startup.

   The root of the implementation is a Huge TLB Filesystem (hugetlbfs) which
   is a pseudo-filesystem implemented in fs/hugetlbfs/inode.c and based on
   ramfs. The basic idea is that any file that exists in the filesystem is
   backed by huge pages. This filesystem is initialised and registered as an
   internal filesystem at system start-up.

   There is two ways that huge pages may be accessed by a process. The first
   is by using shmget() to setup a shared region backed by huge pages and the
   second is the call mmap() on a file opened in the huge page filesystem.

   When a shared memory region should be backed by huge pages, the process
   should call shmget() and pass SHM_HUGETLB as one of the flags. This
   results in a file being created in the root of the internal filesystem.
   The name of the file is determined by an atomic counter called
   hugetlbfs_counter which is incremented every time a shared region is
   setup.

   To create a file backed by huge pages, a filesystem of type hugetlbfs must
   first be mounted by the system administrator. Once the filesystem is
   mounted, files can be created as normal with the system call open(). When
   mmap() is called on the open file, the hugetlbfs registered mmap()
   function creates the appropriate VMA for the process.

   Huge TLB pages have their own function for the management of page tables,
   address space operations and filesystem operations. The names of the
   functions for page table management can all be seen in $<$linux/hugetlb.h
   $>$ and they are named very similar to their ``normal'' page equivalents.

   ======================================


把erl_mseg.c稍稍改造下是可以支持的!


void
erts_mseg_init(ErtsMsegInit_t *init)
{
...
#if HAVE_MMAP && !defined(MAP_ANON)
    mmap_fd = open("/dev/zero", O_RDWR);
    if (mmap_fd < 0)
erl_exit(ERTS_ABORT_EXIT, "erts_mseg: unable to open /dev/zero\n");
#endif
...
}

mmap_fd改成指向hugetlbfs的文件句柄就好了或者最好的方法就个getenv("MMAP_FILENAME")来获取。



3
0
分享到:
评论

相关推荐

    erlang 24.0版本 win64 位

    Erlang是一种高级编程语言,特别适用于并发、分布式和实时计算系统。它的设计目标是创建一个高度可靠且可扩展的平台,尤其在电信、银行、电子商务和互联网服务等领域有着广泛的应用。Erlang 24.0是这个语言的一个新...

    erlang编程 Introducing Erlang

    Erlang支持跨节点的分布式计算,允许不同物理机器上的进程之间通信。分布式Erlang使用虚拟机(VM)的克隆,使得构建大规模分布式系统变得简单。 ### 7. 错误处理与恢复 Erlang采用“let it crash”哲学,鼓励程序...

    适用于windows版本的 Erlang25.2.3 and RabbitMQ server 3.11.9下载

    3. 分布式:Erlang天生支持分布式计算,可以在多台机器上无缝部署和运行应用程序。 4. OTP(Open Telecom Platform):Erlang的配套框架,提供了模块化、可重用的组件,便于构建大型、复杂的系统。 RabbitMQ是一个...

    erlang_版本24.3.4.4

    Erlang支持多种平台,包括Windows、Linux、macOS等。在下载otp_src_24.3.4.4压缩包后,你需要解压并按照以下步骤进行编译和安装: 1. **解压源码**:将otp_src_24.3.4.4文件解压缩到一个合适的目录,通常是在你的...

    XP能用的erlang+rabbitMQ版本

    Erlang的设计理念是支持高并发、热代码替换以及故障隔离,这使得它在构建大规模分布式系统时特别有用。而在消息队列领域,RabbitMQ是一款广泛使用的开源消息代理,它基于AMQP(Advanced Message Queuing Protocol)...

    erlang22最新下载包

    5. **并发与分布式系统支持**:Erlang以其轻量级进程和消息传递为基础的并发模型著名,新版本可能会加强这方面的能力,更好地支持分布式应用程序。 6. **编译器和工具链**:Erlang的编译器和构建工具可能也得到了...

    erlang深度分析.pdf

    Erlang遵循“让它失败”原则(Let It Crash),这种设计哲学鼓励系统在出现故障时自动重启,而不是进入不稳定状态。 #### 18. 开发环境和版本控制 Erlang通过内置工具和集成开发环境(IDE)支持便捷的代码管理。...

    最新最全rabbitmq与erlang版本匹配-2020-04-23.docx

    - 对于RabbitMQ 3.8.3,最小支持的Erlang版本是3.8.2,最高支持的Erlang版本是22.x。推荐使用Erlang 22.x,因为此版本提供了更好的性能和安全特性。 - Erlang 22.x版本不再支持HiPE(高级并发和并行执行环境),这...

    xiandiao_erlang_Erlang课后习题_

    3. **热代码更新**:Erlang支持运行时代码替换,无需停止服务即可更新和修复应用程序,这在实时系统中非常有用。 4. **容错性**:Erlang的进程模型鼓励设计出可以失败并从中恢复的系统。当一个进程出错时,它不会...

    erlang25.0 windows版本

    Erlang是一种高级编程语言,特别适用于并发、分布式和实时系统。它由Ericsson公司开发,主要用于构建高可用性、容错性和可扩展性的软实时系统。Erlang的25.0版本是该语言的一个更新,针对Windows操作系统进行了优化...

    二郎助手erlang开发工具、erlang编辑器

    为了更好地支持Erlang的开发,二郎助手应运而生,它是一款专为Elang语言定制的开发工具,旨在提升开发者的效率,提供更友好的编程环境。 二郎助手的核心特性在于其全面的Erlang支持,包括语法高亮、代码自动完成、...

    inside Erlang VM3

    - **透明分布支持**:Erlang程序可以在不同机器之间无缝通信,如同在同一台计算机上一样。 - **轻量级进程支持**:每个进程占用的内存非常小,可以创建数十万甚至更多进程。 - **系统信息完善**:ERTS提供了丰富的...

    erlang9.rar

    总而言之,Erlang9.rar是一个包含Erlang/OTP 20.0 Windows 64位安装程序的压缩包,主要用于安装Erlang环境,以支持像RabbitMQ这样的Erlang应用。Erlang以其独特的并发模型和强大的错误恢复能力,广泛应用于需要高...

    erlang programming

    6. **热升级与无中断服务**:Erlang支持代码热升级,即在不中断运行的情况下更新应用程序代码,这对于保持高可用性和服务连续性至关重要。 7. **并发性能优化**:Erlang的并发性能优化涉及进程数量的控制、消息队列...

    erlang资源

    这个“erlang资源”包含两本PDF书籍——《Erlang并发编程》和《Erlang入门手册》,它们是深入理解和学习Erlang语言的关键资料。 《Erlang并发编程》这本书可能涵盖了以下知识点: 1. **并发模型**:Erlang的并发...

    Erlang/OTP 26.2.1

    Erlang/OTP 26.2.1,Erlang,OTP,26.2.1

    Erlang官网下载过慢

    Erlang是一种面向并发的、函数式编程语言,主要用于构建高度可扩展的、容错性强的分布式系统。在IT行业中,Erlang因其强大的实时性和处理大量并发连接的能力而被广泛应用于电信、互联网基础设施和实时系统。RabbitMQ...

    ErlangB和ErlangC计算工具(exe可执行文件+excel两个)

    Erlang B和Erlang C是电信领域中两种重要的流量模型,用于预测和分析通信系统中的呼叫处理能力和拥塞情况。这两个模型由丹麦工程师Agner Krarup Erlang在20世纪初提出,至今仍广泛应用于现代通信网络的设计与优化。 ...

    Erlang和RabbitMQ安装包

    2. **分布式计算**:Erlang天生支持分布式计算,节点间通信简单高效,可以在多台机器上构建分布式应用。 3. **容错性**:Erlang的错误处理机制鼓励“失败即恢复”(fail-stop)策略,当一个进程出错时,它会立即...

Global site tag (gtag.js) - Google Analytics