نحوه ایجاد یک I/O Domain در SUN SPARC

An I/O domain has a direct access to the underlying hardware devices. It is used generally in a case where you want performance improvements avoiding the overheads to access the hardware indirectly through control domain. You can create I/O domain is 2 ways:
1. Using the entire PCIe BUS
2. Using a PCIe end point device

Creating I/O domains using PCIe buses

Now as shown in ther digram we can assign a complete PCI bus(pci_1) to the I/O domain assuming there are no disk or network devices on that bus that is being used by primary domain. We can not share a bus among multiple I/O domains.

PCIe bus for io domain

Now ensure that the pci_1 bus is not being used by primary domain.

primary# ldm list-io
NAME                                      TYPE   BUS      DOMAIN   STATUS   
----                                      ----   ---      ------   ------   
niu_0                                     NIU    niu_0    primary           
niu_1                                     NIU    niu_1    primary           
pci_0                                     BUS    pci_0    primary           
pci_1                                     BUS    pci_1    primary       
..........

As you can see the primary domain is using pci_1. So we need to remove any device in that bus being used by primary domain. Check for below commands if any device in primary domain is using the bus pci_1. These commands are just as an example. You may have to use some different commands according to your configuration.

primary# ifconfig -a 
primary# df /
primary# ls -l /dev/nxge0  (in case you find nxge0 in the ifconfig -a output)
primary# ls -l /dev/rdsk/c0t1d0s0
primary# ldm start-reconf primary 
primary# ldm remove-io pci_1 primary

Save the configuration as io_conf.

primary# ldm add-config io-domain

reboot the domain for new config to be active

primary# shutdown -i6 -g0 -y

Now setup a new domain

primary# ldm add-domain io_domain
primary# ldm add-vcpu 8 io_domain
primary# ldm add-memory 4G io_domain
primary# ldm set-mau 1 io_domain
primary# ldm add-vnet vnet1 primary-vsw0 io_domain

Now add the free pci bus to the domain, bind it and start.
primary# ldm add-io pci_1 io_domain
primary# ldm bind io_domain
primary# ldm start io_domain

Confirm the assignement of pci_1 bus to io_domain

primary# ldm list-io
NAME                                      TYPE   BUS      DOMAIN   STATUS   
----                                      ----   ---      ------   ------   
niu_0                                     NIU    niu_0    primary           
niu_1                                     NIU    niu_1    primary           
pci_0                                     BUS    pci_0    primary           
pci_1                                     BUS    pci_1    io_domain       
..........

You should be able to see all the devices of pci_1 bus as well assigned to io_domain.

Creating I/O domains using PCIe end point devices

Now if you have only one PCIe bus in the server you can not use above method. In that case starting Oracle VM server for SPARC ver. 2.0 we can assign individual PCIe end point device to the io domain. As shown in the diagram PCIE3 is assigned to io domain.

PCIe end point device for io domain

primary# ldm start-reconf primary
primary# ldm remove-io /SYS/MB/PCIE3 primary
------------------------------------------------------------------------------
Notice: The primary domain is in the process of a delayed reconfiguration.
Any changes made to the primary domain will only take effect after it reboots. 
------------------------------------------------------------------------------

Save the config as io_conf and reboot the system to activate the new configuratiom

primary# ldm add-config io_conf
primary# reboot -- -r

Confirm the assignment in ldm ls-io command output.

Now create a new domain and add this PCIe end point device to the new domain.

primary# ldm add-domain io_domain
primary# ldm add-vcpu 8 io_domain
primary# ldm add-memory 4G io_domain
primary-domain# ldm set-mau 1 io_domain
primary# ldm add-vnet vnet1 primary-vsw0 io_domain
# ldm add-io /SYS/MB/PCIE3 io_domain
# ldm bind io_domain
# ldm start io_domain 
LDom io_domain started
SHARE ON