静态资源
静态资源是代表主机信息的内置资源,这些信息随时间不变,例如用户进程可用的最大RAM或机器中的处理器数量。大多数静态资源由LIM在启动时确定,或在LSF检测到硬件配置更改时确定。
静态资源可用于根据二进制架构、相对CPU速度和系统配置选择特定作业的适当主机。
在支持动态硬件重配置的UNIX主机上,资源ncpus、nprocs、ncores、nthreads、maxmem、maxswp和maxtmp不是静态的。
由LIM报告的静态资源:
索引 | 度量 | 单位 | 确定方式 |
---|---|---|---|
type | 主机类型 | 字符串 | 配置 |
model | 主机型号 | 字符串 | 配置 |
hname | 主机名称 | 字符串 | 配置 |
cpuf | CPU因子 | 相对 | 配置 |
server | 主机能否运行远程作业 | 布尔值 | 配置 |
rexpri | 执行优先级 | nice(2)参数 | 配置 |
ncpus | 处理器数量 | 处理器 | LIM |
ndisks | 本地磁盘数量 | 磁盘 | LIM |
nprocs | 物理处理器数量 | 处理器 | LIM |
ncores | 每个物理处理器的核心数 | 核心 | LIM |
nthreads | 每个处理器核心的线程数 | 线程 | LIM |
maxmem | 最大RAM | MB | LIM |
maxswp | 最大交换空间 | MB | LIM |
maxtmp | /tmp中的最大空间 | MB | LIM |
主机类型(type)
主机类型是操作系统和CPU架构的组合。所有在同一计算机架构上运行相同操作系统的计算机都是同一类型。您可以在lsf.shared的HostType部分添加自定义主机类型。这个字母数字值最长可以是39个字符。
主机型号(model)
主机型号是主机类型和机器的CPU速度(CPU因子)的组合。所有具有相同相对类型和速度的主机都被分配相同的主机型号。您可以在lsf.shared的HostModel部分添加自定义主机型号。这个字母数字值最长可以是39个字符。
主机名称(hname)
主机名称指定主机用于识别自己的名称。
CPU因子(cpuf) CPU因子(通常简称为cpuf)代表主机CPU相对于集群中其他主机的速度。例如,如果一个处理器的速度是另一个的两倍,那么它的CPU因子应该是另一个的两倍。对于多处理器主机,CPU因子是单个处理器的速度;LSF自动调整主机CPU负载以考虑额外的处理器。CPU因子可以自动检测或由管理员定义。
服务器(server)
服务器静态资源是布尔值。它具有以下值:
- 如果主机配置为运行来自其他主机的作业,则为1。
- 如果主机是用于向其他主机提交作业的LSF客户端,则为0。
CPU数量(ncpus)
默认情况下,CPU数量代表机器拥有的核心数。由于大多数CPU由多个核心、线程和处理器组成,ncpus可以由集群管理员(全局或每主机)定义,以考虑以下之一:
- 处理器
- 处理器和核心
- 处理器、核心和线程
全局上,这个定义由lsf.conf或ego.conf中的参数EGO_DEFINE_NCPUS控制。ncpus的默认行为是考虑核心数(EGO_DEFINE_NCPUS=cores)。
注意:
-
在运行AIX的机器上,ncpus检测是不同的。在AIX下,检测到的物理处理器数量始终为1,而检测到的核心数量是所有物理处理器中的核心数量。线程检测与其他操作系统相同(每个核心的线程数)。
-
当lsb.params中的PARALLEL_SCHED_BY_SLOT=Y时,资源需求字符串关键字ncpus指的是插槽数量而不是CPU数量,但是lshosts输出继续显示由lsf.conf中的EGO_DEFINE_NCPUS定义的ncpus。
磁盘数量(ndisks) 磁盘数量指定了机器拥有的本地磁盘数量,由LIM确定。
最大内存(maxmem) 最大内存是机器的总可用内存,以兆字节(MB)为单位。
最大交换空间(maxswp) 最大交换空间是机器拥有的总可用交换空间,以兆字节(MB)为单位。
最大临时空间(maxtmp) 最大临时空间是机器拥有的总临时空间,以兆字节(MB)为单位。
LIM如何检测核心、线程和处理器
传统上,ncpus(逻辑CPU数量)的值等于物理CPU的数量。然而,许多CPU包含多个核心和线程,因此传统的1:1映射不再有用。一个更有用的方法是将ncpus设置为以下之一:
- 处理器的数量
- 核心数 —— 每个处理器的核心数乘以处理器的数量(这是ncpus的默认设置)
- 线程数 —— 每个核心的线程数乘以每个处理器的核心数再乘以处理器的数量
集群管理员使用lsf.conf或ego.conf中的EGO_DEFINE_NCPUS参数(而不是lsf.conf中的LSF_ENABLE_DUALCORE,或ego.conf中的EGO_ENABLE_DUALCORE)全局定义如何计算ncpus。
LIM检测并存储所有支持架构的处理器、核心和线程的数量。下图说明了守护进程、CPU和其它组件之间的信息流。
尽管ncpus的计算是全局应用的,但它可以在每个主机的基础上被覆盖。
为了正确检测处理器、核心和线程,LIM假设单台机器上的所有物理处理器都是同一类型。
在CPU架构和操作系统组合可能不支持准确检测处理器、核心、线程的情况下,LIM使用默认值:1个处理器、每个物理处理器1个核心、每个核心1个线程。如果LIM检测到它正在虚拟环境中运行(例如,VMware®),每个检测到的处理器同样被报告(作为一个单核心、单线程的物理处理器)。
LIM只检测操作系统识别的硬件。LIM的检测使用处理器或操作系统特定的技术(例如,Intel CPUID指令,或Solaris kstat()/core_id)。如果操作系统没有识别出CPU或核心(例如,如果一个较旧的操作系统没有识别出四核心处理器,而将其误检为双核心),那么LIM也不会识别它。
注意: RQL(资源和队列限制)标准化从不将线程考虑在内。考虑一个启用了超线程的Pentium处理器:线程不是完整的CPU,因此将它们视为CPU会人为降低系统负载。
在AIX上的ncpus检测 在运行AIX的机器上,ncpus的检测是不同的。在AIX下,检测到的物理处理器数量始终是1,而检测到的核心数量始终是所有物理处理器中的核心总数。线程的检测与其他操作系统相同(每个核心的线程数)。
定义 ncpus — 处理器、核心或线程
集群管理员必须定义如何计算 ncpus(逻辑CPU数量)。通常,可用作业槽位的数量等于 ncpus 的值;然而,在EGO资源组级别可以重新定义槽位。ncpus 的定义会在整个集群中全局应用。
操作步骤 打开 lsf.conf 或 ego.conf 文件。
UNIX 和 Linux 系统: LSF_CONFDIR/lsf.conf LSF_CONFDIR/ego/cluster_name/kernel/ego.conf
Windows 系统: LSF_CONFDIR\lsf.conf LSF_CONFDIR\ego\cluster_name\kernel\ego.conf
重要提示:只有当 LSF 集群中启用了 EGO 时,您才能在 ego.conf 中设置 EGO_DEFINE_NCPUS。如果未启用 EGO,则必须在 lsf.conf 中设置 EGO_DEFINE_NCPUS。
定义参数 EGO_DEFINE_NCPUS=[procs | cores | threads]。 将其设置为以下选项之一:
- procs(ncpus=处理器数量)
- cores(ncpus=处理器数量 * 核心数)
- threads(ncpus=处理器数量 * 核心数 * 线程数)
默认情况下,ncpus 设置为 cores(核心数)。
注意:在不支持识别核心和线程的旧版 LIM 的集群中,将忽略 EGO_DEFINE_NCPUS。在只有管理主机 LIM 识别核心和线程的集群中,管理主机 LIM 会分配默认值(例如,在 LSF 6.2 中:1 个核心,1 个线程)。
保存并关闭 lsf.conf 或 ego.conf 文件。
结果 提示:作为最佳实践,应设置 EGO_DEFINE_NCPUS 而不是 EGO_ENABLE_DUALCORE。通过设置 EGO_DEFINE_NCPUS=cores,保留了 EGO_ENABLE_DUALCORE=y 的功能。
与 lsf.conf 中 LSF_LOCAL_RESOURCES 的交互 如果启用了 EGO,并且在 ego.conf 中设置了 EGO_LOCAL_RESOURCES,同时在 lsf.conf 中设置了 LSF_LOCAL_RESOURCES,则 EGO_LOCAL_RESOURCES 优先生效。
定义动态主机上 ncpus 的计算方法
集群中特定动态和静态主机上的 ncpus 全局定义可以被覆盖。
操作步骤 打开 lsf.conf 或 ego.conf 文件。
UNIX 和 Linux 系统:
LSF_CONFDIR/lsf.conf
LSF_CONFDIR/ego/cluster_name/kernel/ego.conf
Windows 系统:
LSF_CONFDIR\lsf.conf
LSF_CONFDIR\ego\cluster_name\kernel\ego.conf
重要提示: 只有当 LSF 集群中启用了 EGO 时,您才能在 ego.conf 中设置 EGO_LOCAL_RESOURCES。如果未启用 EGO,则必须在 lsf.conf 中设置 EGO_LOCAL_RESOURCES。
定义参数 EGO_LOCAL_RESOURCES="[resouece resource_name]"。 将 resource_name 设置为以下选项之一:
- define_ncpus_procs
- define_ncpus_cores
- define_ncpus_threads
注意: 资源定义是互斥的。每个主机只能选择一个资源定义。
例如: Windows 系统:
EGO_LOCAL_RESOURCES="[type NTX86] [resource define_ncpus_procs]"
Linux 系统:
EGO_LOCAL_RESOURCES="[resource define_ncpus_cores]"
保存并关闭 ego.conf 文件。
定义静态主机上 ncpus 的计算方法
集群中特定动态和静态主机上的 ncpus 全局定义可以被覆盖。
操作步骤 打开 lsf.cluster.cluster_name 文件。
Linux 系统:
LSF_CONFDIR/lsf.cluster.cluster_name
Windows 系统:
LSF_CONFDIR\lsf.cluster.cluster_name
找到您想要定义 ncpus 计算的主机。在 RESOURCES 列中,添加以下任一定义:
- define_ncpus_procs
- define_ncpus_cores
- define_ncpus_threads
注意:资源定义是互斥的,每个主机只能选择一个资源定义。
例如:
Begin Host
HOSTNAME model type r1m mem swp RESOURCES #Keywords
#lemon PC200 LINUX86 3.5 1 2 (linux)
#plum ! NTX86 3.5 1 2 (nt)
Host_name ! NTX86 - - - (define_ncpus_procs)
End Host
保存并关闭 lsf.cluster.cluster_name 文件。
重启管理主机。
上海诺熵科技有限公司提供高性能计算/AI,大数据集群整体解决方案。
网址:www.neuentro.com
微信公众号:爱算数