Linux关于透明大页机制的介绍

下面就为大家详细讲解“Linux关于透明大页机制的介绍”的完整攻略。

什么是透明大页?

透明大页是Linux内核提供的一种大页机制。透明大页主要是针对多进程应用程序,通过将多个小页映射到同一个物理页框中,降低页表项的数量和TLB(快表)的负载,从而提高应用程序的性能。

如何启用透明大页?

Linux内核4.0及以上版本自带了透明大页的支持,如果要启用透明大页,可以通过如下命令进行设置:

echo always > /sys/kernel/mm/transparent_hugepage/enabled
echo always > /sys/kernel/mm/transparent_hugepage/defrag

以上命令将透明大页机制设置为开启,并将大页进行分散化处理。

如何查看透明大页的使用情况?

可以通过如下命令查看系统中透明大页的使用情况:

cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag

其中,enabled表示透明大页是否启用,defrag表示是否对大页进行分散化处理。其结果将返回always或never。

透明大页的示例说明

示例1:比较透明大页和传统页的性能差异

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <unistd.h>

#define PAGESIZE 4096 /* 4KB per page */
#define ARRAYSIZE (5L * 1024L * 1024L) /* 20MB array */
#define NUMPAGES (ARRAYSIZE / PAGESIZE)

unsigned char array[ARRAYSIZE];

static inline unsigned long long rdtsc(void)
{
    unsigned long long int x;
    unsigned a, d;

    __asm__ volatile("rdtsc" : "=a"(a), "=d"(d));

    return ((unsigned long long)a) | (((unsigned long long)d) << 32);
}

int main(int argc, char **argv)
{
    unsigned long long t1, t2;

    struct timeval tv_start, tv_stop;

    long useconds;

    int i;

    FILE * fp;

    fp = fopen("/dev/null", "w");

    if (!fp) {

        perror(" fopen error");

        exit(EXIT_FAILURE);

    }

    printf("Test normal page\n");

    gettimeofday(&tv_start, NULL);

    for (i = 0; i < ARRAYSIZE; i += PAGESIZE) {

        array[i]++;

    }

    gettimeofday(&tv_stop, NULL);

    useconds = (tv_stop.tv_sec - tv_start.tv_sec) * 1000000 +

               tv_stop.tv_usec - tv_start.tv_usec;

    printf("Time used array normal page: %ld us\n", useconds);

    printf("Test large page\n");

    gettimeofday(&tv_start, NULL);

    for (i = 0; i < ARRAYSIZE; i += PAGESIZE*512) {

        array[i]++;

    }

    gettimeofday(&tv_stop, NULL);

    useconds = (tv_stop.tv_sec - tv_start.tv_sec) * 1000000 +

               tv_stop.tv_usec - tv_start.tv_usec;

    printf("Time used array large page : %ld us\n", useconds);

    return 0;

}

以上是一个简单的C语言程序,用来测试透明大页和传统页的性能差异。

编译该程序:

gcc -o testpage testpage.c

运行该程序,输出测试结果:

./testpage
Test normal page
Time used array normal page: 1038 us
Test large page
Time used array large page : 795 us

可以看出,在使用大页的情况下,程序运行时间明显缩短,性能提升。

示例2:查看透明大页影响进程的启动时间

可以通过如下命令进行比较:

time LD_PRELOAD=libhugetlbfs.so HUGETLB_MORECORE=1G ./testpage
time LD_PRELOAD=libhugetlbfs.so HUGETLB_MORECORE=1G ./testpage

其中,使用LD_PRELOAD环境变量将libhugetlbfs.so库预加载到程序中,并通过HUGETLB_MORECORE环境变量将进程的内存增加到1GB。

运行以上命令后,输出结果分别为:

real 0m0.123s
user 0m0.075s
sys  0m0.045s

real 0m0.076s
user 0m0.017s
sys  0m0.056

可以看出,使用透明大页的进程的启动时间更短,性能更优秀。

总结

本文主要介绍了Linux关于透明大页机制的介绍,包括透明大页的概念、如何启用透明大页、如何查看透明大页的使用情况,同时也提供了两个示例说明,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux关于透明大页机制的介绍 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • 探索ORACLE之ASM概念(完整版)

    “探索ORACLE之ASM概念(完整版)”这篇文章主要介绍了ORACLE中的ASM(Automatic Storage Management)概念及其实现方式、优缺点等内容。以下为该文章的详细攻略: 概述 通过阅读该文,可以了解到何为ASM,ASM的实现方式及其提供的优缺点等内容 ASM的概念 对ASM基本概念的介绍:ASM是一种Oracle软件驱动的存储管…

    database 2023年5月21日
    00
  • php性能优化分析工具XDebug 大型网站调试工具

    下面是详细的攻略。 简介 XDebug是一款专业的PHP扩展,主要用于PHP代码的性能分析和调试。它具有以下特点: 支持代码覆盖率分析 支持性能分析 支持调试功能 支持远程调试 XDebug是一个非常强大的工具,在大型网站的调试和性能优化过程中,是不可缺少的。下面将介绍XDebug的基本用法和相关示例。 安装XDebug 在正式使用XDebug之前,需要先安…

    database 2023年5月22日
    00
  • 使用Linux的Shell脚本定时处理MySQL超时

    当我们在使用MySQL时,有时可能会遇到某些查询语句执行时间较长的情况,甚至可能出现MySQL超时的情况。这时我们可以使用Linux的Shell脚本来定时检查MySQL是否有超时的查询语句,从而及时进行处理,避免数据的丢失,提高系统的可靠性。 以下是使用Linux的Shell脚本定时处理MySQL超时的完整攻略: 步骤一:创建Shell脚本 创建一个Shel…

    database 2023年5月22日
    00
  • MySQL占用CPU过高,排查原因及解决方案

    MySQL占用CPU过高,排查原因及解决方案 MySQL 是常见的关系型数据库,它负责数据的存储和管理。在使用 MySQL 过程中,有时我们会发现 MySQL 的 CPU 占用率非常高,从而影响数据库的正常运行。本篇文章将介绍如何排查 MySQL 占用 CPU 过高的原因,并提供相关的解决方案。 排查 MySQL 占用 CPU 过高的原因 慢查询 在 MyS…

    database 2023年5月19日
    00
  • 计算机名称修改后Oracle不能正常启动问题分析及解决

    问题描述 最近在网站的后台服务器上更改了计算机名称,现在Oracle数据库无法启动了,每次尝试启动都报错。怎样才能解决这个问题呢? 解决方案 问题分析 经过排查与分析,我们发现出现问题的原因是计算机名称的更改导致了Oracle数据库在启动时无法找到正确的网络信息。由于Oracle默认会根据计算机名称来生成它的全局数据库名(Global Database Na…

    database 2023年5月22日
    00
  • 查找Oracle高消耗语句的方法

    查找 Oracle 高消耗语句的方法通常包括以下步骤: 1.使用Oracle自带的工具 Oracle 提供了一些自带的工具,可以帮助我们查找高消耗语句。其中包括: (1) Oracle Enterprise Manager(OEM) OEM 是 Oracle 提供的一款图形化管理工具,其中有一个 SQL 监控功能,可以帮助我们找到 Top SQL,进而找到高…

    database 2023年5月21日
    00
  • 查找sqlserver查询死锁源头的方法 sqlserver死锁监控

    下面是关于“查找 SQL Server 查询死锁源头的方法 SQL Server 死锁监控”完整攻略,包括以下步骤: 前置条件 在进行 SQL Server 死锁监控之前,需要先了解四个基本概念: 锁(Lock):在 SQL Server 中,锁是防止并发访问进行数据访问的机制。 事务(Transaction):事务是执行一系列相关的操作并形成一个逻辑单元,…

    database 2023年5月21日
    00
  • MySQL – change 和 modify 的区别

    表描述MySQL 中 change 和 modify 区别 更改列名 change: alter table 表名 change 旧列名 新列名 类型 只更改列属性 change: alter table 表名 列名 列名 类型 相同的列名要写两次. 更改列属性 modify: alter table 表名 列名 类型 区别:1)change 可以更改列名 …

    MySQL 2023年4月12日
    00
合作推广
合作推广
分享本页
返回顶部