我们在一个集群中使用 Lustre,该集群有大约 200TB 的存储空间、12 个对象存储目标(使用 QDR Infiniband 连接到 DDN 存储系统)和大约 160 个四核和八核计算节点。该系统的大多数用户都没有遇到任何问题,但我的任务是 I/O 密集型的。当我运行一个有 250-500 个进程同时冲击文件系统的阵列作业时,通常有 10 到 20 个进程会失败。日志文件表明 OST 上的负载超过 2,并且 Lustre 客户端返回的是坏数据或失败的read()
函数调用。
目前,我们解决我的问题的唯一方法是减少同时运行的作业数量。但这并不令人满意,因为无法提前知道我的工作量是 CPU 密集型还是 I/O 密集型。此外,仅仅降低负载并不是运行超级计算机的方法:我们希望它在负载下运行得更慢,而不是产生错误的答案。
我想知道如何配置 Lustre,以便当 OST 上的负载过高时客户端会被阻止,而不是让客户端收到坏数据。
如何配置 Lustre 以使客户端阻止?
答案1
您是否考虑过添加更多 OSS 并分散 OST?这应该会减少负载。在这种情况下,您正在使用哪种 I/O 模式?您是否有许多大文件,如果有,它们是否是条带化的?默认条带化为 1,这意味着每个文件仅驻留在 1 个 OST 上,可以按文件(创建时)或按目录(对于新文件)进行更改。
您还可以尝试增加 lustre 中的超时时间 (lctl get_param/set_param),即:
- 暂停
- ldlm_timeout