lustre lnet
LNet支持不同的网络类型,如以太网、InfiniBand、Intel Omni - Path和其他专有网络技术,如Cray Gemini。它使用LNet路由在不同的LNet网络之间路由LNet消息。LNet的路由能力提供了一种有效的协议,能够在不同类型的网络之间进行桥接。LNet是Linux内核空间的一部分,当底层网络支持时,它允许完整的RDMA吞吐量和零拷贝通信。lustre可以使用单个远程过程调用( RPC )启动多主机读取或写入,这允许客户端以接近峰值带宽速率使用RDMA访问数据。借助Lustre 2 . 10 . x中实现的多轨( MR )功能,它允许在同一LNet下将节点上相同类型的多个接口分组在一起(例如TCP 0、O2 B0等)。) .然后,这些接口可以同时用于承载LNet流量。MR还能够利用在不同网络上配置的多个接口。例如,OPA和MLX接口可以被分组到它们各自的LNet下,然后可以与MR特征一起使用,以同时承载LNet业务。
网络配置示例
LNet路由器是一个专门的Lustre客户端,Lustre文件系统没有装载,只有LNet在运行。单个LNet路由器可以服务于不同的文件系统。
对于以上示例:
- 服务器位于基于Mellanox的InfiniBand网络LAN1上–10 . 10 . 0 . 0 / 24
- 客户是英特尔OPA网络LAN2–10 . 20 . 0 . 0 / 24
- LAN 1和LAN 2上的路由器分别位于10 . 10 . 0 . 20、10 . 10 . 0 . 21和10 . 20 . 0 . 29、10 . 20 . 0 . 30
节点上的网络配置可以通过在lustre . conf中添加模块参数来完成/ etc / modprobe . d /光泽. conf或者通过使用网命令实用程序。此外,当前配置可以导出到YAML格式文件,然后可以根据需要随时导入该YAML文件来设置配置。
通过在lustre . conf中添加模块参数进行网络配置
Servers:
options lnet networks="o2ib1(ib0)" routes="o2ib2 10.10.0.20@o2ib1"
Routers:
options lnet networks="o2ib1(ib0),o2ib2(ib1)" "forwarding=enabled"
Clients:
options lnet networks="o2ib2(ib0)" routes="o2ib1 10.20.0.29@o2ib2"
注意:重新启动LNet是应用新配置所必需的。为此,需要取消配置LNet网络并重新配置。卸载模块前,确保Lustre网络和Lustre文件系统已停止。
// To unload and load LNet module
modprobe -r lnet
modprobe lnet
// To unconfigure and reconfigure LNet
lnetctl lnet unconfigure
lnetctl lnet configure
动态网络配置使用网命令
Servers:
lnetctl net add --net o2ib1 --if ib0
lnetctl route add --net o2ib2 --gateway 10.10.0.20@o2ib1
lnetctl peer add --nid 10.10.0.20@o2ib1
Routers:
lnetctl net add --net o2ib1 --if ib0
lnetctl net add --net o2ib2 --if ib1
lnetctl peer add --nid 10.10.0.1@o2ib1
lnetctl peer add --nid 10.20.0.1@o2ib2
lnetctl set routing 1
Clients:
lnetctl net add --net o2ib2 --if ib0
lnetctl route add --net o2ib1 --gateway 10.20.0.29@o2ib2
lnetctl peer add --nid 10.20.0.29@o2ib2
使用YAML文件格式导入/导出配置
// To export the current configuration to a YAML file
lnetctl export FILE.yaml
lnetctl export > FILE.yaml
// To import the configuration from a YAML file
lnetctl import FILE.yaml
lnetctl import < FILE.yaml
有一个缺省网文件安装在/ etc / net . conf其具有YAML格式的示例配置。YAML文件中配置的另一个示例是:
net:
- net type: o2ib1
local NI(s):
- nid: 10.10.0.1@o2ib1
status: up
interfaces:
0: ib0
tunables:
peer_timeout: 180
peer_credits: 8
peer_buffer_credits: 0
credits: 256
lnd tunables:
peercredits_hiw: 64
map_on_demand: 32
concurrent_sends: 256
fmr_pool_size: 2048
fmr_flush_trigger: 512
fmr_cache: 1
tcp bonding: 0
dev cpt: -1
CPT: "[0]"
route:
- net: o2ib2
gateway: 10.10.0.20@o2ib1
hop: 1
priority: 0
state: up
peer:
- primary nid: 10.10.0.20@o2ib1
Multi-Rail: False
peer ni:
- nid: 10.10.0.20@o2ib1
state: up
max_ni_tx_credits: 8
available_tx_credits: 8
min_tx_credits: 7
tx_q_num_of_buf: 0
available_rtr_credits: 8
min_rtr_credits: 8
refcount: 4
global:
numa_range: 0
max_intf: 200
discovery: 1
LNet提供了一种机制来监控每个路由条目。lnt以定期的、可配置的间隔( live _ router _ check _ interval )对路由条目中标识的每个网关进行查验,以确保其处于活动状态。如果通过特定路由发送失败,或者路由器Pinger确定网关关闭,则该路由被标记为关闭,不被使用。它随后以规则的、可配置的间隔( dead _ router _ check _ interval )被ping,以确定它何时重新激活。
多轨网配置实例
如果路由器启用了MR,我们可以将路由器作为具有多个接口的对等体添加到客户端和服务器,MR算法将确保在向路由器发送流量时使用路由器的两个接口。但是,单个接口故障仍将导致整个路由器停机。通过上面图1中的网络拓扑示例,可以如下配置LNet MR :
Servers:
lnetctl net add --net o2ib1 --if ib0,ib1
lnetctl route add --net o2ib2 --gateway 10.10.0.20@o2ib1
lnetctl peer add --nid 10.10.0.20@o2ib1,10.10.0.21@o2ib1
Routers:
lnetctl net add --net o2ib1 --if ib0,ib1
lnetctl net add --net o2ib2 --if ib2,ib3
lnetctl peer add --nid 10.10.0.1@o2ib1,10.10.0.2@o2ib1
lnetctl peer add --nid 10.20.0.1@o2ib2,10.20.0.2@o2ib2
lnetctl set routing 1
Clients:
lnetctl net add --net o2ib2 --if ib0,ib1
lnetctl route add --net o2ib1 --gateway 10.20.0.29@o2ib2
lnetctl peer add --nid 10.20.0.29@o2ib2,10.20.0.30@o2ib2
细粒度路由
路由参数通过识别Lustre配置中的LNet路由器,用于告诉节点在转发流量时使用哪条路由。它指定路由器定义的分号分隔列表。
routes=dest_lnet [hop] [priority] router_NID@src_lnet; \ dest_lnet [hop] [priority] router_NID@src_lnet
另一种语法由冒号分隔的路由器定义列表组成:
routes=dest_lnet: [hop] [priority] router_NID@src_lnet \ [hop] [priority] router_NID@src_lnet
当有两台或两台以上的LNet路由器时,可以使用优先级参数给每台路由器赋予加权优先级。以下是使用此参数的一些可能原因:
- 其中一台路由器比另一台更有能力。
- 一台路由器是主路由器,另一台是备份路由器。
- 一台路由器用于一部分客户端,另一台路由器用于另一部分。
每台路由器都将流量移动到不同的物理位置。优先级参数是可选的,如果不存在优先级,则无需指定。hop参数指定到目的地的跳数。当节点转发流量时,使用跳数最少的路由。如果到同一目的网络的多个路由具有相同的跳数,则流量在这些路由之间以循环方式分布。要到达/传输到LNet dest _ LNet,给定节点的下一跳是LNet路由器,其NID路由器_ NID位于LNet src _ LNet中。给定一个结构足够完善的系统,可以将流程映射到每个客户端或服务器,也可以映射来自每个客户端或服务器的流程。这种路由也称为细粒度路由。
高级路由参数
在Lustre配置中,不同类型的LNet网络通过路由器连接,可以设置多个核心模块参数来监控和提高路由性能。这些参数在中设置/ etc / modprobe . d /光泽. conf文件。路由相关参数为:
- 自动停机-启用/禁用( 1 / 0 )路由器状态的自动标记为up或down。默认值为1。要禁用路由器标记,请设置:
options lnet auto_down=0
- 避免路由器故障-指定如果路由器的一个接口由于某种原因出现故障,整个路由器都会被标记为故障。这一点很重要,因为如果节点没有意识到一侧的接口出现故障,他们仍会继续将数据推送到另一侧,假设路由器运行正常,而实际情况并非如此。要打开它:
options lnet avoid_asym_router_failure=1
- 实时路由器检查间隔-指定路由器检查器ping实时路由器的时间间隔(以秒为单位)。默认值为60。要将该值设置为50,请使用:
options lnet live_router_check_interval=50
- 死路由器检查间隔-指定路由器检查器检查死机的时间间隔(以秒为单位)。默认值为60。要将该值设置为50 :
options lnet dead_router_check_interval=50
- 路由器_ ping _超时-指定路由器检查器检查活动路由器或死机时的超时时间。路由器检查器每隔一个dead _ router _ check _ interval或live _ router _ check _ interval分别向每个dead或live路由器发送一次ping消息。默认值为50。要将该值设置为60 :
options lnet router_ping_timeout=60
- 使用前检查路由器-指定路由器在使用前要检查。默认设置为关闭。如果此参数设置为on,则dead _ router _ check _ interval参数必须为正整数。
options lnet check_routers_before_use=1
这路由器检验器从每台路由器获取以下信息:
- 路由器被禁用的时间
- 经过禁用时间
如果router _ checker在router _ ping _超时秒内没有收到来自路由器的回复消息,则认为路由器已关闭。如果标记为“up”的路由器响应ping,超时将被重置。如果通过路由器成功发送了100个数据包,则该路由器的发送数据包计数器的值将为100。LNet路由器的统计数据可从以下位置找到/ proc /系统/网络/统计。如果未指定间隔,则仅采样并打印一次统计信息。否则,将按指定间隔(秒)对统计信息进行采样和打印。这些统计信息可以使用显示网实用程序以及如下所示:
# lnetctl stats show
statistics:
msgs_alloc: 0
msgs_max: 2
errors: 0
send_count: 887
recv_count: 887
route_count: 0
drop_count: 0
send_length: 656
recv_length: 70048
route_length: 0