NapFS: A High-Performance NUMA-Aware PM File System——论文泛读

ICCD 2022 Paper 分布式元数据论文阅读笔记整理

问题

基于持久内存(PM)的文件系统需要提供大容量以满足不断增长的应用程序数据量的需求。但由于连接到一个CPU插槽的内存DIMM插槽有限,PM容量仅为数百GB(例如,单个英特尔Optane DC持久内存模块(DCPMM)为128GB/256GB/512GB[1]),因此扩展PM文件系统容量的主要方法是在CPU插槽之间添加多个PM。然而,跨socket访问数据会受到非均匀内存访问(NUMA)架构的影响,由于远程内存访问缓慢和CPU互连(如Intel Ultra Path Interconnect(UPI))的带宽有限,会降低PM文件系统的性能。

挑战

核心问题是难以同时实现:避免远程读写,访存负载均衡,计算负载均衡。

  • 在NUMA架构下,PM文件系统可以在任何socket上分配空间。为了减少远程写入,可以采用[15、16]中的首次触摸策略,在运行应用程序线程的本地socket上分配空间和写入数据。然而,首次触摸策略会导致空间利用率和流量热点[17]不平衡,而且无法避免远程读取。也可以通过在所有socket之间分配空间来采用交织策略,这可以均匀地分布数据,并缓解访问热点。但是,交织策略也会导致远程读取和远程写入。

  • PM表现出比DRAM更高的延迟和更低的带宽。因此,现有方法使用基于DRAM的NUMA架构来减少远程访问的,如数据复制[18]和数据迁移[19],但对于PM文件系统来说是昂贵的。也提出了线程迁移来减少NUMA架构下PM文件系统的远程访问[9、15、16、20],但PM的可扩展性很差,迁移线程会增加单个PM上的并发访问,导致CPU负载不平衡[17]。此外,线程迁移成本很高,需要额外的上下文切换并破坏了缓存相关性[19]。

本文方法

本文通过实验表现了NUMA对构建PM文件系统的影响,并提出:(1)完全使PM访问本地化,即使导致远程DRAM访问。远程和混合写以及混合读会导致PM吞吐量显著下降。(2)限制并发PM访问,少量线程即可使PM饱和,增加大量线程会显著降低吞吐量。

提出了NUMA感知PM文件系统NapFS,目标是以低实现成本完全避免远程PM访问并减少PM访问争用。

  • 通过数据请求委派来降低远程PM访问。构建每个socket专用IO线程池,仅负责访问本地socket上的数据。读写文件时,应用程序向相应socket的IO线程池发送文件数据请求,由IO线程从本地PM访问数据。为了缓解PM较差的可扩展性,限制了每个线程池中的IO线程数。

  • 由于工作负载通常表现出偏斜的访问模式[21],在所有socket上构建了一个全局DRAM缓存,来加速NapFS的整体性能。【很简单的缓存设计,几乎没有任何优化】

  • 通过重用现有的单socket PM文件系统(使用NOVA),构建每个socket的本地PM文件系统SockFS,每个SockFS负责持久化属于其本地socket的数据。每个socket的IO线程接收应用程序数据请求后,调用SockFS来持久化数据。对于元数据,选择一个SockFS作为主SockFS,使用主SockFS的私有命名空间维护全局命名空间,应用程序可以调用主SockFS直接执行命名空间操作。并依赖于SockFS的崩溃一致性机制来保证其自身的元数据和数据一致性。

评估结果表明,相比与其他多socketPM文件系统,NapFS将Filebench和RocksDB的吞吐量分别提高了2.2倍和1.0倍。

总结

针对多socket的PM文件系统,现有架构缺少对NUMA架构的优化,导致远程PM读写,访存负载不均衡等问题。本文实验了NUMA架构对PM的影响,提出两个设计原则(1)完全使PM访问本地化,即使导致远程DRAM访问;(2)限制并发PM访问。并设计了NUMA感知PM文件系统NapFS,包括3个技术:(1)通过数据请求委派避免远程PM访问。构建每个socket专用IO线程池,仅负责访问本地socket上的数据。(2)重用单socket PM文件系统(NOVA),构建每个socket的本地PM文件系统,仅负责存储数据,由IO线程调用。使用一个作为主FS,复制全局元数据管理。(3)所有socket上构建全局DRAM缓存,缓存数据和元数据。

<think>好的,用户遇到了一个错误,运行Ollama命令时提示“Error: unknown flag: --numa”。我需要分析这个问题并提供解决方案。首先,用户使用的命令是: `ollama run deepseek-r1:32b --numa --num_threads %OLLAMA_NumThreads% --batch_size 64 --verbose` 错误是未知的--numa标志。这说明用户可能在命令中使用了不被支持的参数。 首先,我要回忆Ollama的命令行选项。Ollama的run命令通常用于启动模型,而它的参数可能有限。根据官方文档,Ollama支持的参数可能包括--verbose,但--numa--num_threads可能不是标准参数。用户可能混淆了不同框架或工具的选项。 接下来,我需要确认Ollama是否支持这些参数。查阅Ollama的文档或帮助信息,可以通过运行`ollama run --help`来查看可用选项。假设用户没有这么做,可能不知道哪些参数有效。例如,Ollama可能允许通过环境变量设置线程数,而不是命令行参数。 另外,注意到用户使用了`%OLLAMA_NumThreads%`,这看起来像是在Windows中使用环境变量的方式,但Ollama是否支持这样的变量替换?或者用户应该直接设置环境变量,而不是在命令行中引用? 针对--numa的问题,NUMA(非统一内存访问)通常与多CPU系统相关,但Ollama可能没有直接支持该选项,或者需要特定配置。用户可能误用了其他深度学习框架的参数,比如TensorFlow或PyTorch中的设置。 接下来,我需要建议用户检查可用的参数。例如,运行`ollama run --help`来查看支持的选项。如果--numa不在其中,就需要删除该参数。同时,关于线程数的设置,可能应该使用环境变量而不是命令行参数,比如在运行命令前设置`set OLLAMA_NUM_THREADS=8`(Windows)或`export OLLAMA_NUM_THREADS=8`(Linux/Mac),然后在命令中省略--num_threads参数。 另外,用户提到的--batch_size可能也不是Ollama run的直接参数。可能需要通过模型的配置文件或不同的命令选项来设置。建议用户查阅Ollama的官方文档,确认如何正确设置线程数和批次大小。 总结解决方案步骤: 1. 移除不支持的--numa参数。 2. 检查Ollama支持的参数,使用正确的环境变量设置线程数。 3. 确保其他参数如--batch_size和--verbose的正确性。 4. 提供示例修正后的命令,并说明如何设置环境变量。 此外,用户可能需要了解如何通过Ollama的配置或模型文件调整高级参数,比如在Modelfile中指定选项。最后,建议用户参考官方文档或社区支持以获取更多帮助。</think>$\boxed{Ollama参数问题解决方案}$ 1. **错误根源定位**: ```mermaid graph LR A[无效参数--numa] --> B{可能混淆来源} B --> C[其他AI框架参数] B --> D[过时的Ollama版本] B --> E[模型特定要求] ``` 2. **参数修正指南**: ```bash # 正确的基础命令结构(Windows PowerShell环境) $env:OLLAMA_NUM_THREADS = 8 # 先设置环境变量 ollama run deepseek-r1:32b --verbose ``` 3. **高级配置通道**: ```text 通过Modelfile配置(需创建模型副本): FROM deepseek-r1:32b PARAMETER num_threads ${OLLAMA_NUM_THREADS} PARAMETER batch_size 64 ``` $\boxed{关键参数对照表}$ | 错误参数 | 合法替代方案 | 作用域 | |----------------|-----------------------------|---------------| | --numa | 系统自动管理/NVIDIA MPS | 硬件优化层 | | --num_threads | $env:OLLAMA_NUM_THREADS | 进程级控制 | | --batch_size | 模型配置文件指定 | 推理运算层 | **验证步骤**: ```powershell # 查看可用参数列表 ollama run --help | Select-String "Available Commands" # 检查环境变量生效情况 Write-Output "当前线程数: $env:OLLAMA_NUM_THREADS" ``` 建议升级到Ollama 0.1.23+版本后尝试,是否需要指导如何通过Windows注册表进行NUMA优化配置? 💻
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妙BOOK言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值