0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

针对Ampere Altra处理器的MongoDB优化指南

安晟培半导体 来源:安晟培半导体 2023-07-20 10:10 次阅读

概述

MongoDB 是一个流行的面向文档的,跨平台开源 NoSQL 数据库。其灵活的数据模型能支持存储具有完整索引支持和复制的非结构化数据。根据 DB-Engines 的数据,截至 2023 年 1 月,MongoDB 是第五大最受欢迎的数据库。它是用 c++ 编写的,旨在为 web 应用程序提供可扩展的高性能数据存储解决方案。

本指南的目的是描述在 AmpereAltra处理器上以最佳方式运行 MongoDB 的一些技术参考

01构建先决条件

以高性能方式运行应用程序首先要正确构建应用程序并使用适当的编译器标志。当在 AmpereAltra处理器上从源码开始构建并运行应用程序时,我们建议使用 GCC 编译器版本 10 或更高的版本。较新版本的编译器往往对新的处理器特性有更好的支持,并结合了更高级的代码生成技术。

我们的测试使用 CentOS Stream 8 作为操作系统

从 SCL 存储库下载并安装了 GCC 11:

yum -y install scl-utils scl-utils-build 
yum -y install gcc-toolset-11.aarch64 
scl enable gcc-toolset-11 bash

对于 Ubuntu 22.04 LTS 和 Debian 等其他操作系统,GCC 11 也是可用的,可以直接从各自的存储库安装。

02构建和安装

MongoDB 可以从操作系统包管理器提供的存储库中安装,也可以直接从源代码构建。全面的 MongoDB 安装指南可以在官方文档中找到。我们建议从源代码安装,以获得更好的灵活性,以及控制和配置特定模块的能力。

为了构建针对 AmpereAltra处理器家族优化的 MongoDB,可以在编译阶段添加可以利用硬件特性的额外编译选项。用于编译的 MongoDB 源代码可以从 MongoDB 下载页面获得。本指南使用稳定版本 MongoDB 6.0.3。从源代码安装需要某些库和附加模块,它们将被编译成二进制文件。

MongoDB 安装指南:https://github.com/mongodb/mongo/blob/master/docs/building.md

MongoDB 下载页面:

https://github.com/mongodb/mongo

执行以下步骤来安装依赖项。

yum -y install libcurl-devel python39 python39-devel openssl-devel
yum -y install zlib-devel git wget xz-devel
yum -y groupinstall "Development Tools"

要支持 https 连接,请从各自的 git 存储库下载这些附加源代码的最新代码。

git clone [https://github.com/mongodb/mongo](https://github.com/mongodb/mongo)
git checkout -b myr6.0.3.rc2 r6.0.3-rc2

需要 Python 3.7+,并且必须安装几个 Python 模块,运行命令:

python3 -m pip install -r etc/pip/compile-requirements.txt

编译

diff a/src/mongo/db/stats/counters.h b/src/mongo/db/stats/counters.h
224a225,226
>   static_assert(sizeof(decltype(_together)) <= stdx::hardware_constructive_interference_size,
>          "cache line spill");

python3 buildscripts/scons.py 支持许多编译选项,如 CC, CFLAGS 等。

# get help of scons, such as define CXX=, CC= 
python3 buildscripts/scons.py -h
# Note: configure g++ and gcc path
# --force-jobs is CPU core number
python3 buildscripts/scons.py --force-jobs=8040 DESTDIR=

MongoDB 配置

在本指南中,MongoDB 被配置为使用 WiredTiger 存储引擎和 snappy 作为块和日志压缩器。请参考附录中显示的 mongodb.conf 文件配置服务器。

#start the server
$MongoDB_Install_Dir/bin/mongod --config mongod_conf --storageEngine wiredTiger
#stop the server
$MongoDB_Install_Dir/bin --config mongod_conf --shutdown

03性能优化

有数百种设置可以改变 MongoDB 的功能和性能。下面列出的只是一些可以使用的更常见的调节变量。推荐参考 MongoDB 文档了解所有设置详情。

cachesizeGB

定义了内部使用的缓存最大值,WiredTiger 将其适用于所有数据。

增加 cacheSizeGB 可以减少磁盘 io 的影响,提高读写性能。

使用“db.serverStatus(). wiredtiger”命令检查“maximum bytes configured”(cacheSizeGB或默认设置配置的最大缓存大小)和“bytes current in the cache”(当前缓存中的数据大小)。

Eviction 优化

当应用程序接近最大缓存大小时,WiredTiger 开始清除,以防止内存使用增长过大,遵循“最近最少使用”算法。" eviction=(threads_min=X) "是正在运行的 WiredTiger Eviction 工作线程的最小数量,取值必须在 1 到 20 之间。

" eviction=(threads_max=X) "是正在运行的WiredTiger Eviction工作线程的最大数量。取值必须在 1 到 20 之间。这应该与 MongoDB 的 threads_min 设置相匹配。

#get
db.adminCommand({getParameter: 1, wiredTigerEngineRuntimeConfig: "eviction"})
{
 wiredTigerEngineRuntimeConfig: 'eviction=(threads_min=4,threads_max=8)',
 ok: 1
}
#set
db.adminCommand({setParameter: 1, wiredTigerEngineRuntimeConfig: "eviction=(threads_min=4,threads_max=8)"})

concurrentTransactions

iredTiger 使用 ticket 来控制存储引擎同时处理的读/写操作的数量。默认值是 128,在大多数情况下都很有效的。如果 ticket 降为 0,则后续所有操作都排队等待新的 ticket。长时间运行的操作可能会导致可用 ticket 的数量减少,从而降低系统的并发性。例如,增加 ticket 的配置值可以增加并发性。

#读取当前值
db.serverStatus().wiredTiger.concurrentTransactions
{
 write: { out: 0, available: 128, totalTickets: 128 },
 read: { out: 0, available: 128, totalTickets: 128 }
}


#修改值
db.adminCommand({setParameter: 1, wiredTigerConcurrentWriteTransactions: 256})
{ was: 0, ok: 1 }


db.adminCommand({setParameter: 1, wiredTigerConcurrentReadTransactions: 256})
{ was: 0, ok: 1 }

journalCompressor

指定用于压缩 WiredTiger 日志数据的压缩类型。压缩操作会消耗额外的 CPU 资源,但也最小化了存储消耗。

blockCompressor

指定集合数据的默认压缩。在创建集合时,可以在每个集合的基础上重置此设置。当然压缩操作会消耗额外的 CPU 资源,但也最小化了存储消耗。

64K PAGESIZE

内核 PAGESIZE 建议设置为 64K。可以使用命令“getconf PAGESIZE”来确定。PAGESIZE 是一个内存页的大小,以字节为单位,在编译内核时配置。使用较大的页面可以减少将虚拟页面地址转换为物理页面地址的硬件延迟。延迟的减少是由于硬件翻译缓存(如 translation lookaside buffer,TLB)的效率得到了提高。因为硬件转换缓存只有有限数量的条目,所以使用更大的页面大小会增加缓存中每个条目可以转换的虚拟内存量。这不但增加了应用程序可以访问的内存量,而且不会导致硬件转换延迟。

Transparent Huge Pages

透明大页(Transparent Huge Pages, THP)是一种 Linux 内存管理系统,它通过使用更大的内存页,减少了在具有大量内存的机器上 TLB(Translation Lookaside Buffer)查找的开销。然而,在启用 THP 的情况下,数据库工作负载通常表现不佳,因为它们往往具有稀疏而非连续的内存访问模式。在 Linux 上运行 MongoDB 时,应该禁用 THP 以获得最佳性能。

echo never > /sys/kernel/mm/transparent_hugepage/enabled

大多数类 unix 操作系统,包括 Linux 和 macOS,都提供了在每个进程和每个用户的基础上限制和控制系统资源(如线程、文件和网络连接)使用的方法。这些“限制”可以防止单个用户使用过多的系统资源。有时,这些限制的默认值比较低,这可能会在正常的 MongoDB 操作过程中导致许多问题。

要为这些版本配置 ulimit 值,请创建一个名为 /etc/security/limits.d/99-mongodb-nproc.conf  的文件,并添加新值以提高该进程的限制阈值。

echo "* soft  fsize    unlimited" | sudo tee -a /etc/security/limits.conf
echo "* hard  fsize    unlimited" | sudo tee -a /etc/security/limits.conf
echo "* soft  cpu     unlimited" | sudo tee -a /etc/security/limits.conf
echo "* hard  cpu     unlimited" | sudo tee -a /etc/security/limits.conf
echo "* soft  as      unlimited" | sudo tee -a /etc/security/limits.conf
echo "* hard  as      unlimited" | sudo tee -a /etc/security/limits.conf
echo "* soft  memlock   unlimited" | sudo tee -a /etc/security/limits.conf
echo "* hard  memlock   unlimited" | sudo tee -a /etc/security/limits.conf
echo "* soft  nofile    64000" | sudo tee -a /etc/security/limits.conf
echo "* hard  nofile    64000" | sudo tee -a /etc/security/limits.conf
echo "* soft  nproc    64000" | sudo tee -a /etc/security/limits.conf
echo "* hard  nproc    64000" | sudo tee -a /etc/security/limits.conf

为您的部署配置足够的文件句柄(fs.file-max)、内核 pid 限制(kernel.pid_max)、每个进程的最大线程数(kernel.threads-max)和每个进程的最大内存映射区域数(vm.max_map_count)。对于大型系统,以下值是不错的参考值:

sysctl -w vm.max_map_count = 98000
sysctl -w kernel.pid_max = 64000
sysctl -w kernel.threads-max = 64000
sysctl -w vm.max_map_count=128000
sysctl -w net.core.somaxconn=65535

开始调优并使用吞吐量-性能配置文件

tuned-adm profile throughput-performance

04附录

MongoDB conf file

processManagement:
  fork: true
net:
  bindIp: %SERVER%
  port: %PORT%
storage:
  dbPath: %DATA_ROOT%/%PORT%
  engine: wiredTiger
  wiredTiger:
   engineConfig:
     journalCompressor: snappy
     cacheSizeGB: 30
   collectionConfig:
     blockCompressor: snappy


systemLog:
  destination: file
  path: "%DATA_ROOT%/%PORT%/mongod.log"
  logAppend: true
storage:
  journal:
   enabled: true

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19259

    浏览量

    229652
  • 数据库
    +关注

    关注

    7

    文章

    3794

    浏览量

    64362
  • 开源
    +关注

    关注

    3

    文章

    3309

    浏览量

    42471
  • nosql
    +关注

    关注

    0

    文章

    39

    浏览量

    9997
  • Ampere
    +关注

    关注

    1

    文章

    66

    浏览量

    4541

原文标题:安博士讲堂|针对 Ampere® Altra® 处理器的 MongoDB 优化指南

文章出处:【微信号:AmpereComputing,微信公众号:安晟培半导体】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Ampere推出业内首款拥有最多内核数量的云原生处理器系列

    Ampere Altra系列提供了解决各种工作负载的灵活性,并且Ampere正在与生态系统中的伙伴合作,以满足客户的特定需求。
    发表于 06-28 16:44 1531次阅读

    业界首款!Ampere发布有80个核心的ARM处理器

    今天晚上,Ampere发布了Ampere Altra处理器,官方称这是业界首款80核服务处理器
    的头像 发表于 03-04 10:11 2600次阅读

    Ampere发布业内首款80核ARM架构64位处理器Altra 并已开始向云服务和边缘计算客户出样

    高性能计算公司Ampere今日发布了业内第一款80核ARM架构64位处理器Altra,其用于服务、数据中心产品,目标是与Intel、AMD所代表的x86阵营竞争。
    发表于 03-04 11:33 1337次阅读

    Ampere全新推出业界首款80核服务处理器Ampere Altra处理器

    安晟培半导体科技有限公司(Ampere Computing)于今日正式发布全新一代Ampere Altra处理器,此款产品是业界首款搭载80个内核数量的服务
    发表于 03-05 07:53 1328次阅读

    安晟培半导体Ampere Altra处理器推出,应用于云和边缘计算数据中心中

    3月4日消息,据国外媒体报道,安晟培半导体科技有限公司(Ampere Computing,简称“安晟培半导体”)发布Ampere Altra处理器,这是业界首款搭载80个内核数量的服务
    的头像 发表于 03-04 17:03 3160次阅读

    128核云原生新力作:Ampere® Altra® Max性能参数公布,提升50%!

    Ampere Altra Max的实验室的测试结果显示,在进行AES-256-gcm加密计算时,它可以加密的数据块比Ampere Altra多出57%,所用密钥大小从16到16K字节不
    发表于 03-15 17:12 2248次阅读

    详细解说Ampere Altra性能测试与结果对比

    现代云对更高的性能,更好的可扩展性,能源效率的需求在不断增长。去年年初发布的业内首款云原生处理器AmpereAltra,以全新设计以满足现代云的需求,具有令人瞩目的整数性能,高内核数和出色的能源效率等特点,Ampere Altra
    的头像 发表于 03-24 15:13 7352次阅读
    详细解说<b class='flag-5'>Ampere</b> <b class='flag-5'>Altra</b>性能测试与结果对比

    Ampere® Altra® Max 对比测试数据公布,性能能效双领先

    ,软件架构得以重建,就如同搬进新家时,家具需要因地制宜重新摆放。   2020 年,面向云计算的新时代,Ampere Computing 设计并推出了第一款云原生处理器——80 核 Ampere® 
    的头像 发表于 04-02 11:30 4052次阅读
    <b class='flag-5'>Ampere</b>® <b class='flag-5'>Altra</b>® Max 对比测试数据公布,性能能效双领先

    Ampere Altra处理器实现Arm架构运行虚拟机

     近日,微软推出了基于 Ampere Altra 云原生处理器的 Azure 虚拟机(VM)。
    的头像 发表于 04-10 10:16 3445次阅读

    HPE正式发布搭载Ampere云原生处理器的HPE ProLiant RL300 Gen11平台

    在今年的 HPE Discover 2022 全球峰会上,HPE 宣布正式发布搭载 Ampere AltraAmpere Altra Max 云原生
    的头像 发表于 07-13 11:40 2207次阅读

    Ampere全新AmpereOne系列处理器,多达192个单线程Ampere

    强调Ampere凭借过去Ampere AltraAmpere Altra Max处理器创建了云
    发表于 05-23 11:44 497次阅读

    Ampere发布AmpereOne系列处理器,单颗处理器支持最高192个物理核心

    AmpereOne出现以前,Ampere Altra系列最多128核心,新的AmpereOne则是从136核起步,最多192核心。所以,AmpereOne可以看做是Ampere Altra
    发表于 06-02 10:43 626次阅读
    <b class='flag-5'>Ampere</b>发布AmpereOne系列<b class='flag-5'>处理器</b>,单颗<b class='flag-5'>处理器</b>支持最高192个物理核心

    Ampere Altra系列处理器的锁和内存序

    的 Arm 版本在功能上可以很好地工作,但随着核心数量的增加和锁的争用更加频繁,预计性能会受到影响。Ampere AltraAmpere Altra Max 支持 LSE,并配备
    的头像 发表于 06-07 17:36 1471次阅读
    <b class='flag-5'>Ampere</b> <b class='flag-5'>Altra</b>系列<b class='flag-5'>处理器</b>的锁和内存序

    针对Ampere Altra系列处理器的Memcached优化指南

    Memcached 是一个开源的内存键值数据存储系统,通常用于缓存任意类型的小块数据,如字符串,或数据库和 API 调用结果中的对象。由于其基于内存的特性,Memcached 旨在通过在 RAM 中缓存数据和对象来加速动态 web 应用程序,并减少数据库查找。它是云计算中最具开创性的缓存存储之一,至今仍很受欢迎。
    的头像 发表于 08-08 09:28 688次阅读

    基于Ampere Altra 系列处理器的一系列平台为 AI 高效赋能

    ,‘芯’未来”的主题,Ampere 在本次活动上展示了基于 Ampere Altra 系列处理器的一系列平台。凭借高性能、低功耗、可扩展性等卓越特性,基于
    的头像 发表于 09-21 09:13 880次阅读