Blueprint: support-infiniband-network
Change-Id: Idb464cc6a9b17a7c10e0594dfff9e02997abc8a3
This commit is contained in:
parent
32f5fd8f43
commit
085b54b750
325
specs/6.1/support-infiniband-network.rst
Normal file
325
specs/6.1/support-infiniband-network.rst
Normal file
@ -0,0 +1,325 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Support discovery over Mellanox Infiniband network using interface driver data
|
||||||
|
==============================================================================
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/fuel/+spec/support-infiniband-network
|
||||||
|
|
||||||
|
In Fuel 5.1, support for Mellanox high performance Ethernet virtualization
|
||||||
|
and storage features has been added.
|
||||||
|
|
||||||
|
Starting with version 6.0, Fuel supports a Pluggable architecture.
|
||||||
|
|
||||||
|
This blueprint suggests to publish interface driver and networks
|
||||||
|
allocation data, for new network / interface oriented features.
|
||||||
|
This will also ease the process of exporting core functionality
|
||||||
|
of partners into plugins and allowing them to access the required
|
||||||
|
nodes model information.
|
||||||
|
|
||||||
|
Moreover, this blueprint describes Mellanox Infiniband drivers installation
|
||||||
|
for the bootstrap discovery stage.
|
||||||
|
|
||||||
|
InfiniBand (abbreviated IB) is a computer network communications link
|
||||||
|
used in high-performance computing featuring very high throughput and
|
||||||
|
very low latency.
|
||||||
|
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
There are two main problems that this blueprint suggests to solve:
|
||||||
|
|
||||||
|
1. Currently in Fuel, Installation over Infiniband mode is not supported, and
|
||||||
|
in particular bootstrap discovery and network verification over
|
||||||
|
infiniband based network.
|
||||||
|
|
||||||
|
Some of the high performance computing users, prefer to use Infinband due
|
||||||
|
to its highest throughput and lowest latency preferences.
|
||||||
|
|
||||||
|
A POC ISO already exists, and shows significant performance improvement
|
||||||
|
from the 56Gb Ethernet solution.
|
||||||
|
|
||||||
|
Adding Infiniband network support will allow users use IPOIB Virtual
|
||||||
|
Functions with higher performance, and will bring them closer to the wire
|
||||||
|
speed.
|
||||||
|
|
||||||
|
#. Network interfaces information, that was accessible via the nodes model
|
||||||
|
in Fuel web serializers, is now missing, for implementing network oriented
|
||||||
|
plugins.
|
||||||
|
|
||||||
|
Moreover, in this blueprint, extensive network information publishment will
|
||||||
|
be added, such as discovering port bus ID and vendor drivers information.
|
||||||
|
This will allow to add more vendor and network based features.
|
||||||
|
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
Support nodes discovery over a prepared Infiniband network via Fuel
|
||||||
|
(with a running and pre-configured switch IB and Subnet Manager).
|
||||||
|
|
||||||
|
The change should be transparent to users that already knows how to install
|
||||||
|
Mellanox components via Fuel installer, and be as standard as possible, without
|
||||||
|
harming the Infiniband performance.
|
||||||
|
|
||||||
|
The Fuel master will discover and use EIPOIB (Ethernet IP Over InfiniBand)
|
||||||
|
interfaces for the network roles.
|
||||||
|
|
||||||
|
In the complementary Fuel plugin for Infiniband, OVS will run over EIPOIB
|
||||||
|
interfaces that was discovered in the bootstrap stage.
|
||||||
|
|
||||||
|
Infiniband interfaces (IPOIB) will be used only for RDMA (Remote Direct
|
||||||
|
Memory Access), and for the guests Virtual Functions (Virtual Interfaces)
|
||||||
|
in case of SR-IOV.
|
||||||
|
|
||||||
|
The network mode will be calculated in the backend using the new interfaces
|
||||||
|
driver data - "eth_ipoib" for Infiniband or "mlx4_en" for Ethernet (RoCE).
|
||||||
|
|
||||||
|
**The main changes:**
|
||||||
|
|
||||||
|
*Packages:*
|
||||||
|
|
||||||
|
1. New Rethtool with bus and driver info (add a new cstruct for ethtool -i
|
||||||
|
<interface>).
|
||||||
|
#. Adding kernel-ib driver to Fuel repository.
|
||||||
|
|
||||||
|
*Fuel-main (Bootstrap):*
|
||||||
|
|
||||||
|
1. Adding bus and drivers info to nailgun agent, in order to
|
||||||
|
discover ports vendor, protocol and parents / bus ID.
|
||||||
|
#. Extracting the IB drivers.
|
||||||
|
#. Changing Mellanox drivers loading to auto link mode (Eth or IB).
|
||||||
|
#. Start eth_ipoib and ib_ipoib kernel modules if mlx4_core is loaded.
|
||||||
|
#. Adding daemon to convert SM PKEYs to VLANs for verify network,
|
||||||
|
and execute it if Mellanox eth_ipoib kernel module started.
|
||||||
|
|
||||||
|
*Fuel-web:*
|
||||||
|
|
||||||
|
1. Adding bus and drivers info to nailgun NIC db and model.
|
||||||
|
#. Publish interfaces discovered driver and bus info data (under
|
||||||
|
interfaces).
|
||||||
|
#. Publish the physical interface and VLAN tag for each network role (private,
|
||||||
|
storage, management, admin) to astute.yaml (under roles).
|
||||||
|
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Parsing ethtool output for drivers data in nailgun agent - very inelegant.
|
||||||
|
* Not using EIPOIB for Eth virtualization over IB - EIPOIB is the only method
|
||||||
|
that currently supports OVS/Linuxbridge VLAN rules with PKEYs conversion.
|
||||||
|
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Adding bus_info and driver columns to the NIC model, as described at the
|
||||||
|
proposed change section under Fuel-web.
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
The parameters 'bus_info' and 'driver' are added into REST responses for Node
|
||||||
|
network interface parameters.
|
||||||
|
|
||||||
|
Upgrade impact
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Upgrade impact in this case is more of Plugin upgrade impact, so it is out
|
||||||
|
of scope in this spec.
|
||||||
|
|
||||||
|
Security impact
|
||||||
|
---------------
|
||||||
|
None
|
||||||
|
|
||||||
|
Notifications impact
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Will add driver and bus_info parameter to the nailgun interfaces report
|
||||||
|
(in the Fuel web UI).
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
No Such, but it will enable to support the Infiniband plugin that increases
|
||||||
|
default OVS performance dramatically, and increase 56Gb link performance
|
||||||
|
significantly from Eth mode, in VMs connection and Cinder volumes.
|
||||||
|
|
||||||
|
|
||||||
|
Other deployer impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Adding driver and bus_info may enable Fuel developers to add new features
|
||||||
|
based on the port vendor identification.
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Primary assignee:
|
||||||
|
aviramb <aviramb@mellanox.com>
|
||||||
|
|
||||||
|
Other contributors:
|
||||||
|
gilmeir-d <gilmeir@mellanox.com>
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
*Packages:*
|
||||||
|
|
||||||
|
1. New Rethtool with bus and driver info (add a new cstruct for ethtool -i
|
||||||
|
<interface>):
|
||||||
|
|
||||||
|
* Change /usr/lib/ruby/gems/1.8/gems/rethtool-0.0.3/lib/rethtool/
|
||||||
|
interface_settings.rb to have bus and driver info getters.
|
||||||
|
* Change /usr/lib/ruby/gems/1.8/gems/rethtool-0.0.3/lib/rethtool.rb
|
||||||
|
to include drivers CMD ID.
|
||||||
|
* Add /usr/lib/ruby/gems/1.8/gems/rethtool-0.0.3/lib/rethtool/ethtool_cmd.rb
|
||||||
|
with the driver CStruct.
|
||||||
|
* Example code in
|
||||||
|
`this example <https://github.com/avirambh/rethtool/commit/dce5d747c1ea654ff6c4430a2fa4c6337f7e9527>`_
|
||||||
|
.
|
||||||
|
|
||||||
|
2. Add kernel-ib rpm to the bootstrap image:
|
||||||
|
|
||||||
|
* Compile OFED on the bootstrap kernel and add the OFED kernel-ib rpm to
|
||||||
|
the Nailgun repo.
|
||||||
|
|
||||||
|
*Fuel-main (Bootstrap):*
|
||||||
|
|
||||||
|
1. Adding bus and driver information to nailgun agent and rethtool, in order to
|
||||||
|
discover ports vendor, protocol and parents / bus ID:
|
||||||
|
|
||||||
|
* Replace rethtool package in repo with the new package that includes
|
||||||
|
the drivers functions (already built it for the POC ISO using Fuel packaging
|
||||||
|
spec in
|
||||||
|
`Fuel repository <http://fuel-repository.mirantis.com/repos/centos-fuel-6.0-stable-916/centos/noarch/>`_
|
||||||
|
).
|
||||||
|
|
||||||
|
* Add to fuel-web/bin/agent interfaces report the bus_info and driver rethtool
|
||||||
|
functions call.
|
||||||
|
|
||||||
|
2. Adding IB drivers:
|
||||||
|
|
||||||
|
* Change /bootstrap/module.mk to extract kernel-ib package and its
|
||||||
|
dependencies.
|
||||||
|
|
||||||
|
3. Changing mellanox drivers loading to auto link mode:
|
||||||
|
|
||||||
|
* Remove /bootstrap/sync/etc/modprobe.d/mlnx4_core.conf
|
||||||
|
|
||||||
|
4. Start EIPOIB and IPOIB kernel modules with mlx4_core:
|
||||||
|
|
||||||
|
* Create /bootstrap/sync/etc/modprobe.d/eth_ipoib.conf
|
||||||
|
|
||||||
|
5. Adding a daemon to create SM PKEYs conversion for verify network:
|
||||||
|
|
||||||
|
* Adding /bootstrap/sync/usr/bin/init_eipoib.sh
|
||||||
|
* Implement A daemon that reads once in 30 seconds the PKEYs configured at the
|
||||||
|
SM machine (published in /sys/class/infiniband/<HCA>/ports/<port>/pkeys/),
|
||||||
|
and verifies all pkeys are converted to vlans on all ports.
|
||||||
|
* Execute this daemon in bootstrap/sync/etc/modprobe.d/eth_ipoib.conf after
|
||||||
|
ib_ipoib and eth_ipoib, if mlx4_ib is executed (mlx4_ib and mlx4_en are
|
||||||
|
executed if mlx4_core kernel module is executed, which occurs only if
|
||||||
|
Mellanox card has been found - as in Fuel 5.1).
|
||||||
|
|
||||||
|
6. Adding script to convert SM pkeys to VLANs for verify network, and append
|
||||||
|
it to rc.local if Mellanox kmods started:
|
||||||
|
|
||||||
|
* Change /bootstrap/sync/etc/modprobe.d/eth_ipoib.conf
|
||||||
|
* Increase buffers in /bootstrap/sync/etc/modprobe.d/ipoib.conf
|
||||||
|
(for large amount of PKEYs)
|
||||||
|
|
||||||
|
7. Example code can be found in `Mellanox fuel-main fork <https://github.com/Mellanox/fuel-main/commit/6788f44acbcdae06e5f77a1fa4350808b5bbe5fa>`_.
|
||||||
|
|
||||||
|
*Fuel-web:*
|
||||||
|
|
||||||
|
1. Adding bus and driver info to nailgun db and model:
|
||||||
|
|
||||||
|
* Change bin/agent to call drivers functions (int.driver and int.bus_info),
|
||||||
|
as described in the Bootstrap section.
|
||||||
|
* Change the relevant upgrade/downgrade modules in
|
||||||
|
nailgun/nailgun/db/migration/alembic_migrations/versions/
|
||||||
|
to have the driver and bus info columns.
|
||||||
|
* Change nailgun/nailgun/db/sqlalchemy/models/node.py NodeNICInterface to
|
||||||
|
include driver and bus_info columns.
|
||||||
|
* Change nailgun/nailgun/objects/serializers/node.py
|
||||||
|
NodeInterfacesSerializer nic_fields dict to include driver and bus_info.
|
||||||
|
|
||||||
|
2. Publish interfaces discovered driver and bus info data:
|
||||||
|
|
||||||
|
* Add to the networking dict of deployment serializers the driver and bus ID
|
||||||
|
of the nodes interfaces, under the interfaces dict.
|
||||||
|
|
||||||
|
3. Publish the physical interface and VLAN tag for each network role (private,
|
||||||
|
storage, management, admin) to astute.yaml:
|
||||||
|
|
||||||
|
* Add to the networking dict of deployment serializers the physical interfaces
|
||||||
|
for each role and its VLAN tag (as selected in the Fuel UI).
|
||||||
|
This data is required for SR-IOV vNIC alocation and for establishing RDMA
|
||||||
|
connection on the storage interface parent / probbed interface
|
||||||
|
(OVS bridge/LB does not support RDMA).
|
||||||
|
|
||||||
|
4. Example code can be found in `Mellanox fuel-web fork <https://github.com/Mellanox/fuel-web/commit/3386c6cc787d2d0ae48a386023b8b5c1998c0eeb>`_ (serializers and UI code are not relevant in this link).
|
||||||
|
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
1. Integration tests for Fuel-Web:
|
||||||
|
|
||||||
|
* Integration tests for testing creation of a node with driver and bus_info
|
||||||
|
parameters.
|
||||||
|
* Integration tests for testing access to the node driver and bus_info
|
||||||
|
parameters after creation.
|
||||||
|
|
||||||
|
2. CI and Verificaiton an Mellanox Lab:
|
||||||
|
|
||||||
|
* Nodes discovery over Infiniband network.
|
||||||
|
* Network verification over Infiniband network.
|
||||||
|
* Host and switch based SM.
|
||||||
|
* Large number of PKEYs.
|
||||||
|
* Verifying that bootstrap is loaded without Mellanox drivers if now Mellanox
|
||||||
|
HW has been discovered.
|
||||||
|
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
1. Instructions for "How to configure SM" will be added to the Planning guide.
|
||||||
|
#. Instructions for "Network drivers identification" will be added to the
|
||||||
|
User guide.
|
||||||
|
#. Instructions for "How to install Mirantis Openstack with Infiniband Network"
|
||||||
|
will be added to the Mellanox community, similarly to `this post <https://community.mellanox.com/docs/DOC-2036>`_
|
||||||
|
that has been made to the 5.1 based Fuel IB POC.
|
||||||
|
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
* Infiniband network - http://en.wikipedia.org/wiki/InfiniBand
|
||||||
|
* Configuring EIPOIB interfaces - https://community.mellanox.com/docs/DOC-1316
|
||||||
|
|
Loading…
Reference in New Issue
Block a user