提高 NFS Azure 文件共享性能

本文内容

  1. 适用于
  2. 增加预读大小以提高读取吞吐量
  3. Nconnect
  4. 另请参阅

本文介绍如何提高 NFS Azure 文件共享的性能。

适用于

展开表

文件共享类型SMBNFS
标准文件共享 (GPv2)、LRS/ZRS

No, this article doesn't apply to standard SMB Azure file shares LRS/ZRS.

NFS shares are only available in premium Azure file shares.

标准文件共享 (GPv2)、GRS/GZRS

No, this article doesn't apply to standard SMB Azure file shares GRS/GZRS.

NFS is only available in premium Azure file shares.

高级文件共享 (FileStorage)、LRS/ZRS

No, this article doesn't apply to premium SMB Azure file shares.

Yes, this article applies to premium NFS Azure file shares.

增加预读大小以提高读取吞吐量

Linux 中的 read_ahead_kb 内核参数表示应在顺序读取操作期间“预读”或预提取的数据量。 5.4 之前的 Linux 内核版本将预读值设置为装载的文件系统 rsize(读取缓冲区大小的客户端装载选项)的等效值 15 倍。 这会将预读值设置为足够高,以便在大多数情况下提高客户端顺序读取吞吐量。

但是,从 Linux 内核版本 5.4 开始,Linux NFS 客户端使用默认 read_ahead_kb 值 128 KiB。 此小值可能会减少大型文件的读取吞吐量。 从具有较大预读值的 Linux 版本升级到具有 128 KiB 默认值的版本的客户可能会遇到顺序读取性能下降的问题。

对于 Linux 内核 5.4 或更高版本,建议将 read_ahead_kb 设置为 15 MiB 以提高性能。

若要更改此值,请在 Linux 内核设备管理器 udev 中添加规则来设置预读大小。 执行以下步骤:

  1. 在文本编辑器中,通过输入并保存以下文本来创建 /etc/udev/rules.d/99-nfs.rules 文件:

    输出复制

    SUBSYSTEM=="bdi" \
    , ACTION=="add" \
    , PROGRAM="/usr/bin/awk -v bdi=$kernel 'BEGIN{ret=1} {if ($4 == bdi) {ret=0}} END{exit ret}' /proc/fs/nfsfs/volumes" \
    , ATTR{read_ahead_kb}="15360"
    
  2. 在控制台中,通过以超级用户身份运行 udevadm 命令并重新加载规则文件和其他数据库来应用 udev 规则。 只需运行此命令一次,即可了解新文件。

    Bash复制

    sudo udevadm control --reload
    

Nconnect

Nconnect 是客户端 Linux 装载选项,通过允许在客户端与 NFSv4.1 的 Azure 高级文件服务之间使用更多 TCP 连接来大规模提高性能,同时保持平台即服务 (PaaS) 的复原能力。

nconnect 的优势

借助 nconnect,可以使用更少的客户端计算机大规模提高性能,以降低总拥有成本 (TCO)。 Nconnect 通过在一个或多个 NIC 上使用多个 TCP 通道或者使用一个或多个客户端来提高性能。 如果没有 nconnect,则需要大约 20 台客户端计算机,才能达到最大高级 Azure 文件共享预配大小提供的带宽规模限制 (10 GiB/s)。 使用 nconnect,只需使用 6-7 个客户端即可达到这些限制。 这几乎减少了 70% 的计算成本,同时大规模地提高了 IOPS 和吞吐量,(请参阅表)。

展开表

指标(操作)I/O 大小性能提升
IOPS(写入)64K、1024K3x
IOPS(读取)所有 I/O 大小2-4x
吞吐量(写入)64K、1024K3x
吞吐量(读取)所有 I/O 大小2-4x

先决条件

  • 最新的 Linux 发行版完全支持 nconnect。 对于较旧的 Linux 分发版,请确保 Linux 内核版本为 5.3 或更高版本。
  • 仅当每个存储帐户通过专用终结点使用单个文件共享时,才支持按装载配置。

nconnect 的性能影响

在 Linux 客户端上将 nconnect 装载选项与 NFS Azure 文件共享大规模配合使用时,我们实现了以下性能结果。 有关如何实现这些结果的详细信息,请参阅性能测试配置。

Screenshot showing average improvement in IOPS when using nconnect with NFS Azure file shares.

Screenshot showing average improvement in throughput when using nconnect with NFS Azure file shares.

有关 nconnect 的建议

遵循这些建议,从 nconnect 中获得最佳结果。

设置 nconnect=4

虽然 Azure 文件存储支持将 nconnect 设置为最大设置 16,但我们建议使用最佳设置 nconnect=4 配置装载选项。 目前,超出四个通道后,Azure 文件存储使用 nconnect 没有增益。 事实上,由于 TCP 网络饱和,单个客户端中单个 Azure 文件共享连接的通道超过四个可能会对性能产生负面影响。

仔细调整虚拟机大小

根据工作负载要求,请务必正确调整客户端计算机的大小以避免受到预期网络带宽的限制。 无需多个 NIC 也可实现预期的网络吞吐量。 虽然通常使用具有 Azure 文件存储的常规用途 VM,但根据工作负载需求和区域可用性,可以使用各种 VM 类型。 有关详细信息,请参阅 Azure VM 选择器。

将队列深度保持小于或等于 64

队列深度是存储资源可处理的待处理 I/O 请求数。 建议不要超过最佳队列深度 64。 如果这样做,则不会再看到任何性能提升。 有关详细信息,请参阅队列深度。

Nconnect 按装载配置

如果工作负荷需要从单个客户端使用采用不同 nconnect 设置的一个或多个存储帐户装载多个共享,则我们无法保证这些设置在通过公共终结点装载时会保留。 仅当每个存储帐户通过专用终结点使用单个 Azure 文件共享时,才支持按装载配置,如方案 1 中所述。

方案 1:(支持)使用多个存储帐户通过专用终结点进行 nconnect 按装载配置
  • StorageAccount.file.core.windows.net = 10.10.10.10
  • StorageAccount2.file.core.windows.net = 10.10.10.11
    • Mount StorageAccount.file.core.windows.net:/StorageAccount/FileShare1 nconnect=4
    • Mount StorageAccount2.file.core.windows.net:/StorageAccount2/FileShare1
方案 2:(不支持)通过公共终结点进行 nconnect 按装载配置
  • StorageAccount.file.core.windows.net = 52.239.238.8
  • StorageAccount2.file.core.windows.net = 52.239.238.7
    • Mount StorageAccount.file.core.windows.net:/StorageAccount/FileShare1 nconnect=4
    • Mount StorageAccount.file.core.windows.net:/StorageAccount/FileShare2
    • Mount StorageAccount2.file.core.windows.net:/StorageAccount2/FileShare1

 备注

即使存储帐户解析为其他 IP 地址,也不能保证该地址会保留,因为公共终结点不是静态地址。

方案 3:(不支持)在单个存储帐户上使用多个共享通过专业终结点进行 nconnect 按装载配置
  • StorageAccount.file.core.windows.net = 10.10.10.10
    • Mount StorageAccount.file.core.windows.net:/StorageAccount/FileShare1 nconnect=4
    • Mount StorageAccount.file.core.windows.net:/StorageAccount/FileShare2
    • Mount StorageAccount.file.core.windows.net:/StorageAccount/FileShare3

性能测试配置

我们使用以下资源和基准测试工具来实现并衡量本文中概述的结果。

  • 单个客户端:具有单个 NIC 的 Azure 虚拟机(DSv4 系列)
  • OS:Linux (Ubuntu 20.40)
  • NFS 存储:Azure 文件存储高级文件共享(预配 30 TiB,设置nconnect=4

展开表

大小vCPU内存临时存储 (SSD)最大数据磁盘数最大 NIC 数预期网络带宽
Standard_D16_v41664 GiB仅限远程存储32812,500 Mbps

基准测试工具和测试

我们使用了 Flexible I/O Tester (FIO),这是一款免费的开源磁盘 I/O 工具,用于基准和压力/硬件验证。 要安装 FIO,请参照 FIO 自述文件中的“二进制软件包”部分,为所选平台进行安装。

虽然这些测试侧重于随机 I/O 访问模式,但使用顺序 I/O 时会获得类似的结果。

高 IOPS:100% 读取

4k I/O 大小 - 随机读取 - 64 队列深度

Bash复制

fio --ioengine=libaio --direct=1 --nrfiles=4 --numjobs=1 --runtime=1800 --time_based --bs=4k --iodepth=64 --filesize=4G --rw=randread --group_reporting --ramp_time=300

8k I/O 大小 - 随机读取 - 64 队列深度

Bash复制

fio --ioengine=libaio --direct=1 --nrfiles=4 --numjobs=1 --runtime=1800 --time_based --bs=8k --iodepth=64 --filesize=4G --rw=randread --group_reporting --ramp_time=300
高吞吐量:100% 读取

64k I/O 大小 - 随机读取 - 64 队列深度

Bash复制

fio --ioengine=libaio --direct=1 --nrfiles=4 --numjobs=1 --runtime=1800 --time_based --bs=64k --iodepth=64 --filesize=4G --rw=randread --group_reporting --ramp_time=300

1024k I/O 大小 - 100% 随机读取 - 64 队列深度

Bash复制

fio --ioengine=libaio --direct=1 --nrfiles=4 --numjobs=1 --runtime=1800 --time_based --bs=1024k --iodepth=64 --filesize=4G --rw=randread --group_reporting --ramp_time=300
高 IOPS:100% 写入

4k I/O 大小 - 100% 随机写入 - 64 队列深度

Bash复制

fio --ioengine=libaio --direct=1 --nrfiles=4 --numjobs=1 --runtime=1800 --time_based --bs=4k --iodepth=64 --filesize=4G --rw=randwrite --group_reporting --ramp_time=300

8k I/O 大小 - 100% 随机写入 - 64 队列深度

Bash复制

fio --ioengine=libaio --direct=1 --nrfiles=4 --numjobs=1 --runtime=1800 --time_based --bs=8k --iodepth=64 --filesize=4G --rw=randwrite --group_reporting --ramp_time=300
高吞吐量:100% 写入

64k I/O 大小 - 100% 随机写入 - 64 队列深度

Bash复制

fio --ioengine=libaio --direct=1 --nrfiles=4 --numjobs=1 --runtime=1800 --time_based --bs=64k --iodepth=64 --filesize=4G --rw=randwrite --group_reporting --ramp_time=300

1024k I/O 大小 - 100% 随机写入 - 64 队列深度

Bash复制

fio --ioengine=libaio --direct=1 --nrfiles=4 --numjobs=1 --runtime=1800 --time_based --bs=1024k --iodepth=64 --filesize=4G --rw=randwrite --group_reporting --ramp_time=300

nconnect 的性能注意事项

使用 nconnect 装载选项时,应密切评估具有以下特征的工作负载:

  • 单线程和/或使用低队列深度(小于 16)的延迟敏感型写入工作负载
  • 单线程和/或使用低队列深度与较小 I/O 大小的延迟敏感型读取工作负载

并非所有工作负载都需要大规模 IOPS 或吞吐量性能。 对于规模较小的工作负载,nconnect 可能没有意义。 使用下表来确定 nconnect 是否有益于工作负载。 建议使用绿色突出显示的方案,而红色突出显示的方案则不推荐。 黄色突出显示的方案则介于二者之间。

Screenshot showing various read and write I O scenarios with corresponding latency to indicate when nconnect is advisable.

另请参阅

  • 有关装载说明,请参阅将 NFS 文件共享装载到 Linux。
  • 有关装载选项的完整列表,请参阅 Linux NFS 手册页。
  • 有关延迟、IOPS、吞吐量和其他性能概念的信息,请参阅了解 Azure 文件存储性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/658143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

炒黄金 vs 炒股:探寻投资路线的差异和各自的优势

在当前不景气的股市,人们越来越关注分散投资的方式,以期降低风险并稳定资产。炒黄金成为了一个备受关注的投资选择,与传统炒股相比,它到底有什么区别呢?本文将从多个维度深入分析这两种投资方式的差异以及各自的优势。…

企业数字化转型会遇到哪些问题?思路是怎样的?

企业数字化转型在互联网时代的迅速发展下,行业领军企业都在逐步实现数字经济的发展,响应国家号召,将数字化技术应用完全应用到自身的企业,以提升企业价值。 那企业为什么要进行数字化转型呢? 数字化转型是在企业信息化已经完成的…

【Matplotlib】科研绘图——折线图

文章目录 1、导入2、定义Font及Style3、设置图像大小及坐标刻度4、数据准备5、自定义draw6、其他设置7、效果图 1、导入 import matplotlib import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages import numpy as np import pandas as pd %…

上海泗博EtherCAT转PROFINET网关TEC-380助力汇川伺服与西门子PLC实现高效协同

背景 在食品饮料生产线中,正杯机以其高精度的定位和运动控制能力确保每个杯子的精准填充与严密封口,而这一切得益于伺服驱动器的强大支持。 浙江某饮料加工生产线,中控系统使用S7-1511PLC控制伺服驱动器作为正杯机的动力与控制核心&#xff0…

探索1688店铺所有商品API接口:一键获取海量数据,开启商业智能新篇章

1688店铺所有商品API接口技术详解 一、概述 1688店铺所有商品API接口是阿里巴巴提供的一套应用程序接口,允许第三方开发者获取指定1688店铺下的所有商品信息。通过使用这个接口,开发者可以获取到店铺内所有商品的列表、详情、属性等信息,从…

JUC并发编程-四大函数式接口、Stream 流式计算、ForkJoin并行执行任务

12. 四大函数式接口 新时代的程序员:lambda表达式、链式编程、函数式接口、Stream流式计算 函数式接口:只有一个方法的接口,可以有一些默认的方法 如:Runnable接口函数 1)Function 函数型接口 public class Functio…

二十大计算机专业证书,让你从芸芸众生中脱颖而出

目录 一. 前言 二. 计算机专业证书 三. 国内认证 3.1. 计算机技术与软件专业资格考试证书(软考) 3.2. 通信专业技术人员职业水平证书 3.3. 全国计算机等级考试证书(NCRE) 3.4. 全国计算机应用水平考试证书(NIT&a…

###C语言程序设计-----C语言学习(8)## 斐波那契数列问题,素数问题,人数分配问题。

前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。 今天,我们主要分享三个问题如何用C语言去求解,1.斐波…

Flutter使用cmd命令和调用bat文件

前言 在windows上写程序难免会遇到调用cmd命令和bat的文件去执行一些功能,使用了flutter官方的工具调用体验非常不好。 于是翻了一下有没有第三方的,找到了cmd_plus 使用了一下非常好用。 集成 使用pub搜索 cmd_plus 注意cmd是不支持web的,…

研学活动报名平台源码开发方案

一、项目背景与目标 (一)项目背景 研学活动报名平台旨在为活动组织者提供方便快捷的研学活动管理工具,同时为用户提供全面的活动搜索、报名和支付等功能。通过该系统,活动组织者能够更好地管理活动报名信息,用户也可…

【LeetCode: 25. K 个一组翻转链表 + 链表 + 递归】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

纯静态微信小程序水果商城

首页代码 <view class"container"><!-- 轮播图 --><view class"swiper-container"><swiper class"screen-swiper" indicator-dots"true" circular"true" autoplay"true" interval"300…

大学生以C语言为开始怎样学好编程呢?

大学生以C语言为开始怎样学好编程呢&#xff1f; 在开始前我分享下我的经历&#xff0c;刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;两年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些C语言学习方法和资料&#xff0c;让我不断提升自己&#xff0c;…

普通人怎么做Temu跨境电商项目?这几点要了解

随着全球电商市场的蓬勃发展&#xff0c;越来越多的人开始关注跨境电商领域。Temu作为拼多多旗下的跨境电商平台&#xff0c;以其独特的商业模式和强大的供应链能力吸引了众多普通人的关注。那么&#xff0c;作为一个普通人&#xff0c;如何才能做好Temu跨境电商项目呢?接下来…

ChatGPT可与自定义GPTs一起使用,智能AI代理时代来啦!

1月31日凌晨&#xff0c;OpenAI在社交平台公布了一个超强新功能&#xff0c;可以在ChatGPT中输入“GPTs名字”的方法&#xff0c;调用多个自定义GPTs一起协同工作。 例如&#xff0c;我想开发一款社交APP&#xff0c;1&#xff09;可以先用专业分析GPTs做一下市场调研&#xf…

小猪o2o生活通系统更新到了v24.1版本了php文件开源了提供VUE了但是车牌识别功能你真得会用吗

一.车牌识别设置项 车牌识别设置项总开关&#xff1a;系统后台-社区管理-社区配置-车牌识别配置。 平台需要开启车牌识别功能&#xff0c;其次平台可以选择车牌识别功能是由平台配置还是小区自己配置有需要提供代码的可以Q我昵称注明&#xff1a;CSDN网友。如果是平台自己配置&…

部署PXE高效批量网络装机

部署PXE高效批量网络装机 因在Cisco3850核心交换机中已开启DHCP 服务&#xff0c;因此不需要在配置DHCP服务。如果您的网络环境中也已有DHCP服务&#xff0c;也不用再配置DHCP服务了&#xff0c;直接部署PXE相关服务即可。 找一台linux系统的服务器&#xff0c;这本次试验用的是…

溯源取证-iphone取证-高难度篇

摘要&#xff1a; 本次内容主要讲解iphone8取证&#xff0c;算是年前最后一篇了&#xff0c;大家将就着看哈 本次使用的工具&#xff1a; ileappGUI.exe github一款开源且免费的移动介质取证工具 Magnet Axiom Cyber 一款付费的移动介质取证工具 DB.Browser.for.SQLite-3.12…

定制CRM客户关系管理软件的八个步骤

CRM发展要求周到的准备步骤由于丰富的功能&#xff0c;需要加以实施。因此&#xff0c;让我们仔细看看如何设计一个CRM&#xff0c;以获得最大的成功。 步骤1.设立目标 任何过程开始规划。之前建立一个客户关系管理&#xff0c;这是至关重要的写下的业务目标和确定什么样的挑战…

UnityShader(十)实现标准光照模型中的漫反射光照

基本光照模型中漫反射计算公式&#xff1a; 从公式可以看出&#xff0c;要计算漫反射需要知道四个参数&#xff1a;入射光线的颜色和强度clight&#xff0c;材质的漫反射系数mdiffuse&#xff0c;表面的法线n和光源方向I。 为了防止点积的结果为负数&#xff0c;需要使用max操…