Les exemples suivants expliquent comment activer la virtualisation d'E/S pour un bus PCIe, gérer les périphériques d'E/S directes sur les domaines root non primary et comment gérer les fonctions virtuelles SR-IOV sur les domaines root primary.
L'exemple suivant illustre l'activation de la virtualisation d'E/S à l'aide des commandes ldm add-io et ldm set-io
La configuration d'E/S SPARC T4-2 suivante montre que le bus pci_1 a déjà été supprimé du domaine primary.
primary# ldm list-io NAME TYPE BUS DOMAIN STATUS ---- ---- --- ------ ------ pci_0 BUS pci_0 primary IOV pci_1 BUS pci_1 niu_0 NIU niu_0 primary niu_1 NIU niu_1 primary /SYS/MB/PCIE0 PCIE pci_0 primary OCC /SYS/MB/PCIE2 PCIE pci_0 primary OCC /SYS/MB/PCIE4 PCIE pci_0 primary OCC /SYS/MB/PCIE6 PCIE pci_0 primary EMP /SYS/MB/PCIE8 PCIE pci_0 primary EMP /SYS/MB/SASHBA PCIE pci_0 primary OCC /SYS/MB/NET0 PCIE pci_0 primary OCC /SYS/MB/PCIE1 PCIE pci_1 UNK /SYS/MB/PCIE3 PCIE pci_1 UNK /SYS/MB/PCIE5 PCIE pci_1 UNK /SYS/MB/PCIE7 PCIE pci_1 UNK /SYS/MB/PCIE9 PCIE pci_1 UNK /SYS/MB/NET2 PCIE pci_1 UNK /SYS/MB/NET0/IOVNET.PF0 PF pci_0 primary /SYS/MB/NET0/IOVNET.PF1 PF pci_0 primary
La liste suivante indique que les domaines invités sont dans un état lié :
primary# ldm list NAME STATE FLAGS CONS VCPU MEMORY UTIL NORM UPTIME primary active -n-cv- UART 8 8G 0.6% 0.6% 8m rootdom1 bound ------ 5000 8 4G ldg2 bound ------ 5001 8 4G ldg3 bound ------ 5002 8 4G
La commande ldm add-io suivante ajoute le bus pci_1 au domaine rootdom1 en activant la virtualisation d'E/S pour ce bus. La commande ldm start démarre le domaine rootdom1.
primary# ldm add-io iov=on pci_1 rootdom1 primary# ldm start rootdom1 LDom rootdom1 started
Si un bus PCIe spécifié est déjà assigné à un domaine root, servez-vous de la commande ldm set-io pour activer la virtualisation d'E/S.
primary# ldm start-reconf rootdom1 primary# ldm set-io iov=on pci_1 primary# ldm stop-domain -r rootdom1
Vous ne pouvez configurer les périphériques d'E/S qu'une fois le système d'exploitation du domaine root démarré. Connectez-vous à la console du domaine invité rootdom1 puis initialisez le SE du domaine root rootdom1 si l'initialisation automatique n'est pas activée sur les domaines invités.
primary# telnet localhost 5000 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Connecting to console "rootdom1" in group "rootdom1" .... Press ~? for control options .. ok> boot ... primary#
La commande suivante indique que le bus PCIe pci_1 et ses enfants appartiennent désormais au domaine root rootdom1.
primary# ldm list-io NAME TYPE BUS DOMAIN STATUS ---- ---- --- ------ ------ pci_0 BUS pci_0 primary IOV pci_1 BUS pci_1 rootdom1 IOV niu_0 NIU niu_0 primary niu_1 NIU niu_1 primary /SYS/MB/PCIE0 PCIE pci_0 primary OCC /SYS/MB/PCIE2 PCIE pci_0 primary OCC /SYS/MB/PCIE4 PCIE pci_0 primary OCC /SYS/MB/PCIE6 PCIE pci_0 primary EMP /SYS/MB/PCIE8 PCIE pci_0 primary EMP /SYS/MB/SASHBA PCIE pci_0 primary OCC /SYS/MB/NET0 PCIE pci_0 primary OCC /SYS/MB/PCIE1 PCIE pci_1 rootdom1 OCC /SYS/MB/PCIE3 PCIE pci_1 rootdom1 OCC /SYS/MB/PCIE5 PCIE pci_1 rootdom1 OCC /SYS/MB/PCIE7 PCIE pci_1 rootdom1 OCC /SYS/MB/PCIE9 PCIE pci_1 rootdom1 EMP /SYS/MB/NET2 PCIE pci_1 rootdom1 OCC /SYS/MB/NET0/IOVNET.PF0 PF pci_0 primary /SYS/MB/NET0/IOVNET.PF1 PF pci_0 primary /SYS/MB/PCIE5/IOVNET.PF0 PF pci_1 rootdom1 /SYS/MB/PCIE5/IOVNET.PF1 PF pci_1 rootdom1 /SYS/MB/NET2/IOVNET.PF0 PF pci_1 rootdom1 /SYS/MB/NET2/IOVNET.PF1 PF pci_1 rootdom1
L'exemple suivant indique comment gérer des périphériques d'E/S directes sur des domaines root non primary.
La commande suivante génère une erreur car elle tente de supprimer un emplacement du domaine root alors que celui-ci est encore actif :
primary# ldm remove-io /SYS/MB/PCIE7 ldg1 Dynamic I/O operations on PCIe slots are not supported. Use start-reconf command to trigger delayed reconfiguration and make I/O changes statically.
La commande suivante illustre la méthode adaptée de suppression d'un emplacement, à savoir en lançant tout d'abord une reconfiguration retardée sur le domaine root.
primary# ldm start-reconf ldg1 Initiating a delayed reconfiguration operation on the ldg1 domain. All configuration changes for other domains are disabled until the ldg1 domain reboots, at which time the new configuration for the ldg1 domain will also take effect. primary# ldm remove-io /SYS/MB/PCIE7 ldg1 ------------------------------------------------------------------------------ Notice: The ldg1 domain is in the process of a delayed reconfiguration. Any changes made to the ldg1 domain will only take effect after it reboots. ------------------------------------------------------------------------------ primary# ldm stop-domain -r ldg1
La commande ldm list-io suivante vérifie que l'emplacement /SYS/MB/PCIE7 ne se trouve plus sur le domaine root.
primary# ldm list-io NAME TYPE BUS DOMAIN STATUS ---- ---- --- ------ ------ pci_0 BUS pci_0 primary IOV pci_1 BUS pci_1 ldg1 IOV niu_0 NIU niu_0 primary niu_1 NIU niu_1 primary /SYS/MB/PCIE0 PCIE pci_0 primary OCC /SYS/MB/PCIE2 PCIE pci_0 primary OCC /SYS/MB/PCIE4 PCIE pci_0 primary OCC /SYS/MB/PCIE6 PCIE pci_0 primary EMP /SYS/MB/PCIE8 PCIE pci_0 primary EMP /SYS/MB/SASHBA PCIE pci_0 primary OCC /SYS/MB/NET0 PCIE pci_0 primary OCC /SYS/MB/PCIE1 PCIE pci_1 ldg1 OCC /SYS/MB/PCIE3 PCIE pci_1 ldg1 OCC /SYS/MB/PCIE5 PCIE pci_1 ldg1 OCC /SYS/MB/PCIE7 PCIE pci_1 OCC /SYS/MB/PCIE9 PCIE pci_1 ldg1 EMP /SYS/MB/NET2 PCIE pci_1 ldg1 OCC /SYS/MB/NET0/IOVNET.PF0 PF pci_0 primary /SYS/MB/NET0/IOVNET.PF1 PF pci_0 primary /SYS/MB/PCIE5/IOVNET.PF0 PF pci_1 ldg1 /SYS/MB/PCIE5/IOVNET.PF1 PF pci_1 ldg1 /SYS/MB/NET2/IOVNET.PF0 PF pci_1 ldg1 /SYS/MB/NET2/IOVNET.PF1 PF pci_1 ldg1
Les commandes suivantes assignent l'emplacement /SYS/MB/PCIE7 au domaine ldg2. La commande ldm start démarre le domaine ldg2.
primary# ldm add-io /SYS/MB/PCIE7 ldg2 primary# ldm start ldg2 LDom ldg2 started
Ces commandes créent deux fonctions virtuelles à partir de chacune des deux fonctions physiques appartenant au domaine root non primary.
primary# ldm create-vf /SYS/MB/PCIE5/IOVNET.PF0 Created new vf: /SYS/MB/PCIE5/IOVNET.PF0.VF0 primary# ldm create-vf /SYS/MB/PCIE5/IOVNET.PF0 Created new vf: /SYS/MB/PCIE5/IOVNET.PF0.VF1 primary# ldm create-vf /SYS/MB/NET2/IOVNET.PF1 Created new vf: /SYS/MB/NET2/IOVNET.PF1.VF0 primary# ldm create-vf /SYS/MB/NET2/IOVNET.PF1 Created new vf: /SYS/MB/NET2/IOVNET.PF1.VF1
Vous pouvez également utiliser l'option –n pour créer deux fonctions virtuelles à l'aide des deux commandes suivantes :
primary# ldm create-vf -n 2 /SYS/MB/PCIE5/IOVNET.PF0 Created new vf: /SYS/MB/PCIE5/IOVNET.PF0.VF0 Created new vf: /SYS/MB/PCIE5/IOVNET.PF0.VF1 primary# ldm create-vf -n 2 /SYS/MB/NET2/IOVNET.PF1 Created new vf: /SYS/MB/NET2/IOVNET.PF1.VF0 Created new vf: /SYS/MB/NET2/IOVNET.PF1.VF1
Si vous n'êtes pas parvenu à créer les fonctions virtuelles sur une fonction physique donnée de façon dynamique, démarrez une reconfiguration retardée afin de les créer de façon statique.
primary# ldm start-reconf ldg1 primary# ldm create-vf /SYS/MB/PCIE5/IOVNET.PF0 Created new vf: /SYS/MB/PCIE5/IOVNET.PF0.VF0 primary# ldm create-vf /SYS/MB/PCIE5/IOVNET.PF0 Created new vf: /SYS/MB/PCIE5/IOVNET.PF0.VF1 primary# ldm create-vf /SYS/MB/NET2/IOVNET.PF1 Created new vf: /SYS/MB/NET2/IOVNET.PF1.VF0 primary# ldm create-vf /SYS/MB/NET2/IOVNET.PF1 Created new vf: /SYS/MB/NET2/IOVNET.PF1.VF1
Ensuite, réinitialisez le domaine root, ldg1, afin d'appliquer les modifications.
primary# ldm stop-domain -r ldg1
La commande suivante affiche les nouvelles fonctions virtuelles :
primary# ldm list-io NAME TYPE BUS DOMAIN STATUS ---- ---- --- ------ ------ pci_0 BUS pci_0 primary IOV pci_1 BUS pci_1 ldg1 IOV niu_0 NIU niu_0 primary niu_1 NIU niu_1 primary /SYS/MB/PCIE0 PCIE pci_0 primary OCC /SYS/MB/PCIE2 PCIE pci_0 primary OCC /SYS/MB/PCIE4 PCIE pci_0 primary OCC /SYS/MB/PCIE6 PCIE pci_0 primary EMP /SYS/MB/PCIE8 PCIE pci_0 primary EMP /SYS/MB/SASHBA PCIE pci_0 primary OCC /SYS/MB/NET0 PCIE pci_0 primary OCC /SYS/MB/PCIE1 PCIE pci_1 ldg1 OCC /SYS/MB/PCIE3 PCIE pci_1 ldg1 OCC /SYS/MB/PCIE5 PCIE pci_1 ldg1 OCC /SYS/MB/PCIE7 PCIE pci_1 ldg2 OCC /SYS/MB/PCIE9 PCIE pci_1 ldg1 EMP /SYS/MB/NET2 PCIE pci_1 ldg1 OCC /SYS/MB/NET0/IOVNET.PF0 PF pci_0 primary /SYS/MB/NET0/IOVNET.PF1 PF pci_0 primary /SYS/MB/PCIE5/IOVNET.PF0 PF pci_1 ldg1 /SYS/MB/PCIE5/IOVNET.PF1 PF pci_1 ldg1 /SYS/MB/NET2/IOVNET.PF0 PF pci_1 ldg1 /SYS/MB/NET2/IOVNET.PF1 PF pci_1 ldg1 /SYS/MB/PCIE5/IOVNET.PF0.VF0 VF pci_1 /SYS/MB/PCIE5/IOVNET.PF0.VF1 VF pci_1 /SYS/MB/NET2/IOVNET.PF1.VF0 VF pci_1 /SYS/MB/NET2/IOVNET.PF1.VF1 VF pci_1
La commande suivante ajoute de façon dynamique la fonction virtuelle /SYS/MB/PCIE5/IOVNET.PF0.VF1 au domaine root ldg1 non primary :
primary# ldm add-io /SYS/MB/PCIE5/IOVNET.PF0.VF1 ldg1
La commande suivante ajoute de façon dynamique la fonction virtuelle /SYS/MB/NET2/IOVNET.PF1.VF0 au domaine ldg2 :
primary# ldm add-io /SYS/MB/NET2/IOVNET.PF1.VF0 ldg2
La commande suivante ajoute la fonction virtuelle /SYS/MB/NET2/IOVNET.PF1.VF1 au domaine ldg3 lié :
primary# ldm add-io /SYS/MB/NET2/IOVNET.PF1.VF1 ldg3 primary# ldm start ldg3 LDom ldg3 started
Connectez-vous à la console du domaine ldg3 puis initialisez son SE.
La sortie suivante indique que toutes les assignations s'affichent comme prévu. Une fonction virtuelle n'est pas attribuée et peut donc être attribuée de façon dynamique au domaine root ldg1, ldg2 ou ldg3.
# ldm list-io NAME TYPE BUS DOMAIN STATUS ---- ---- --- ------ ------ pci_0 BUS pci_0 primary IOV pci_1 BUS pci_1 ldg1 IOV niu_0 NIU niu_0 primary niu_1 NIU niu_1 primary /SYS/MB/PCIE0 PCIE pci_0 primary OCC /SYS/MB/PCIE2 PCIE pci_0 primary OCC /SYS/MB/PCIE4 PCIE pci_0 primary OCC /SYS/MB/PCIE6 PCIE pci_0 primary EMP /SYS/MB/PCIE8 PCIE pci_0 primary EMP /SYS/MB/SASHBA PCIE pci_0 primary OCC /SYS/MB/NET0 PCIE pci_0 primary OCC /SYS/MB/PCIE1 PCIE pci_1 ldg1 OCC /SYS/MB/PCIE3 PCIE pci_1 ldg1 OCC /SYS/MB/PCIE5 PCIE pci_1 ldg1 OCC /SYS/MB/PCIE7 PCIE pci_1 ldg2 OCC /SYS/MB/PCIE9 PCIE pci_1 ldg1 EMP /SYS/MB/NET2 PCIE pci_1 ldg1 OCC /SYS/MB/NET0/IOVNET.PF0 PF pci_0 primary /SYS/MB/NET0/IOVNET.PF1 PF pci_0 primary /SYS/MB/PCIE5/IOVNET.PF0 PF pci_1 ldg1 /SYS/MB/PCIE5/IOVNET.PF1 PF pci_1 ldg1 /SYS/MB/NET2/IOVNET.PF0 PF pci_1 ldg1 /SYS/MB/NET2/IOVNET.PF1 PF pci_1 ldg1 /SYS/MB/PCIE5/IOVNET.PF0.VF0 VF pci_1 /SYS/MB/PCIE5/IOVNET.PF0.VF1 VF pci_1 ldg1 /SYS/MB/NET2/IOVNET.PF1.VF0 VF pci_1 ldg2 /SYS/MB/NET2/IOVNET.PF1.VF1 VF pci_1 ldg3