Routing policy for image processing device

JP2024528474A5Active Publication Date: 2025-02-03ORACLE INT CORP
View PDF 0 Cites 0 Cited by

Patent Information

Application Number
JP2023579271
Authority / Receiving Office
JP · JP
Patent Type
Applications
Current Assignee / Owner
Priority Date
2022-05-02
Filing Date
2022-06-23
Publication Date
2025-02-03
Estimated Expiration
2042-06-23

AI Technical Summary

Technical Problem

Existing cloud infrastructure networks face performance deterioration due to the blocking nature of ring topologies used for connecting GPUs across host machines, leading to inefficiencies in high-performance compute applications that require dedicated network performance, fast storage, and large memory resources.

Method used

Implementing a policy-based routing mechanism for GPUs hosted on host machines, where network devices preconfigure a GPU routing policy to establish a mapping of incoming to outgoing port-links, ensuring non-blocking communication by avoiding collisions through 1-1 correspondence between incoming and outgoing port-links.

Benefits of technology

This approach enhances network performance by preventing flow collisions, ensuring efficient and synchronized communication among GPUs, particularly in high-performance compute environments, thereby improving overall system performance and reducing packet drops.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 00000000_0000_ABST
    Figure 00000000_0000_ABST
Patent Text Reader

Abstract

A routing mechanism for a graphics processing unit (GPU) hosted on several host machines in a cloud environment is discussed herein. For a packet sent by a GPU of a host machine and received by a network device, the network device determines an incoming port-link of the network device on which the packet was received. The network device identifies an outgoing port-link of the network device that corresponds to the incoming port-link based on a GPU routing policy. The GPU routing policy is pre-configured before receiving the packet and establishes a mapping of each incoming port-link of the network device to a unique outgoing port-link of the network device. The packet is forwarded on the outgoing port-link of the network device.
Need to check novelty before this filing date? Find Prior Art

Description

[Technical field]

[0001] CROSS-REFERENCE TO RELATED APPLICATIONS This application claims the benefit of and priority under 35 U.S.C. §119(e) to U.S. Provisional Patent Application No. 63 / 215,264, filed June 25, 2021, and U.S. Patent Application No. 17 / 734,833, filed May 2, 2022. The entire contents of the aforementioned applications are hereby incorporated by reference in their entireties for all purposes.

[0002] Field The present disclosure relates to a framework and routing mechanism for Graphics Processing Units (GPUs) hosted on several host machines in a cloud environment. [Background technology]

[0003] background Organizations continue to move business applications and databases to the cloud to reduce the costs of purchasing, updating, and maintaining on-premise hardware and software. High performance compute (HPC) applications always consume 100 percent of the available computing power to achieve a specific outcome or result. HPC applications require dedicated network performance, fast storage, high computing power, and large amounts of memory resources - resources that are in short supply in the virtualized infrastructure that makes up today's commodity clouds.

[0004] Cloud infrastructure service providers are offering newer and faster CPUs and Graphics Processing Units (GPUs) to address the requirements of HPC applications. Typically, a virtual topology is built to provision various GPUs hosted on several host machines to communicate with each other. In practice, a ring topology is utilized to connect various GPUs. However, ring networks are necessarily blocking in nature, which reduces the performance of the entire system. The embodiments discussed herein address these and other issues regarding the connectivity of GPUs across several host machines. Summary of the Invention [Problem to be solved by the invention]

[0005] overview The present disclosure generally relates to a routing mechanism for graphics processing units (GPUs) hosted on several host machines in a cloud environment. Various embodiments are described herein, including methods, systems, non-transitory computer-readable storage media storing programs, codes, or instructions executable by one or more processors, and the like. These exemplary embodiments are mentioned not to limit or define the present disclosure, but to provide examples to aid in understanding the present disclosure. Additional embodiments are discussed in the detailed description section, where further description is provided.

[0006] One embodiment of the present disclosure includes a method, for a packet transmitted by a graphics processing unit (GPU) of a host machine and received by a network device, the network device determining an incoming port-link of the network device on which the packet was received. The method includes the network device identifying an outgoing port-link that corresponds to the incoming port-link based on a GPU routing policy. The GPU routing policy is pre-configured prior to receiving the packet and establishes a mapping of each incoming port-link of the network device to a unique outgoing port-link of the network device. The method includes the network device forwarding the packet on the outgoing port-link of the network device.

[0007] One aspect of the present disclosure provides a system comprising one or more data processors and a non-transitory computer-readable storage medium comprising instructions that, when executed by the one or more data processors, cause the one or more data processors to perform some or all of one or more of the methods disclosed herein.

[0008] Another aspect of the present disclosure provides a computer program product tangibly embodied in a non-transitory machine-readable storage medium that includes instructions configured to cause one or more data processors to perform some or all of one or more of the methods disclosed herein.

[0009] The above, together with other features and embodiments, will become more apparent with reference to the following specification, claims, and accompanying drawings.

[0010] The features, embodiments, and advantages of the present disclosure will be better understood from the following detailed description when read in conjunction with the accompanying drawings. [Brief description of the drawings]

[0011] [Figure 1]FIG. 1 is a schematic diagram of a distributed environment illustrating a virtual or overlay cloud network hosted by a cloud service provider's infrastructure, according to some embodiments. [Diagram 2] FIG. 2 is a simplified architectural diagram of physical components in a physical network within the CSPI, according to some embodiments. [Diagram 3] FIG. 1 illustrates an example deployment in CSPI where a host machine is connected to multiple network virtualization devices (NVDs), according to some embodiments. [Figure 4] A diagram illustrating connectivity between host machines and NVDs to provide I / O virtualization supporting multi-tenancy in accordance with some embodiments. [Diagram 5] 1 is a simplified block diagram of a physical network provided by CSPI, according to some embodiments. [Figure 6] FIG. 1 is a simplified block diagram of a cloud infrastructure incorporating a CLOS network deployment, according to some embodiments. [Figure 7] 7 illustrates an example scenario illustrating a flow collision in the cloud infrastructure of FIG. 6, according to some embodiments. [Figure 8] FIG. 1 illustrates a policy-based routing mechanism implemented in a cloud infrastructure according to some embodiments. [Figure 9] 1 is a block diagram of a cloud infrastructure illustrating different types of connections within the cloud infrastructure, according to some embodiments. [Figure 10] FIG. 2 illustrates an example configuration of racks included in a cloud infrastructure, according to some embodiments. [Figure 11A] 4 is a flowchart illustrating steps performed by a network device in routing a packet, according to some embodiments. [Figure 11B]5 is another flowchart illustrating steps performed by a network device in routing packets according to some embodiments. [Figure 12] FIG. 1 is a block diagram illustrating one pattern for implementing a cloud infrastructure as a service system, according to at least one embodiment. [Figure 13] FIG. 1 is a block diagram illustrating another pattern for implementing a cloud infrastructure as a service system in accordance with at least one embodiment. [Figure 14] FIG. 1 is a block diagram illustrating another pattern for implementing a cloud infrastructure as a service system in accordance with at least one embodiment. [Figure 15] FIG. 1 is a block diagram illustrating another pattern for implementing a cloud infrastructure as a service system in accordance with at least one embodiment. [Figure 16] FIG. 1 is a block diagram illustrating an example computer system according to at least one embodiment. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

[0012] Detailed Description In the following description, for purposes of explanation, specific details are set forth in order to provide a thorough understanding of some embodiments. It will be apparent, however, that various embodiments may be practiced without these specific details. The figures and descriptions are not intended to be limiting. The word "exemplary" is used herein to mean "serving as an example, instance, or illustration." Any embodiment or design described herein as "exemplary" is not necessarily to be construed as preferred or advantageous over other embodiments or designs. Cloud Infrastructure Architecture Examples The term cloud services is generally used to refer to services made available by a cloud service provider (CSP) to users or customers on an on-demand basis (e.g., via a subscription model) using systems and infrastructure (cloud infrastructure) provided by the CSP. Typically, the servers and systems that make up the CSP's infrastructure are separate from the customer's own on-premise servers and systems. Thus, customers can utilize cloud services provided by the CSP without having to separately purchase hardware and software resources for the service. Cloud services are designed to provide subscribing customers with easy and scalable access to applications and computing resources without the need to invest in acquiring the infrastructure used to provide the service.

[0013] There are several cloud service providers that offer different types of cloud services. There are a variety of different types or models of cloud services, including Software-as-a-Service (SaaS), Platform-as-a-Service (PaaS), Infrastructure-as-a-Service (IaaS), etc.

[0014] A customer can subscribe to one or more cloud services offered by a CSP. A customer can be any entity, such as an individual, an organization, a business, etc. When a customer subscribes or registers for a service offered by a CSP, a tenancy or account is created for the customer. The customer can then access one or more subscribed cloud resources associated with the account through this account.

[0015] As mentioned above, Infrastructure as a Service (IaaS) is one particular type of cloud computing service. In the IaaS model, the CSP provides infrastructure (called cloud service provider infrastructure or CSPI) that customers can use to build customizable networks and deploy their resources. In this way, the customer's resources and networks are hosted in a distributed environment by the infrastructure provided by the CSP. This differs from traditional computing, where the customer's resources and networks are hosted by the infrastructure provided by the customer.

[0016] CSPI can include interconnected high performance compute resources including various host machines, memory resources, and network resources that form a physical network, also referred to as a foundation network or underlay network. CSPI resources may be distributed across one or more data centers that may be geographically distributed across one or more geographic regions. Virtualization software can be run by these physical resources to provide a virtualized distributed environment. Virtualization creates an overlay network (also known as a software-based network, software-defined network, or virtual network) on the physical network. The CSPI physical network provides the basis for creating one or more overlay or virtual networks on top of the physical network. The virtual or overlay network can include one or more virtual cloud networks (VCNs). The virtual network is implemented using software virtualization techniques (e.g., hypervisors, functions performed by network virtualization devices (NVDs) (e.g., smart NICs), top-of-rack (TOR) switches, smart TORs that implement one or more functions performed by NVDs, and other mechanisms) to create a layer of network abstraction that can run on top of the physical network. Virtual networks can take many forms, including peer-to-peer networks, IP networks, etc. Virtual networks are typically either Layer 3 IP networks or Layer 2 VLANs. Such methods of virtual or overlay networking are often referred to as virtual or overlay Layer 3 networking.Examples of protocols developed for virtual networks include IP-in-IP (or Generic Routing Encapsulation (GRE)), Virtual Extensible LAN (VXLAN - IETF RFC7348), Virtual Private Networks (VPNs) (e.g. MPLS Layer 3 Virtual Private Networks (RFC 4364)), VMware's NSX, and GENEVE (Generic Network Virtualization Encapsulation).

[0017] In the case of IaaS, the infrastructure provided by the CSP (CSPI) can be configured to provide virtualized computing resources over a public network (e.g., the Internet). In the IaaS model, the cloud computing service provider can host the infrastructure components (e.g., servers, storage devices, network nodes (e.g., hardware), deployment software, platform virtualization (e.g., hypervisor layer), etc.). In some cases, the IaaS provider can also provide various services (e.g., billing, monitoring, logging, security, load balancing, clustering, etc.) that accompany those infrastructure components. Thus, since these services can be policy-driven, IaaS users may be able to implement policies to drive load balancing to maintain application availability and performance. CSPI provides infrastructure and a set of complementary cloud services that enable customers to build and run a wide range of applications and services in a highly available, hosted, distributed environment. CSPI provides high-performance compute resources and capabilities as well as storage capacity on flexible virtual networks that can be securely accessed from various network locations, such as from the customer's on-premise network. When a customer subscribes or registers for an IaaS service offered by a CSP, the tenancy created for that customer becomes a secure, isolated partition within the CSP where the customer can create, organize, and manage their cloud resources.

[0018] Customers can build their own virtual networks using compute, memory, and networking resources provided by CSPI. On these virtual networks, one or more customer resources or workloads, such as compute instances, can be deployed. For example, customers can build one or more customizable private virtual networks, referred to as virtual cloud networks (VCNs), using resources provided by CSPI. Customers can deploy one or more customer resources, e.g., compute instances, on the customer VCN. Compute instances can take the form of virtual machines, bare metal instances, etc. Thus, CSPI provides infrastructure and a set of complementary cloud services that enable customers to build and run a wide range of applications and services in a highly available virtual host environment. Customers do not manage or control the underlying physical resources provided by CSPI, but rather control the operating systems, storage, and deployed applications, and in some cases, limited control over selected networking components (e.g., firewalls).

[0019] The CSP may provide a console that allows customers and network administrators to configure, access, and manage resources deployed in the cloud using CSPI resources. In some embodiments, the console provides a web-based user interface that can be used to access and manage the CSPI. In some embodiments, the console is a web-based application provided by the CSP.

[0020] CSPI can support single-tenancy or multi-tenancy architectures. In a single-tenancy architecture, a software (e.g., application, database) or hardware component (e.g., host machine or server) serves a single customer or tenant. In a multi-tenancy architecture, a software or hardware component serves multiple customers or tenants. Thus, in a multi-tenancy architecture, CSPI resources are shared among multiple customers or tenants. In a multi-tenancy situation, precautions and safeguards are taken in CSPI to ensure that each tenant's data is isolated and not visible to other tenants.

[0021] In a physical network, a network endpoint ("endpoint") refers to a computing device or system that is connected to the physical network and communicates bidirectionally with the connected network. A network endpoint of a physical network may be connected to a local area network (LAN), a wide area network (WAN), or other types of physical networks. Examples of traditional endpoints of a physical network include modems, hubs, bridges, switches, routers, and other networking devices, physical computers (or host machines), and the like. Each physical device of a physical network has a fixed network address that can be used to communicate with the device. This fixed network address can be a layer 2 address (e.g., a MAC address), a fixed layer 3 address (e.g., an IP address), and the like. In a virtualization environment or virtual network, the endpoints can include various virtual endpoints, such as virtual machines hosted by components of the physical network (e.g., hosted by a physical host machine). These endpoints of the virtual network are addressed by overlay addresses, such as overlay layer 2 addresses (e.g., an overlay MAC address) and overlay layer 3 addresses (e.g., an overlay IP address). Network overlays enable flexibility by allowing network administrators to move overlay addresses associated with network endpoints using software management (e.g., via software implementing the virtual network's control plane). Thus, unlike physical networks, in a virtual network, overlay addresses (e.g., overlay IP addresses) can be moved from one endpoint to another using network management software. Because virtual networks are built on top of physical networks, communication between components of a virtual network involves both the virtual network and the underlying physical network.To facilitate such communications, the CSPI components are configured to learn and store mappings that map overlay addresses of the virtual network to real physical addresses of the underlying network, or real physical addresses of the underlying network to overlay addresses of the virtual network, and use these mappings to facilitate communications. To facilitate virtual network routing, customer traffic is encapsulated.

[0022] Thus, physical addresses (e.g., physical IP addresses) are associated with components of a physical network, and overlay addresses (e.g., overlay IP addresses) are associated with entities of a virtual network. Physical and overlay IP addresses are both types of real IP addresses. They are distinct from virtual IP addresses, which are mapped to multiple real IP addresses. Virtual IP addresses provide a one-to-many mapping between a virtual IP address and multiple real IP addresses.

[0023] The cloud infrastructure or CSPI is physically hosted in one or more data centers in one or more regions around the world. The CSPI can include physical or foundational network components and virtualized components (e.g., virtual networks, compute instances, virtual machines, etc.) of virtual networks built on top of the physical network components. In some embodiments, the CSPI is organized and hosted in realms, regions, and availability domains. A region is a localized geographic area that typically includes one or more data centers. Regions are generally independent of each other and may be separated by vast distances, for example across countries or even continents. For example, a first region may be in Australia, another region may be in Japan, yet another region may be in India, etc. CSPI resources are divided between regions such that each region has its own independent subset of CSPI resources. Each region can provide a set of core infrastructure services and resources, such as compute resources (e.g., bare metal servers, virtual machines, containers, and related infrastructure), storage resources (e.g., block volume storage, file storage, object storage, archival storage), networking resources (e.g., virtual cloud networks (VCNs), load balancing resources, connections to on-premises networks), database resources, edge networking resources (e.g., DNS), and access management and monitoring resources. Each region typically has multiple routes that connect it to other regions in the realm.

[0024] Typically, applications are deployed in the region where they are most used (i.e., on the infrastructure associated with that region) because using nearby resources is faster than using resources that are farther away. Applications may also be deployed to different regions for a variety of reasons, such as redundancy to reduce the risk of region-wide events such as large weather systems or earthquakes, or to meet different requirements for legal jurisdictions, tax areas, and other business or societal standards.

[0025] Datacenters within a region can be further organized and subdivided into availability domains (ADs). An availability domain may correspond to one or more datacenters located within a region. A region may be composed of one or more availability domains. In such a distributed environment, CSPI resources are specific to a region, such as a virtual cloud network (VCN), or specific to an availability domain, such as a compute instance.

[0026] ADs within a region are isolated from each other, fault tolerant, and configured to have a very low chance of failing simultaneously. This is achieved by ensuring that ADs do not share critical infrastructure resources such as networking, physical cables, cable paths, and cable entry points, so that the failure of one AD in a region is unlikely to affect the availability of other ADs in the same region. ADs within the same region can be connected to each other with low-latency, high-bandwidth networks, which provides highly available connections to other networks (e.g., the Internet, customer on-premise networks, etc.) and allows multiple ADs to build replicated systems for both high availability and disaster recovery. Cloud services use multiple ADs to ensure high availability as well as to protect against resource failures. As the infrastructure provided by an IaaS provider grows, more regions and ADs can be added to add capacity. Traffic between availability domains is typically encrypted.

[0027] In some embodiments, regions are grouped into realms. A realm is a logical collection of regions. Realms are isolated from each other and do not share any data. Regions in the same realm can communicate with each other, but regions in different realms cannot. A CSP's customer's tenancy or account exists in a single realm and can span one or more regions that belong to that realm. Typically, when a customer subscribes to an IaaS service, a tenancy or account is created for the customer in a customer-specified region (referred to as the "home" region) within the realm. The customer can extend the customer's tenancy to one or more other regions within the realm. The customer cannot access regions that do not exist within the realm in which the customer's tenancy resides.

[0028] An IaaS provider can offer multiple realms, each corresponding to a particular set of customers or users. For example, a commercial realm can be offered for commercial customers. As another example, a realm can be offered for customers in a particular country. As yet another example, a government realm can be offered for a government, etc. For example, a government realm can be created for a particular government and can have a higher security level than a commercial realm. For example, Oracle Cloud Infrastructure (OCI) currently offers a realm for commercial regions and two realms for government cloud regions (e.g., FedRAMP authorized and IL5 authorized).

[0029] In some embodiments, an AD can be subdivided into one or more fault domains. A fault domain is a grouping of infrastructure resources within an AD to provide anti-affinity. Fault domains allow for the distribution of compute instances so that they are not on the same physical hardware within a single AD. This is known as anti-affinity. A fault domain refers to a set of hardware components (computers, switches, etc.) that share a single point of failure. A compute pool is logically divided into fault domains. Thus, a hardware failure or compute hardware maintenance event that affects one fault domain does not affect instances in other fault domains. Depending on the embodiment, the number of fault domains in each AD can vary. For example, in some embodiments, each AD includes three fault domains. Fault domains act as logical data centers within an AD.

[0030] When a customer subscribes to an IaaS service, resources from CSPI are provisioned to the customer and associated with the customer's tenancy. Customers can use these provisioned resources to build private networks and deploy resources on these networks. A customer network hosted in the cloud by CSPI is called a Virtual Cloud Network (VCN). Customers can set up one or more Virtual Cloud Networks (VCNs) using the CSPI resources allocated for the customer. A VCN is a virtual or software-defined private network. Customer resources deployed in a customer's VCN can include compute instances (e.g., virtual machines, bare metal instances) and other resources. These compute instances can represent various customer workloads such as applications, load balancers, databases, etc. Compute instances deployed on a VCN can communicate over public networks such as the Internet, with publicly accessible endpoints ("public endpoints"), with other instances in the same VCN or other VCNs (e.g., other VCNs of the customer or VCNs that do not belong to the customer), with the customer's on-premises data center or network, with service endpoints, and with other types of endpoints.

[0031] CSPs can use CSPI to provide various services. In some cases, CSPI customers themselves can act as service providers and provide services using CSPI resources. Service providers can expose service endpoints that are characterized by identification information (e.g., IP addresses, DNS names, and ports). Customer resources (e.g., compute instances) can consume a particular service by accessing the service endpoints for that particular service exposed by the service. These service endpoints are generally publicly accessible endpoints over a public communications network, such as the Internet, where users use a public IP address associated with the endpoint. Publicly accessible network endpoints are sometimes referred to as public endpoints.

[0032] In some embodiments, a service provider may expose a service through a service endpoint (sometimes referred to as a service endpoint). Customers of the service may then access the service using the service endpoint. In some implementations, a service endpoint provided for a service may be accessed by multiple customers wishing to consume the service. In other implementations, a dedicated service endpoint may be provided to a customer such that only that customer may access the service using the dedicated service endpoint.

[0033] In some embodiments, when a VCN is created, it is associated with a private overlay Classless Inter-Domain Routing (CIDR) address space, which is a range of private overlay IP addresses (e.g., 10.0 / 16) assigned to the VCN. A VCN includes associated subnets, route tables, and gateways. A VCN exists within a single region but can span one or more or all of the region's availability domains. A gateway is a virtual interface configured for a VCN that enables traffic to communicate between the VCN and one or more endpoints outside the VCN. One or more different types of gateways can be configured for a VCN to enable communication between different types of endpoints.

[0034] A VCN can be subdivided into one or more subnetworks, such as one or more subnets. A subnet is thus a unit of organization or subdivision that can be created within a VCN. A VCN can have one or more subnets. Each subnet in a VCN is associated with a contiguous range of overlay IP addresses (e.g., 10.0.0.0 / 24 and 10.0.1.0 / 24) that does not overlap with other subnets in that VCN and that represents a subset of address space within the VCN's address space.

[0035] Each compute instance is associated with a virtual network interface card (VNIC), which allows the compute instance to participate in a subnet of a VCN. A VNIC is a logical representation of a physical network interface card (NIC). In general, a VNIC is an interface between an entity (e.g., a compute instance, a service) and a virtual network. A VNIC resides in a subnet and has one or more associated IP addresses and associated security rules or policies. A VNIC corresponds to a layer 2 port on a switch. A VNIC is connected to a compute instance and a subnet in a VCN. A VNIC associated with a compute instance allows the compute instance to be part of a subnet of a VCN, and allows the compute instance to communicate (e.g., send and receive packets) with endpoints on the same subnet as the compute instance, endpoints in a different subnet in the VCN, or endpoints outside the VCN. Thus, the VNIC associated with a compute instance determines how the compute instance is connected to endpoints inside and outside the VCN. A VNIC for a compute instance is created and associated with the compute instance when the compute instance is created and added to a subnet in a VCN. When a subnet contains a set of compute instances, it contains VNICs corresponding to the set of compute instances, and each VNIC is connected to a compute instance in the set of compute instances.

[0036] Each compute instance is assigned a private overlay IP address through the VNIC associated with the compute instance. This private overlay IP address is assigned to the VNIC associated with the compute instance when the compute instance is created and is used to route traffic to and from the compute instance. All VNICs in a given subnet use the same route table, security lists, and DHCP options. As described above, each subnet in a VCN is associated with a contiguous range of overlay IP addresses (e.g., 10.0.0.0 / 24 and 10.0.1.0 / 24) that do not overlap with other subnets in that VCN and that represent an address space subset of the VCN's address space. For a VNIC on a particular subnet of a VCN, the private overlay IP address assigned to the VNIC is an address from the contiguous range of overlay IP addresses assigned to the subnet.

[0037] In some embodiments, a compute instance can be optionally assigned additional overlay IP addresses, such as one or more public IP addresses if in a public subnet, in addition to the private overlay IP address. These multiple addresses are assigned on the same VNIC or across multiple VNICs associated with the compute instance. However, each instance has a primary VNIC that is created during instance launch and associated with the overlay private IP address assigned to the instance, and this primary VNIC cannot be deleted. Additional VNICs, referred to as secondary VNICs, can be added to an existing instance in the same availability domain as the primary VNIC. All VNICs are in the same availability domain as the instance. The secondary VNICs can be in a subnet in the same VCN as the primary VNIC, or in a different subnet, either in the same VCN or in a different VCN.

[0038] When a compute instance is in a public subnet, it can optionally be assigned a public IP address. When a subnet is created, it can be designated as either a public or private subnet. A private subnet means that resources in the subnet (e.g., compute instances) and associated VNICs cannot have public overlay IP addresses. A public subnet means that resources in the subnet and associated VNICs can have public IP addresses. Customers can specify a subnet that exists within a single availability domain or across multiple availability domains within a region or realm.

[0039] As mentioned above, a VCN can be subdivided into one or more subnets. In some embodiments, a virtual router (VR) configured for a VCN (referred to as a VCN VR or simply VR) enables communication between subnets of the VCN. For a subnet in a VCN, the VR represents a logical gateway for that subnet that enables the subnet (i.e., compute instances on that subnet) to communicate with endpoints on other subnets in the VCN and with other endpoints outside the VCN. A VCN VR is a logical entity configured to route traffic between VNICs in a VCN and a virtual gateway ("gateway") associated with the VCN. Gateways are described further below with respect to FIG. 1. A VCN VR is a layer 3 / IP layer concept. In one embodiment, there is one VCN VR for a VCN, which potentially has an unlimited number of ports addressed by IP addresses, one port for each subnet of the VCN. Thus, a VCN VR has a different IP address for each subnet of the VCN to which the VCN VR is connected. The VRs are also connected to various gateways configured for the VCN. In some embodiments, a particular overlay IP address from a subnet's overlay IP address range is reserved for ports in the VCN VR of that subnet. For example, consider a VCN with two subnets, each with associated address ranges 10.0 / 16 and 10.1 / 16. For the first subnet in the VCN with address range 10.0 / 16, an address from this range is reserved for ports in the VCN VR of that subnet. In some cases, the first IP address from this range may be reserved for a VCN VR. For example, for a subnet with overlay IP address range 10.0 / 16, IP address 10.0.0.1 may be reserved for ports in the VCN VR of that subnet.For a second subnet in the same VCN with address range 10.1 / 16, the VCN VR may have a port for that second subnet with IP address 10.1.0.1. The VCN VR has a different IP address for each of the subnets in the VCN.

[0040] In some other embodiments, each subnet in a VCN may have its own associated VR, and the VR is addressable by the subnet using a reserved or default IP address associated with that VR. The reserved or default IP address may be, for example, the first IP address from a range of IP addresses associated with the subnet. A VNIC in a subnet can use this default or reserved IP address to communicate (e.g., send and receive packets) with the VR associated with the subnet. In such embodiments, the VR is the ingress / egress point for that subnet. A VR associated with a subnet in a VCN can communicate with other VRs associated with other subnets in the VCN. The VR can also communicate with a gateway associated with the VCN. The VR functions of a subnet are running on or performed by one or more NVDs that perform the VNIC functions of the VNICs in the subnet.

[0041] Route tables, security rules, and DHCP options can be configured for a VCN. A route table is a virtual route table for a VCN and contains rules for routing traffic from subnets in the VCN to destinations outside the VCN through gateways or specially configured instances. You can customize a VCN's route table to control how packets are forwarded / routed to and from the VCN. DHCP options refer to configuration information that is automatically provided to an instance when it is launched.

[0042] Security rules configured for a VCN represent the overlay firewall rules for the VCN. Security rules can include ingress and egress rules and can specify the types of traffic that are allowed to flow in and out of instances in the VCN (e.g., based on protocol and port). Customers can choose whether a given rule is stateful or stateless. For example, a customer can allow incoming SSH traffic from anywhere to a set of instances by configuring a stateful ingress rule with source CIDR 0.0.0.0 / 0 and destination TCP port 22. Security rules can be implemented using network security groups or security lists. A network security group consists of a set of security rules that apply only to resources in that group. A security list, on the other hand, contains rules that apply to all resources in a subnet that uses that security list. A VCN can be provided with a default security list along with default security rules. DHCP options configured for a VCN provide configuration information that is automatically provided to instances in the VCN when they launch.

[0043] In some embodiments, the configuration information of the VCN is determined and stored by the VCN control plane. The configuration information of the VCN may include, for example, address ranges associated with the VCN, subnets and related information in the VCN, one or more VRs associated with the VCN, compute instances and related VNICs in the VCN, NVDs performing various virtualized network functions (e.g., VNICs, VRs, gateways) associated with the VCN, state information of the VCN, and other VCN-related information. In some embodiments, the VCN distribution service publishes the configuration information stored by the VCN control plane, or a portion thereof, to the NVD. The distributed information may be used to update information stored and used by the NVD (e.g., forwarding tables, routing tables, etc.) to forward packets to and from compute instances in the VCN.

[0044] In some embodiments, the creation of VCNs and subnets is handled by a VCN control plane (CP), and the launch of compute instances is handled by the compute control plane. The compute control plane is responsible for allocating physical resources for the compute instances, and then calls the VCN control plane to create and attach VNICs to the compute instances. The VCN CP also sends VCN data mappings to the VCN data plane, which is configured to perform packet forwarding and routing functions. In some embodiments, the VCN CP provides a distribution service that is responsible for providing updates to the VCN data plane. Examples of the VCN control plane are also shown in Figures 12, 13, 14, and 15 (see reference numbers 1216, 1316, 1416, and 1516) and described below.

[0045] Customers can create one or more VCNs using resources hosted by CSPI. Compute instances deployed on a customer VCN can communicate with different endpoints. These endpoints can include endpoints hosted by CSPI and endpoints external to CSPI.

[0046] Various different architectures for implementing cloud-based services using CSPI are illustrated in Figures 1, 2, 3, 4, 5, 12, 13, 14, and 15 and described below. Figure 1 is a schematic diagram of a distributed environment 100 showing an overlay VCN or customer VCN hosted by CSPI, according to some embodiments. The distributed environment shown in Figure 1 includes multiple components in an overlay network. The distributed environment 100 shown in Figure 1 is merely an example and is not intended to unduly limit the scope of the claimed embodiments. Many variations, alternatives, and modifications are possible. For example, in some implementations, the distributed environment shown in Figure 1 may have more or fewer systems or components than those shown in Figure 1, may combine two or more systems, or may have a different configuration or arrangement of systems.

[0047] As shown in the example depicted in FIG. 1, distributed environment 100 includes CSPI 101, which provides services and resources that customers can subscribe to and use to build their own virtual cloud networks (VCNs). In some embodiments, CSPI 101 provides IaaS services to subscribing customers. Data centers within CSPI 101 may be organized into one or more regions. FIG. 1 illustrates one example region, “US Region” 102. A customer configures a customer VCN 104 for region 102. A customer can deploy various compute instances on VCN 104, where the compute instances can include virtual machines or bare metal instances. Example instances include applications, databases, load balancers, etc.

[0048] In the embodiment shown in FIG. 1, customer VCN 104 includes two subnets, namely "Subnet-1" and "Subnet-2," each with its own CIDR IP address range. In FIG. 1, the overlay IP address range of Subnet-1 is 10.0 / 16, and the address range of Subnet-2 is 10.1 / 16. VCN virtual router 105 represents the logical gateway of the VCN that enables communication between the subnets of VCN 104 and with other endpoints outside the VCN. VCN VR 105 is configured to route traffic between VNICs in VCN 104 and the gateways associated with VCN 104. VCN VR 105 provides a port to each subnet of VCN 104. For example, VR 105 may provide a port with IP address 10.0.0.1 to Subnet-1 and a port with IP address 10.1.0.1 to Subnet-2.

[0049] Multiple compute instances can be deployed on each subnet, where the compute instances can be virtual machine instances and / or bare metal instances. The compute instances in a subnet can be hosted by one or more host machines in CSPI101. The compute instances join the subnet through a VNIC associated with the compute instance. For example, as shown in FIG. 1, compute instance C1 is part of subnet-1 through a VNIC associated with the compute instance. Similarly, compute instance C2 is part of subnet-1 through a VNIC associated with C2. Similarly, multiple compute instances, which can be virtual machine instances or bare metal instances, can be part of subnet-1. Each compute instance is assigned a private overlay IP address and a MAC address through its associated VNIC. For example, in FIG. 1, compute instance C1 has an overlay IP address of 10.0.0.2 and a MAC address of M1, and compute instance C2 has a private overlay IP address of 10.0.0.3 and a MAC address of M2. Each compute instance in Subnet-1, including compute instances C1 and C2, has a default route to VCN VR105 using IP address 10.0.0.1, which is the IP address of a port in VCN VR105 in Subnet-1.

[0050] Subnet-2 may have multiple compute instances deployed therein, including virtual machine instances and / or bare metal instances. For example, as shown in FIG. 1, compute instances D1 and D2 are part of subnet-2 via VNICs associated with the respective compute instances. In the embodiment shown in FIG. 1, compute instance D1 has an overlay IP address of 10.1.0.2 and a MAC address of MM1, and compute instance D2 has a private overlay IP address of 10.1.0.3 and a MAC address of MM2. Each compute instance in subnet-2, including compute instances D1 and D2, has a default route to VCN VR105 using IP address 10.1.0.1, which is the IP address of a port in VCN VR105 in subnet-2.

[0051] VCN A 104 may also include one or more load balancers. For example, a load balancer may be provided for a subnet and configured to load balance traffic among multiple compute instances on the subnet. A load balancer may also be provided to load balance traffic among subnets within the VCN.

[0052] A particular compute instance deployed on VCN 104 can communicate with a variety of different endpoints. These endpoints can include endpoints hosted by CSPI 200 and endpoints external to CSPI 200. The endpoints hosted by CSPI 101 can include endpoints on the same subnet as the particular compute instance (e.g., communication between two compute instances in subnet-1), endpoints in a different subnet but in the same VCN (e.g., communication between a compute instance in subnet-1 and a compute instance in subnet-2), endpoints in a different VCN in the same region (e.g., communication between a compute instance in subnet-1 and an endpoint in a VCN in the same region 106 or 110, communication between a compute instance in subnet-1 and an endpoint in the service network 110 in the same region), or endpoints in a VCN in a different region (e.g., communication between a compute instance in subnet-1 and an endpoint in a VCN in a different region 108). Compute instances in a subnet hosted by CSPI 101 can also communicate with endpoints not hosted by CSPI 101 (i.e., external to CSPI 101). These external endpoints include endpoints in a customer's on-premise network 116, endpoints in other remote cloud hosted networks 118, public endpoints 114 accessible over a public network such as the Internet, and other endpoints.

[0053] Communication between compute instances on the same subnet is facilitated using VNICs associated with the source and destination compute instances. For example, compute instance C1 in subnet-1 may want to send a packet to compute instance C2 in subnet-1. For a packet originating from the source compute instance and destined for another compute instance in the same subnet, the packet is first processed by the VNIC associated with the source compute instance. Processing performed by the VNIC associated with the source compute instance may include determining the packet's destination information from the packet header, identifying policies (e.g., security lists) configured for the VNIC associated with the source compute instance, determining the packet's next hop, performing any packet encapsulation / decapsulation functions as necessary, and then forwarding / routing the packet to the next hop in order to facilitate communication of the packet to its intended destination. If the destination compute instance is in the same subnet as the source compute instance, the VNIC associated with the source compute instance is configured to identify the VNIC associated with the destination compute instance and forward the packet to that VNIC for processing. The VNIC associated with the destination compute instance then executes and forwards the packet to the destination compute instance.

[0054] When a packet is communicated from a compute instance in a subnet to an endpoint in a different subnet in the same VCN, the communication is facilitated by the VNICs and VCN VRs associated with the source and destination compute instances. For example, if compute instance C1 in subnet-1 in Figure 1 wants to send a packet to compute instance D1 in subnet-2, the packet is first processed by the VNIC associated with compute instance C1. The VNIC associated with compute instance C1 is configured to route the packet to VCN VR105 using the VCN VR's default route or port 10.0.0.1. VCN VR105 is configured to route the packet to subnet-2 using port 10.1.0.1. The packet is then received and processed by the VNIC associated with D1, which forwards the packet to compute instance D1.

[0055] When a packet is communicated from a compute instance in VCN 104 to an endpoint outside VCN 104, the communication is facilitated by the VNIC associated with the source compute instance, VCN VR 105, and a gateway associated with VCN 104. One or more types of gateways can be associated with VCN 104. A gateway is an interface between a VCN and another endpoint, where the other endpoint is outside the VCN. A gateway is a Layer 3 / IP layer concept that allows a VCN to communicate with endpoints outside the VCN. Thus, a gateway facilitates traffic flow between a VCN and other VCNs or networks. A variety of different types of gateways can be configured for a VCN to facilitate different types of communication with different types of endpoints. Depending on the gateway, the communication may be over a public network (e.g., the Internet) or over a private network. These communications may use a variety of communication protocols.

[0056] For example, compute instance C1 may wish to communicate with an endpoint outside of VCN 104. The packet may first be processed by a VNIC associated with source compute instance C1. The VNIC's processing determines that the packet's destination is outside of subnet-1 of C1. The VNIC associated with C1 may forward the packet to VCN VR 105 of VCN 104. VCN VR 105 then processes the packet and, as part of the processing, determines a particular gateway associated with VCN 104 as the packet's next hop based on the packet's destination. VCN VR 105 may then forward the packet to the particular identified gateway. For example, if the destination is an endpoint within a customer's on-premise network, the packet may be forwarded by VCN VR 105 to a dynamic routing gateway (DRG) gateway 122 configured for VCN 104. The packet may then be forwarded from the gateway to the next hop to facilitate communication of the packet to its ultimate intended destination.

[0057] A variety of different types of gateways can be configured for a VCN. Examples of gateways that can be configured for a VCN are shown in FIG. 1 and described below. Examples of gateways associated with a VCN are also shown in FIG. 12, FIG. 13, FIG. 14, and FIG. 15 (e.g., gateways referenced by reference numbers 1234, 1236, 1238, 1334, 1336, 1338, 1434, 1436, 1438, 1534, 1536, and 1538) and described below. As shown in the embodiment shown in FIG. 1, a dynamic routing gateway (DRG) 122 can be added to or associated with a customer VCN 104 to provide a path for private network traffic communication between the customer VCN 104 and another endpoint, where the other endpoint can be a customer's on-premise network 116, a VCN 108 in a different region of the CSPI 101, or other remote cloud networks 118 not hosted by the CSPI 101. The customer on-premise network 116 may be a customer network or a customer data center built using the customer's resources. Access to the customer on-premise network 116 is generally highly restricted. For a customer that has both a customer on-premise network 116 and one or more VCNs 104 deployed or hosted in the cloud by CSPI 101, the customer may want their on-premise network 116 and their cloud-based VCNs 104 to be able to communicate with each other. This allows the customer to build an extended hybrid environment that includes the customer's VCNs 104 hosted by CSPI 101 and their on-premise network 116. The DRG 122 enables such communication. To enable such communication, a communication channel 124 is set up, where one endpoint of the channel is in the customer's on-premise network 116 and the other endpoint is in CSPI 101 and connected to the customer's VCN 104. The communication channel 124 may be over a public communication network, such as the Internet, or a private communication network.A variety of different communication protocols can be used, such as IPsec VPN technology over a public communication network such as the Internet, Oracle's FastConnect technology using a private network instead of a public network, etc. A device or equipment in the customer on-premise network 116 that forms one endpoint of the communication channel 124 is referred to as a customer premises equipment (CPE), such as CPE 126 shown in FIG. 1. On the CSPI 101 side, the endpoint may be a host machine running the DRG 122. In some embodiments, a remote peering connection (RPC) can be added to the DRG, which allows a customer to peer one VCN with another VCN in another region. Using such an RPC, the customer VCN 104 can connect with a VCN 108 in another region using the DRG 122. The DRG 122 can also be used to communicate with other remote cloud networks 118 not hosted by the CSPI 101, such as Microsoft Azure cloud, Amazon AWS cloud, etc.

[0058] As shown in Figure 1, a customer VCN 104 can be configured with an Internet Gateway (IGW) 120, which allows compute instances on VCN 104 to communicate with public endpoints 114 accessible over a public network, such as the Internet. The IGW 1120 is a gateway that connects a VCN to a public network, such as the Internet. The IGW 120 allows a public subnet in a VCN, such as VCN 104 (where resources in the public subnet have public overlay IP addresses) to directly access a public endpoint 112 on a public network 114, such as the Internet. The IGW 120 can be used to initiate connections from a subnet in VCN 104 or from the Internet.

[0059] Customer VCN 104 can be configured with a network address translation (NAT) gateway 128 that allows cloud resources in the customer VCN that do not have dedicated public overlay IP addresses to access the Internet without exposing those resources to direct incoming Internet connections (e.g., L4-L7 connections). This allows private subnets in a VCN, such as private subnet-1 in VCN 104, to privately access public endpoints on the Internet. With a NAT gateway, connections can only be initiated from the private subnet to the public Internet, not from the Internet to the private subnet.

[0060] In some embodiments, a service gateway (SGW) 126 can be configured in the customer VCN 104, which provides a path for private network traffic between the VCN 104 and service endpoints supported in the service network 110. In some embodiments, the service network 110 may be provided by a CSP and can provide a variety of services. One example of such a service network is Oracle's service network, which provides a variety of services that customers can use. For example, a compute instance (e.g., a database system) in a private subnet of the customer VCN 104 can back up data to a service endpoint (e.g., object storage) without needing a public IP address or access to the Internet. In some embodiments, a VCN can have only one SGW, and connections can only be initiated from subnets in the VCN, not from the service network 110. When a VCN is peered with another VCN, resources in the other VCN typically cannot access the SGW. Resources in an on-premises network connected to a VCN with FastConnect or VPN Connect can also use a service gateway configured in that VCN.

[0061] In some implementations, SGW 126 uses the concept of service Classless Inter-Domain Routing (CIDR) labels, where a CIDR label is a string that represents all regional public IP address ranges for a service or group of services of interest. Customers use the service CIDR labels when configuring SGWs and associated routing rules to control traffic to the services. Customers can optionally use the service CIDR labels when configuring security rules without having to adjust the security rules if the service's public IP address changes in the future.

[0062] A local peering gateway (LPG) 132 is a gateway that can be added to a customer VCN 104 to allow the VCN 104 to peer with another VCN in the same region. Peering means that the VCNs communicate using private IP addresses without the traffic going over a public network such as the Internet and without routing the traffic through the customer's on-premises network 116. In a preferred embodiment, a VCN has a separate LPG for each peering it establishes. Local peering or VCN peering is a common practice used to establish network connections between different applications or infrastructure management functions.

[0063] A service provider, such as a provider of a service in the service network 110, can provide access to the service using different access models. According to a public access model, the service may be exposed as a public endpoint that is publicly accessible by compute instances in the customer VCN over a public network such as the Internet, and / or is privately accessible through the SGW 126. According to a specific private access model, the service is accessible as a private IP endpoint in a private subnet in the customer VCN. This is referred to as private endpoint (PE) access and allows the service provider to expose its service as an instance in the customer's private network. A private endpoint resource represents a service in the customer's VCN. Each PE appears as a VNIC (referred to as a PE-VNIC and has one or more private IPs) that the customer selects from a subnet in the customer VCN. Thus, the PE provides a way to present a service in the customer's private VCN subnet using a VNIC. Because the endpoint is exposed as a VNIC, all the features associated with the VNIC, such as routing rules and security lists, are available to the PE VNIC.

[0064] Service providers can register their services and make them accessible through the PE. Providers can associate policies with services that limit the visibility of the service to customer tenancies. Providers can register multiple services under a single virtual IP address (VIP), especially for multi-tenant services. There can be multiple private endpoints representing the same service (in multiple VCNs).

[0065] Compute instances in the private subnet can then access the service using the private IP address or service DNS name of the PE VNIC. Compute instances in the customer VCN can access the service by sending traffic to the private IP address of the PE in the customer VCN. A private access gateway (PAGW) 130 is a gateway resource that can be attached to a service provider VCN (e.g., a VCN in the service network 110) that acts as an ingress / egress point for all traffic from / to the customer subnet private endpoints. The PAGW 130 allows the provider to scale the number of PE connections without utilizing its internal IP address resources. The provider only needs to configure one PAGW for any number of services registered in a single VCN. The provider can represent the services as private endpoints in multiple VCNs for one or multiple customers. From the customer's perspective, the PE VNIC appears not to be attached to the customer's instance, but to the service the customer wants to interact with. Traffic destined for the private endpoint is routed to the service through the PAGW 130. These are called Customer-to-Service private connections (C2S connections).

[0066] The PE concept can also be used to extend private access of services to customer on-premises networks and data centers by allowing traffic to flow through FastConnect / IPsec links and private endpoints in the customer VCN. Private access of services can also be extended to customer peering VCNs by allowing traffic to flow between LPG 132 and a PE in the customer VCN.

[0067] Customers can control VCN routing at the subnet level, so they can specify which subnets in a customer VCN, such as VCN 104, use each gateway. The VCN's route tables are used to determine whether traffic can exit the VCN through a particular gateway. For example, in a particular case, the route table for a public subnet in customer VCN 104 can send non-local traffic through IGW 120. The route table for a private subnet in the same customer VCN 104 can send traffic destined for CSP services through SGW 126. All remaining traffic can be sent through NAT gateway 128. Route tables only control traffic that exits the VCN.

[0068] Security lists associated with a VCN are used to control traffic coming into the VCN through a gateway by inbound connections. All resources in a subnet use the same route table and security lists. Security lists can be used to control the specific types of traffic that can enter or leave instances in a subnet of a VCN. Security list rules can include ingress (inbound) rules and egress (outbound) rules. For example, an ingress rule can specify an allowed source address range, and an egress rule can specify an allowed destination address range. Security rules can specify a particular protocol (e.g., TCP, ICMP), a particular port (e.g., port 22 for SSH, port 3389 for Windows RDP), etc. In some implementations, the operating system of the instance can enforce its own firewall rules that match the security list rules. Rules can be stateful (e.g., connections are tracked and responses are automatically allowed without explicit security list rules for the response traffic) or stateless.

[0069] Access from a customer VCN (i.e., by resources or compute instances deployed on VCN 104) can be categorized as public access, private access, or dedicated access. Public access refers to an access model that uses public IP addresses or NATs to access public endpoints. Private access allows customer workloads in VCN 104 with private IP addresses (e.g., resources in a private subnet) to access services without going through a public network such as the Internet. In some embodiments, CSPI 101 allows customer VCN workloads with private IP addresses to access (public service endpoints of) services using a service gateway. Thus, the service gateway provides a private access model by establishing a virtual link between the customer's VCN and the public endpoints of the services that reside outside the customer's private network.

[0070] Additionally, CSPI can provide dedicated public access using technologies such as FastConnect public peering, where customer on-premises instances can use a FastConnect connection to access one or more services in the customer VCN without traversing a public network such as the Internet. CSPI can also provide dedicated private access using FastConnect private peering, where customer on-premises instances with private IP addresses can use a FastConnect connection to access customer VCN workloads. FastConnect is a network connection used instead of using the public Internet to connect a customer on-premises network to CSPI and its services. FastConnect provides an easy, flexible, and economical way to create dedicated private connections with higher bandwidth options and a more reliable and consistent networking experience when compared to Internet-based connections.

[0071] FIG. 1 and the accompanying description above describe various virtualization components in an example virtual network. As mentioned above, a virtual network is built on an underlying physical or infrastructure network. FIG. 2 illustrates a simplified architecture diagram of physical components in a physical network in CSPI 200 that provides an underlay for a virtual network, according to some embodiments. As illustrated, CSPI 200 provides a distributed environment that includes components and resources (e.g., compute resources, memory resources, and networking resources) provided by a cloud service provider (CSP). These components and resources are used to provide cloud services (e.g., IaaS services) to subscribing customers, i.e., customers who subscribe to one or more services provided by the CSP. Based on the services to which the customer subscribes, some of the resources (e.g., compute resources, memory resources, and networking resources) of CSPI 200 are provisioned to the customer. The customer can then build their own cloud-based (i.e., CSPI-hosted) customizable private virtual network using the physical compute resources, memory resources, and networking resources provided by CSPI 200. As previously mentioned, these customer networks are referred to as Virtual Cloud Networks (VCNs). Customers can deploy one or more customer resources, such as compute instances, into these customer VCNs. The compute instances can be in the form of virtual machines, bare metal instances, etc. CSPI 200 provides infrastructure and a set of complementary cloud services that enable customers to build and run a wide range of applications and services in a highly available hosted environment.

[0072] In the example embodiment shown in FIG. 2, the physical components of CSPI 200 include one or more physical host machines or servers (e.g., 202, 206, 208), network virtualization devices (NVDs) (e.g., 210, 212), top-of-rack (TOR) switches (e.g., 214, 216), and physical networks (e.g., 218), as well as switches within physical network 218. The physical host machines or servers may host and run various compute instances participating in one or more subnets of a VCN. The compute instances may include virtual machine instances and bare metal instances. For example, the various compute instances shown in FIG. 1 may be hosted by the physical host machines shown in FIG. 2. The virtual machine compute instances in a VCN may be run by one host machine or by multiple different host machines. The physical host machines may also host virtual host machines, container-based hosts or functions, and the like. The VNICs and VCN VRs shown in FIG. 1 may be run by the NVDs shown in FIG. 2. The gateway shown in FIG. 1 may be implemented by a host machine and / or a NVD as shown in FIG.

[0073] A host machine or server may run a hypervisor (also referred to as a virtual machine monitor or VMM) that creates and enables a virtualized environment on the host machine. Virtualization or a virtualized environment facilitates cloud-based computing. One or more compute instances may be created, executed, and managed on the host machine by the hypervisor on the host machine. The hypervisor on the host machine allows the host machine's physical computing resources (e.g., compute resources, memory resources, and networking resources) to be shared among the various compute instances executed by the host machine.

[0074] For example, as shown in FIG. 2, host machines 202 and 208 run hypervisors 260 and 266, respectively. These hypervisors can be implemented using software, firmware, or hardware, or a combination thereof. Typically, a hypervisor is a process or software layer that sits on top of a host machine's operating system (OS), which in turn runs on the host machine's hardware processor. A hypervisor provides a virtualized environment by allowing the host machine's physical computing resources (e.g., processing resources such as processors / cores, memory resources, networking resources, etc.) to be shared among various virtual machine compute instances executed by the host machine. For example, in FIG. 2, hypervisor 260 can sit on top of the host machine's OS and allow the host machine's 202's computing resources (e.g., processing resources, memory resources, and networking resources) to be shared among the compute instances (e.g., virtual machines) executed by the host machine. A virtual machine can have its own operating system (referred to as a guest operating system), which may be the same as or different from the host machine's OS. The operating system of a virtual machine executed by a host machine may be the same or different from the OS of another virtual machine executed by the same host machine. Thus, a hypervisor allows multiple operating systems to run side by side while sharing the same computing resources of the host machine. The host machines shown in FIG. 2 may have the same type of hypervisor or different types of hypervisors.

[0075] A compute instance can be a virtual machine instance or a bare metal instance. In Figure 2, compute instance 268 on host machine 202 and compute instance 274 on host machine 208 are examples of virtual machine instances. Host machine 206 is an example of a bare metal instance provided to a customer.

[0076] In some cases, a host machine may be provisioned in its entirety to a single customer, and one or more compute instances (either virtual machines or bare metal instances) hosted by that host machine may all belong to that same customer. In other cases, a host machine may be shared among multiple customers (i.e., multiple tenants). In such a multi-tenant scenario, a host machine may host virtual machine compute instances that belong to different customers. These compute instances may be members of different VCNs for different customers. In some embodiments, bare metal compute instances are hosted by bare metal servers without a hypervisor. When bare metal compute instances are provisioned, a single customer or tenant maintains control of the physical CPU, memory, and network interfaces of the host machine hosting the bare metal instance, and the host machine is not shared with other customers or tenants.

[0077] As previously mentioned, each compute instance that is part of a VCN is associated with a VNIC that enables the compute instance to be a member of a subnet of the VCN. The VNIC associated with a compute instance facilitates communication of packets or frames to and from the compute instance. The VNIC is associated with the compute instance when the compute instance is created. In some embodiments, for a compute instance executed by a host machine, the VNIC associated with the compute instance is executed by an NVD connected to the host machine. For example, in FIG. 2, host machine 202 executes virtual machine compute instance 268 associated with VNIC 276, which is executed by NVD 210 connected to host machine 202. As another example, bare metal instance 272 hosted by host machine 206 is associated with VNIC 280 executed by NVD 212 connected to host machine 206. As yet another example, the VNIC 284 is associated with a compute instance 274 executed by the host machine 208 , and the VNIC 284 is executed by the NVD 212 connected to the host machine 208 .

[0078] For a compute instance hosted by a host machine, the NVD connected to that host machine also runs a VCN VR corresponding to the VCN of which the compute instance is a member. For example, in the embodiment shown in Figure 2, NVD 210 runs VCN VR 277 corresponding to the VCN of which compute instance 268 is a member. NVD 212 may also run one or more VCN VRs 283 corresponding to the VCNs corresponding to the compute instances hosted by host machines 206 and 208.

[0079] A host machine may include one or more network interface cards (NICs) that allow the host machine to be connected to other devices. The NICs on the host machine may provide one or more ports (or interfaces) that allow the host machine to be communicatively connected to another device. For example, the host machine may be connected to the NVD using one or more ports (or interfaces) provided on the host machine and the NVD. The host machine may also be connected to other devices, such as another host machine.

[0080] 2, host machine 202 is connected to NVD 210 using link 220 extending between port 234 provided by NIC 232 of host machine 202 and port 236 of NVD 210. Host machine 206 is connected to NVD 212 using link 224 extending between port 246 provided by NIC 244 of host machine 206 and port 248 of NVD 212. Host machine 208 is connected to NVD 212 using link 226 extending between port 252 provided by NIC 250 of host machine 208 and port 254 of NVD 212.

[0081] The NVDs are further connected via communication links to top-of-rack (TOR) switches that are connected to a physical network 218 (also referred to as a switch fabric). In some embodiments, the links between the host machines and the NVDs and between the NVDs and the TOR switches are Ethernet links. For example, in FIG. 2, NVDs 210 and 212 are connected to TOR switches 214 and 216, respectively, using links 228 and 230. In some embodiments, links 220, 224, 226, 228, and 230 are Ethernet links. The collection of host machines and NVDs connected to a TOR may be referred to as a rack.

[0082] The physical network 218 provides a communications fabric that allows the TOR switches to communicate with each other. The physical network 218 may be a multi-tier network. In some implementations, the physical network 218 is a multi-tier Clos network of switches, with the TOR switches 214 and 216 representing leaf-level nodes of the multi-tier and multi-node physical switching network 218. Different Clos network configurations are possible, including, but not limited to, 2-tier networks, 3-tier networks, 4-tier networks, 5-tier networks, and generally "n"-tier networks. An example of a Clos network is shown in FIG. 5 and described below.

[0083] A variety of different connection configurations are possible between host machines and NVDs, including one-to-one, many-to-one, and one-to-many configurations. In a one-to-one implementation, each host machine is connected to its own separate NVD. For example, in FIG. 2, host machine 202 is connected to NVD 210 via NIC 232 of host machine 202. In a many-to-one configuration, multiple host machines are connected to one NVD. For example, in FIG. 2, host machines 206 and 208 are connected to the same NVD 212 via NICs 244 and 250, respectively.

[0084] In a one-to-many configuration, one host machine is connected to multiple NVDs. Figure 3 shows an example in a CSPI 300 where a host machine is connected to multiple NVDs. As shown in Figure 3, a host machine 302 includes a network interface card (NIC) 304 including multiple ports 306 and 308. The host machine 300 is connected to a first NVD 310 via port 306 and link 320, and to a second NVD 312 via port 308 and link 322. The ports 306 and 308 may be Ethernet ports, and the links 320 and 322 between the host machine 302 and the NVDs 310 and 312 may be Ethernet links. The NVD 310 is further connected to a first TOR switch 314, and the NVD 312 is connected to a second TOR switch 316. The links between the NVDs 310 and 312 and the TOR switches 314 and 316 may be Ethernet links. TOR switches 314 and 316 represent layer-0 switching devices in a multi-tier physical network 318 .

[0085] 3 provides two separate physical network paths from the physical switch network 318 to the host machine 302: a first path via the TOR switch 314 through the NVD 310 to the host machine 302, and a second path via the TOR switch 316 through the NVD 312 to the host machine 302. The separate paths provide enhanced availability (referred to as high availability) of the host machine 302. If there is a problem with one of the paths (e.g., a link on one of the paths fails) or if there is a problem with a device (e.g., a particular NVD is not functioning), the other path can be used for communication to and from the host machine 302.

[0086] In the configuration shown in Figure 3, the host machine is connected to two different NVDs using two different ports provided by the host machine's NIC. In other embodiments, the host machine may include multiple NICs that allow the host machine to connect to multiple NVDs.

[0087] Referring again to Figure 2, an NVD is a physical device or component that performs one or more network and / or storage virtualization functions. An NVD can be any device that has one or more processing units (e.g., a CPU, a network processing unit (NPU), an FPGA, a packet processing pipeline, etc.), memory including cache, and ports. Various virtualization functions may be performed by software / firmware executed by the one or more processing units of the NVD.

[0088] NVDs can be implemented in a variety of different ways. For example, in some embodiments, NVDs are implemented as interface cards called smart NICs or intelligent NICs with embedded processors. Smart NICs are separate devices from the NICs on the host machines. In FIG. 2, NVD 210 can be implemented as a smart NIC connected to host machine 202, and NVD 212 can be implemented as a smart NIC connected to host machines 206 and 208, respectively.

[0089] However, the smart NIC is only one example of an NVD implementation. Various other implementations are possible. For example, in some other implementations, the NVD, or one or more functions performed by the NVD, may be incorporated into or performed by one or more host machines, one or more TOR switches, and other components of CSPI200. For example, the NVD may be incorporated into a host machine, in which case the functions performed by the NVD are performed by the host machine. As another example, the NVD may be part of a TOR switch, or the TOR switch may be configured to perform the functions performed by the NVD that enable the TOR switch to perform various complex packet transformations used for public clouds. A TOR that performs the functions of the NVD may be referred to as a smart TOR. In still other implementations where customers are provided with virtual machine (VM) instances rather than bare metal (BM) instances, the functions performed by the NVD may be implemented inside the hypervisor of the host machine. In some other implementations, some of the functions of the NVD may be offloaded to a centralized service running on a fleet of host machines.

[0090] In some embodiments, such as when implemented as a smart NIC as shown in FIG. 2, the NVD may comprise multiple physical ports that allow the NVD to be connected to one or more host machines and one or more TOR switches. Ports on the NVD may be classified as host-side ports (also referred to as "south ports") or network-side or TOR-side ports (also referred to as "north ports"). The host-side ports of the NVD are the ports used to connect the NVD to the host machines. Examples of host-side ports in FIG. 2 include port 236 of the NVD 210, and ports 248 and 254 of the NVD 212. The network-side ports of the NVD are the ports used to connect the NVD to the TOR switches. Examples of network-side ports in FIG. 2 include port 256 of the NVD 210, and port 258 of the NVD 212. As shown in FIG. 2, the NVD 210 is connected to the TOR switch 214 using a link 228 that extends from port 256 of the NVD 210 to the TOR switch 214. Similarly, the NVD 212 is connected to the TOR switch 216 using a link 230 that extends from a port 258 of the NVD 212 to the TOR switch 216 .

[0091] The NVD can receive packets and frames (e.g., packets and frames generated by compute instances hosted by the host machine) from a host machine via a host-side port, perform necessary packet processing, and then forward the packets and frames to a TOR switch via the NVD's network-side port. The NVD can receive packets and frames from a TOR switch via the NVD's network-side port, and perform necessary packet processing, and then forward the packets and frames to a host machine via the NVD's host-side port.

[0092] In some embodiments, there may be multiple ports and associated links between the NVD and the TOR switch. These ports and links may be aggregated to form a link aggregator group (referred to as a LAG) of multiple ports or links. Link aggregation allows multiple physical links between two endpoints (e.g., between the NVD and the TOR switch) to be treated as a single logical link. All physical links within a given LAG may operate at the same speed and in full-duplex mode. LAGs help increase the bandwidth and reliability of the connection between the two endpoints. If one of the physical links in the LAG fails, the traffic is dynamically and transparently reassigned to one of the other physical links in the LAG. The aggregated physical link provides higher bandwidth than each individual link. Multiple ports associated with a LAG are treated as a single logical port. Traffic may be load balanced across the multiple physical links of the LAG. One or more LAGs may be configured between two endpoints. The two endpoints may be between the NVD and the TOR switch, between a host machine and the NVD, etc.

[0093] The NVD implements or performs network virtualization functions. These functions are performed by software / firmware executed by the NVD. Examples of network virtualization functions include, without limitation, packet encapsulation and decapsulation functions, functions to create VCN networks, functions to implement network policies such as VCN security list (firewall) functions, functions to facilitate routing and forwarding of packets to and from compute instances in the VCN, and the like. In some embodiments, the NVD is configured to perform a packet processing pipeline that processes packets when they are received and determines how to forward or route the packets. As part of this packet processing pipeline, the NVD can perform one or more virtual functions related to the overlay network, such as running VNICs associated with cis in the VCN, running virtual routers (VRs) associated with the VCN, encapsulating and decapsulating packets to facilitate forwarding or routing within the virtual network, running several gateways (e.g., local peering gateways), implementing security lists, network security groups, network address translation (NAT) functions (e.g., public IP to private IP translation on a host on a per-host basis), throttling functions, and the like.

[0094] In some embodiments, the packet processing data path in the NVD can include multiple packet pipelines, each packet pipeline consisting of a series of packet transformation stages. In some implementations, when a packet is received, it is parsed and classified into a single pipeline. The packet is then processed stage by stage in a linear fashion until it is either dropped or sent out through an interface of the NVD. These stages provide the packet processing building blocks of basic functions (e.g., validate headers, perform throttling, insert new layer 2 headers, perform L4 firewalling, VCN encapsulation / decapsulation, etc.), such that new pipelines can be constructed by assembling existing stages, and new functionality can be added by creating and inserting new stages into existing pipelines.

[0095] The NVD can perform both control plane and data plane functions corresponding to the control and data planes of the VCN. Examples of the VCN control plane are also shown in Figures 12, 13, 14, and 15 (see reference numbers 1216, 1316, 1416, and 1516) and described below. Examples of the VCN data plane are also shown in Figures 12, 13, 14, and 15 (see reference numbers 1218, 1318, 1418, and 1518) and described below. The control plane functions include functions used to configure the network (e.g., setting routes and route tables, configuring VNICs, etc.) that control how data is forwarded. In some embodiments, a VCN control plane is provided that centrally computes all overlay-to-foundation mappings and exposes them to the NVD and various gateway virtual network edge devices such as DRGs, SGWs, and IGWs. The same mechanism can also be used to expose firewall rules. In some embodiments, the NVD retrieves only mappings that are relevant to the NVD. The data plane functions include those that do the actual routing / forwarding of packets based on the configurations set using the control plane. The VCN data plane is implemented by encapsulating the customer's network packets before they traverse the underlying network. The encapsulation / de-encapsulation functions are implemented in the NVD. In some embodiments, the NVD is configured to intercept all network packets entering and leaving the host machine and perform network virtualization functions.

[0096] As described above, the NVD performs various virtualization functions including VNICs and VCN VRs. The NVD may perform VNICs associated with compute instances hosted by one or more host machines connected to the VNICs. For example, as shown in FIG. 2, the NVD 210 performs functions of a VNIC 276 associated with a compute instance 268 hosted by a host machine 202 connected to the NVD 210. As another example, the NVD 212 performs VNICs 280 associated with a bare metal compute instance 272 hosted by a host machine 206 and performs VNICs 284 associated with a compute instance 274 hosted by a host machine 208. The host machines may host compute instances belonging to different VCNs belonging to different customers, and the NVDs connected to the host machines may perform VNICs (i.e., perform functions related to the VNICs) corresponding to the compute instances.

[0097] The NVDs also run VCN virtual routers corresponding to the VCNs of the compute instances. For example, in the embodiment shown in FIG. 2, NVD 210 runs VCN VR 277 corresponding to the VCN to which compute instance 268 belongs. NVD 212 runs one or more VCN VRs 283 corresponding to one or more VCNs to which compute instances hosted on host machines 206 and 208 belong. In some embodiments, a VCN VR corresponding to that VCN is run by all NVDs connected to a host machine that hosts at least one compute instance that belongs to that VCN. If a host machine hosts compute instances that belong to different VCNs, the NVDs connected to that host machine may run VCN VRs corresponding to those different VCNs.

[0098] In addition to VNICs and VCN VRs, the NVD may include one or more hardware components that run various software (e.g., daemons) and facilitate various network virtualization functions performed by the NVD. For simplicity, these various components are grouped together as a "packet processing component" shown in FIG. 2. For example, NVD 210 includes packet processing component 286, and NVD 212 includes packet processing component 288. For example, the packet processing component of the NVD may include a packet processor configured to interact with the ports and hardware interfaces of the NVD to monitor all packets received by the NVD and communicated using the NVD, and store network information. The network information may include, for example, network flow information identifying different network flows processed by the NVD, and per-flow information (e.g., per-flow statistics). In some embodiments, the network flow information may be stored on a per-VNIC basis. The packet processor may implement stateful NAT and L4 firewall (FW) as well as perform per-packet operations. As another example, the packet processing component may include a replication agent configured to replicate information stored by the NVD to one or more different replication target stores. As yet another example, the packet processing component may include a logging agent configured to perform logging functions for the NVD. The packet processing component may also include software that monitors the performance and health of the NVD, and possibly the status and health of other components connected to the NVD.

[0099] FIG. 1 illustrates components of an example virtual or overlay network, including a VCN, subnets in the VCN, compute instances deployed on the subnets, VNICs associated with the compute instances, VRs of the VCN, and a set of gateways configured for the VCN. The overlay components illustrated in FIG. 1 may be executed or hosted by one or more of the physical components illustrated in FIG. 2. For example, the compute instances in the VCN may be executed or hosted by one or more host machines illustrated in FIG. 2. For a compute instance hosted by a host machine, the VNICs associated with the compute instance are typically executed by an NVD connected to the host machine (i.e., the VNIC functionality is provided by an NVD connected to the host machine). The VCN VR functionality of the VCN is executed by all NVDs connected to the host machines that host or execute the compute instances that are part of the VCN. The gateways associated with the VCN may be executed by one or more different types of NVDs. For example, some gateways may be executed by smart NICs and other gateways may be executed by one or more host machines or other implementations of NVDs.

[0100] As described above, a compute instance in a customer VCN can communicate with a variety of different endpoints that may be in the same subnet as the source compute instance, in a different subnet but in the same VCN as the source compute instance, or with endpoints outside the VCN of the source compute instance. These communications are facilitated using VNICs associated with the compute instance, VCN VRs, and gateways associated with the VCN.

[0101] For communication between two compute instances on the same subnet within a VCN, the communication is facilitated using the VNICs associated with the source and destination compute instances. The source and destination compute instances may be hosted by the same host machine or different host machines. A packet originating from the source compute instance may be forwarded from the host machine hosting the source compute instance to an NVD connected to that host machine. In the NVD, the packet is processed using a packet processing pipeline, which may include running the VNIC associated with the source compute instance. Because the destination endpoint of the packet is in the same subnet, running the VNIC associated with the source compute instance forwards the packet to the NVD running the VNIC associated with the destination compute instance, which processes the packet and forwards it to the destination compute instance. The VNICs associated with the source and destination compute instances may run on the same NVD (e.g., if both the source and destination compute instances are hosted by the same host machine) or on different NVDs (e.g., if the source and destination compute instances are hosted by different host machines connected to different NVDs). The VNICs can use the routing / forwarding tables stored by the NVDs to determine the next hop for a packet.

[0102] When communicating a packet from a compute instance in a subnet to an endpoint in a different subnet in the same VCN, the packet originating from the source compute instance is communicated from the host machine hosting the source compute instance to the NVD connected to that host machine. In the NVD, the packet is processed using a packet processing pipeline that may include running one or more VNICs and VRs associated with the VCN. For example, the NVD executes or invokes a function corresponding to a VNIC associated with the source compute instance (also referred to as executing a VNIC) as part of the packet processing pipeline. The function executed by the VNIC may include examining the VLAN tag on the packet. Because the destination of the packet is outside the subnet, a VCN VR function is then invoked and executed by the NVD. The VCN VR then routes the packet to the NVD that executes the VNIC associated with the destination compute instance. The VNIC associated with the destination compute instance then processes the packet and forwards the packet to the destination compute instance. The VNICs associated with the source compute instance and the destination compute instance may run on the same NVD (e.g., if both the source compute instance and the destination compute instance are hosted by the same host machine) or may run on different NVDs (e.g., if the source compute instance and the destination compute instance are hosted by different host machines connected to different NVDs).

[0103] If the packet's destination is outside the VCN of the source compute instance, the packet originating from the source compute instance is communicated from the host machine hosting the source compute instance to the NVD connected to that host machine. The NVD runs the VNIC associated with the source compute instance. Because the packet's destination endpoint is outside the VCN, the packet is then processed by the VCN VR for that VCN. The NVD invokes a VCN VR function, which may result in the packet being forwarded to an NVD running an appropriate gateway associated with the VCN. For example, if the destination is an endpoint in a customer's on-premises network, the packet may be forwarded by the VCN VR to an NVD running a DRG gateway configured for the VCN. The VCN VR may run on the same NVD as the NVD running the VNIC associated with the source compute instance, or it may be run by a different NVD. The gateway may be run by the NVD, which may be a smart NIC, a host machine, or other NVD implementation. The packet is then processed by the gateway and forwarded to a next hop that facilitates communication of the packet to its intended destination endpoint. For example, in the embodiment shown in FIG. 2, a packet originating from compute instance 268 may be communicated from host machine 202 over link 220 (using NIC 232) to NVD 210. In NVD 210, VNIC 276 is called out because it is the VNIC associated with source compute instance 268. VNIC 276 is configured to inspect encapsulation information in the packet, determine a next hop for forwarding the packet to facilitate communication of the packet to its intended destination endpoint, and forward the packet to the determined next hop.

[0104] Compute instances deployed on a VCN can communicate with a variety of different endpoints. These endpoints can include endpoints hosted by CSPI 200 and endpoints external to CSPI 200. Endpoints hosted by CSPI 200 can include instances in the same VCN or other VCNs, which can be the customer's VCN or VCNs that do not belong to the customer. Communications between endpoints hosted by CSPI 200 can be performed over physical network 218. Compute instances can also communicate with endpoints not hosted by CSPI 200 or external to CSPI 200. Examples of these endpoints include endpoints in a customer's on-premise network or datacenter, or public endpoints accessible over a public network, such as the Internet. Communications with endpoints external to CSPI 200 can be performed over a public network (e.g., the Internet) (not shown in FIG. 2) or a private network (not shown in FIG. 2) using a variety of communication protocols.

[0105] The architecture of CSPI 200 shown in FIG. 2 is merely an example and is not intended to be limiting. In alternative embodiments, variations, substitutions, and modifications are possible. For example, in some implementations, CSPI 200 may have more or fewer systems or components than those shown in FIG. 2, may combine two or more systems, or may have a different system configuration or arrangement. The systems, subsystems, and other components shown in FIG. 2 may be implemented with software (e.g., code, instructions, programs) executed by one or more processing units (e.g., processors, cores) of the respective systems, using hardware, or a combination thereof. The software may be stored in a non-transitory storage medium (e.g., a memory device).

[0106] FIG. 4 illustrates a connection between a host machine and an NVD that provides I / O virtualization to support multitenancy, according to some embodiments. As shown in FIG. 4, a host machine 402 runs a hypervisor 404 that provides a virtualized environment. The host machine 402 runs two virtual machine instances: VM1 406 that belongs to customer / tenant #1 and VM2 408 that belongs to customer / tenant #2. The host machine 402 includes a physical NIC 410 that is connected to an NVD 412 via link 414. Each of the compute instances is attached to a VNIC that is executed by the NVD 412. In the embodiment of FIG. 4, VM1 406 is attached to VNIC-VM1 420 and VM2 408 is attached to VNIC-VM2 422.

[0107] 4, NIC 410 includes two logical NICs, logical NIC A 416 and logical NIC B 418. Each virtual machine is attached to and configured to operate with its own logical NIC. For example, VM1 406 is attached to logical NIC A 416 and VM2 408 is attached to logical NIC B 418. The logical NICs allow each tenant's virtual machine to think it has its own host machine and NIC, even though host machine 402 includes only one physical NIC 410 that is shared by multiple tenants.

[0108] In some embodiments, each logical NIC is assigned its own VLAN ID. Thus, logical NIC A 416 for tenant #1 is assigned a particular VLAN ID, and logical NIC B 418 for tenant #2 is assigned another VLAN ID. When a packet is communicated from VM1 406, the hypervisor tags the packet with a tag assigned to tenant #1, and the packet is then communicated from host machine 402 to NVD 412 via link 414. Similarly, when a packet is communicated from VM2 408, the hypervisor tags the packet with a tag assigned to tenant #2, and the packet is then communicated from host machine 402 to NVD 412 via link 414. Thus, a packet 424 communicated from host machine 402 to NVD 412 has an associated tag 426 that identifies the particular tenant and associated VM. In the NVD, for a packet 424 received from a host machine 402, the tag 426 associated with the packet is used to determine whether the packet should be processed by VNIC-VM1 420 or VNIC-VM2 422. The packet is then processed by the corresponding VNIC. With the configuration shown in Figure 4, each tenant's compute instance can be thought of as owning its own host machine and NIC. The setup shown in Figure 4 provides I / O virtualization to support multi-tenancy.

[0109] FIG. 5 illustrates a simplified block diagram of a physical network 500 according to some embodiments. The embodiment illustrated in FIG. 5 is structured as a Clos network. A Clos network is a particular type of network topology designed to provide connection redundancy while maintaining high bisection bandwidth and maximum resource utilization. A Clos network is a type of non-blocking, multi-stage or multi-layer switching network, where the number of stages or layers can be 2, 3, 4, 5, etc. The embodiment illustrated in FIG. 5 is a three-layer network including layer 1, layer 2, and layer 3. A TOR switch 504 represents a layer-0 switch of the Clos network. One or more NVDs are connected to the TOR switch. The layer-0 switch is also referred to as an edge device of the physical network. The layer-0 switch is connected to a layer-1 switch, also referred to as a leaf switch. In the embodiment illustrated in FIG. 5, a set of "n" layer-0 TOR switches is connected to a set of "n" layer-1 switches, together forming a pod. Each tier-0 switch in a pod is interconnected to all tier-1 switches in the pod, but the switches between pods are not connected. In some embodiments, two pods are referred to as a block. Each block is served by or connected to a set of "n" tier-2 switches (sometimes referred to as spine switches). There may be several blocks in a physical network topology. The tier-2 switches are then connected to "n" tier-3 switches (sometimes referred to as super-spine switches). Communication of packets through the physical network 500 is typically performed using one or more layer-3 communication protocols. Typically, all layers of the physical network except the TOR layer are n-way redundant, thus enabling high availability. Policies can be specified on the pods and blocks to control the visibility of the switches of the physical network to each other, thereby enabling the expansion of the physical network.

[0110] A feature of Clos networks is that the maximum hop count from one tier-0 switch to another tier-0 switch (or from an NVD connected to a tier-0 switch to another NVD connected to a tier-0 switch) is constant. For example, in a three-tier Clos network, a maximum of seven hops are required for a packet to reach from one NVD to another NVD, where the source NVD and the target NVD are connected to the leaf layers of the Clos network. Similarly, in a four-tier Clos network, a maximum of nine hops are required for a packet to reach from one NVD to another NVD, where the source NVD and the target NVD are connected to the leaf layers of the Clos network. Thus, the Clos network architecture maintains consistent latency throughout the network, which is important for intra-datacenter and inter-datacenter communications. Clos topologies scale horizontally and are cost-effective. The bandwidth / throughput capacity of the network can be easily increased by adding more switches (e.g., more leaf switches and spine switches) at various tiers and by increasing the number of links between switches at adjacent tiers.

[0111] In some embodiments, each resource in the CSPI is assigned a unique identifier called a Cloud Identifier (CID). This identifier is included as part of the resource's information and can be used to manage the resource, for example, via a console or via an API. An example syntax for a CID is: ocid1.<RESOURCE TYPE> . <realm>.[REGION][.FUTURE USE].<UNIQUE ID> where: "ocid1": A string indicating the version of the CID. "resource type": The type of resource (for example, instance, volume, VCN, subnet, user, group, etc.). "realm": The realm the resource resides in. Example values ​​are "c1" for a commercial realm, "c2" for a government cloud realm, or "c3" for a federal cloud realm, etc. Each realm can have its own domain name. "region": The region the resource is in. This part can be blank if a region is not applicable to the resource. "future use": Reserved for future use. "unique ID": The unique part of the ID. The format may vary depending on the type of resource or service.

[0112] FIG. 6 illustrates a block diagram of a cloud infrastructure 600 incorporating a CLOS network arrangement, according to some embodiments. The cloud infrastructure 600 includes multiple racks (e.g., Rack 1 610...Rack M, 620). Each rack includes multiple host machines (also referred to herein as hosts). For example, Rack 1 610 includes multiple hosts (e.g., K host machines), Host 1-A, 612 through Host 1-K, 614, and Rack M includes K host machines, namely Host MA, 622 through Host MK, 624. It is understood that the illustration of FIG. 6 (i.e., each rack includes the same number of host machines, e.g., K host machines) is intended to be exemplary and non-limiting. For example, Rack M, 620 can have a greater or lesser number of host machines compared to the number of host machines included in Rack 1, 610.

[0113] Each host machine includes multiple graphics processing units (GPUs). For example, as shown in FIG. 6, host machine 1-A 612 includes N GPUs, e.g., GPU1, 613. Furthermore, it is understood that the illustration of FIG. 6 (where each host machine includes the same number of GPUs, i.e., N GPUs) is intended to be exemplary and non-limiting, i.e., each host machine can include a different number of GPUs. Each rack includes a top-of-rack (TOR) switch communicatively coupled to the GPUs hosted on the host machines. For example, rack 1 610 includes a TOR switch (i.e., TOR 1) 616 communicatively coupled to host 1-A, 612 and host 1-K, 614, and rack M 620 includes a TOR switch (i.e., TOR M) 626 communicatively coupled to host MA, 622 and host MK, 624. It is understood that the TOR switches (i.e., TOR 1 616 and TOR M 626) shown in FIG. 6 each include N ports that are used to communicatively couple the TOR switch to the N GPUs hosted on each host machine included in the rack. The coupling of the TOR switches to the GPUs as shown in FIG. 6 is intended to be exemplary and non-limiting. For example, in some embodiments, the TOR switch may have multiple ports, each of which corresponds to a GPU on each host machine, i.e., a GPU on a host machine may be connected to a unique port of the TOR via a communication link. Furthermore, traffic received by a network device (e.g., TOR 1 616) is characterized herein as traffic received on a particular incoming port-link of the network device. For example, if GPU 1 613 of Host 1-A 612 sends a data packet to TOR 1 616 (using link 617), the data packet is received on port 619 of the TOR 1 switch. TOR 1 616 characterizes this data packet as information received on the first incoming port-link of the TOR, it being understood that a similar concept can be applied to all outgoing port-links of the TOR.

[0114] The TOR switches from each rack are communicatively coupled to multiple spine switches, e.g., spine switch 1, 630 and spine switch P, 640. As shown in FIG. 6, TOR1, 616 is each connected to spine switch 1, 630 via two links and to spine switch P, 640 via another two links. Information sent from a particular TOR switch to a spine switch is referred to herein as communication occurring via an uplink, while information sent from a spine switch to a TOR switch is referred to herein as communication occurring via a downlink. According to some embodiments, the TOR switches and spine switches are connected in a CLOS network arrangement (e.g., a multi-stage switching network), with each TOR switch forming a "leaf" node of the CLOS network.

[0115] According to some embodiments, the GPUs included in the host machine execute tasks related to machine learning. In such a setting, a single task may be executed / spread across a large number (e.g., 64) of GPUs, which may further be spread across multiple host machines and across multiple racks. All of these GPUs are processing the same task (i.e., workload) and therefore need to communicate with each other synchronously in time. Furthermore, at any given moment, the GPUs are either in a computation mode or a communication mode, i.e., the GPUs communicate with each other at approximately the same moment. The speed of the workload is determined by the speed of the slowest GPU.

[0116] Typically, equal cost multipath (ECMP) routing is utilized to route packets from a source GPU (e.g., GPU1, 613 of Host1-A 612) to a destination GPU (e.g., GPU1, 623 of Host MA 622). In ECMP routing, when there are multiple equal-cost paths available for routing traffic from a sender to a receiver, a selection technique is used to select a particular path. Thus, at a network device receiving the traffic (e.g., a TOR switch or a spine switch), a selection algorithm is used to select an outgoing link to be used to forward the traffic at the next hop from the network device to another network device. Such outgoing link selection is performed at each network device in the path from the sender to the receiver. A hash-based selection algorithm is a widely used ECMP selection technique, where the hash can be based on the packet's 4-tuple (e.g., source port, destination port, source IP, destination IP).

[0117] ECMP routing is a flow aware routing technique, where each flow (i.e., a stream of data packets) is hashed to a specific path for the duration of the flow. Packets in a flow are therefore forwarded out of a network device using a specific outgoing port / link. This is typically done to ensure that packets in a flow arrive in order, i.e., no reordering of packets is required. However, ECMP routing is bandwidth (or throughput) unaware. In other words, TOR and spine switches perform statistical flow-aware (throughput unaware) ECMP load balancing of flows over parallel links.

[0118] Standard ECMP routing (i.e., flow-only aware routing) has the problem that flows received by a network device over two separate incoming links may hash to the same outgoing link, thereby causing flow collisions. For example, consider a situation where two flows arrive over two separate incoming 100G links, and each of the flows hashes to the same 100G outgoing link. In such a situation, the incoming bandwidth is 200G, but the outgoing bandwidth is 100G, resulting in congestion (i.e., flow collisions) and packets being dropped. For example, FIG. 7, described below, illustrates an example scenario 700 of flow collisions.

[0119] As shown in FIG. 7, there are two flows, namely, flow 1 710 (shown as a solid line) directed from a first GPU of host machine Host 1-A, 612 to the TOR switch 616, and flow 2 720 (shown as a dashed line) directed from another GPU on the same host machine 612 to the TOR switch 616. Note that the two flows are directed to the TOR switch 616 on different links, namely different incoming port-links of the TOR. Assume that all the links shown in FIG. 7 have a capacity (i.e., bandwidth) of 100G. If the TOR switch 616 runs an ECMP routing algorithm, it is possible that the two flows will be hashed to use the same outgoing port-link of the TOR, e.g., the port of the TOR connected to the link 730 that connects the TOR switch 616 to the spine switch 630. In this case, a collision will occur between the two flows (represented by an "X" mark), resulting in the packet being dropped.

[0120] Such collision scenarios are generally problematic for all types of traffic, regardless of protocol. For example, TCP is intelligent in that if a packet is dropped and the sender does not receive an acknowledgment for the dropped packet, the packet will be retransmitted. However, with Remote Direct Memory Access (RDMA) type traffic, the situation is worse. RDMA networks do not use TCP for various reasons (e.g., TCP has complex logic that is not suitable for low latency and high performance). RDMA networks use protocols such as RDMA over Infiniband or RDMA over converged Ethernet (RoCE). In RoCE, there is a congestion control algorithm where the sender slows down the sending of packets when it identifies the occurrence of congestion or dropped packets. In the case of a dropped packet, not only the dropped packet but also several packets around the dropped packet are retransmitted, which consumes more available bandwidth and reduces performance.

[0121] Techniques to overcome the above mentioned flow collision problem are described below. It is understood that the flow collision problem affects traffic from the CPU and the GPU. However, the flow collision problem is a much bigger problem for the GPU due to its stringent time synchronization requirement. Furthermore, it should be understood that the standard ECMP routing mechanism, due to its inherent property of routing information in a statistical bandwidth-unaware manner, will cause flow collision scenarios regardless of whether the network is oversubscribed or undersubscribed. A network without oversubscription is one in which the bandwidth of an incoming link to a device (e.g., TOR, spine switch) is the same as the bandwidth of an outgoing link. Note that if all links have the same bandwidth capacity, the number of incoming links is the same as the number of outgoing links.

[0122] According to some embodiments, techniques for overcoming the flow collision problem described above include a GPU-based policy routing mechanism (also referred to herein as a GPU-based traffic engineering mechanism) and a modified ECMP routing mechanism, each of which is described in further detail below.

[0123] FIG. 8 illustrates a policy-based routing mechanism implemented in network devices of the cloud infrastructure of FIG. 6, according to some embodiments. Specifically, the cloud infrastructure 800 includes multiple racks, e.g., rack 1 810 through rack M 820. Each rack includes a host machine including multiple GPUs. For example, rack 1 810 includes a host machine, i.e., host 1-A 812, and rack M 820 includes a host machine, i.e., host MA 822. Each rack includes a TOR switch, e.g., rack 1 810 includes a TOR 1 switch 814, and rack M 820 includes a TOR M switch 824. The host machines in each rack are communicatively coupled to a respective TOR switch in the rack. The TOR switches, i.e., TOR switch 1, 814 and TOR switch M 824, are further communicatively coupled to spine switches, i.e., spine switch 830 and spine switch 840. For purposes of explaining policy-based routing and for purposes of illustration, the cloud infrastructure 800 is illustrated as including a single host machine per rack. However, it is understood that each rack in the infrastructure can have more than one host machine.

[0124] According to some embodiments, data packets from senders to receivers are routed in the network on a hop-by-hop basis. Routing policies are configured in each network device that binds incoming port-links to outgoing port-links. The network devices can be TOR switches or spine switches. With reference to FIG. 8, two flows are shown: flow 1 from GPU 1 on host machine 812 whose intended destination is GPU 1 on host machine 822, and flow 2 from GPU N on host machine 812 whose intended destination is GPU N on host machine 822. The network devices, TOR 1 814, spine 1 830, TOR M 824, and spine P 840, are configured to bind (or match) incoming port-links to outgoing port-links. The matching of incoming port-links to outgoing port-links is maintained (e.g., in a policy table) in each network device.

[0125] 8, it can be observed that for flow 1 (i.e., the flow shown by the solid lines), TOR 1 814 is configured to forward the received packet on outgoing link 855 upon receiving the packet on link 850. Similarly, spine switch 830 is configured to forward the received packet on outgoing link 860 upon receiving the packet via link 855. Finally, TOR M 824 is configured to forward the received packet on outgoing link 865 upon receiving the packet on link 860 for sending the packet to its intended destination, i.e., GPU 1 on host machine 822. Similarly, for flow 2 (i.e., the flow shown by the dashed lines), TOR 1 814 is configured to forward the received packet on outgoing link 875 to spine P 840 upon receiving the packet on link 870. Spine switch 840 is configured to forward the received packet on outgoing link 880 upon receiving the packet via link 875. Finally, upon receiving a packet on link 880, TOR M 824 is configured to forward the packet on outgoing link 885 for transmission to its intended destination, i.e., GPU N on the host machine 822.

[0126] Thus, according to the GPU policy-based routing mechanism, each network device is configured to bind an incoming port / link to an outgoing port / link to avoid collisions. For example, considering the first hop flows of flow 1 and flow 2, TOR 1 814 receives a first data packet (corresponding to flow 1) on link 850 and a second data packet (corresponding to flow 2) on link 870. TOR 1 814 is configured to forward the data packet received on incoming link / port 850 to outgoing link / port 855 and forward the data packet received on incoming link / port 870 to outgoing link / port 875, thus ensuring that the first and second data packets do not collide. It is understood that in each network device in the cloud infrastructure, there is a one-to-one correspondence between incoming port-links and outgoing port-links, i.e., the mapping between incoming port-links and outgoing port-links is performed independently of the flow and / or the protocol executed by the flow. Furthermore, according to some embodiments, when an outgoing link of a particular network device fails, the network device is configured to switch its routing policy from GPU policy-based routing to standard ECMP routing to obtain a new available output link (from the various available output links) and transmit the flow to the new output link. It is noted that in this case, flow collisions may occur, which may cause congestion.

[0127] 9, a block diagram of a cloud infrastructure 900 illustrating different types of connections according to some embodiments is shown. The infrastructure 900 includes multiple racks, e.g., rack 1 910, rack D 920, and rack M, 930. The racks 910 and 930 include multiple host machines. For example, rack 1 910 includes multiple hosts (e.g., K host machines), namely host 1-A, 912 through host 1-K, 914, and rack M includes K host machines, namely host MA, 932 through host MK, 934. Rack D 920 includes one or more host machines 922, each of which includes multiple CPUs, i.e., the host machines 922 are non-GPU host machines. Each of the racks 910, 920, and 930 includes a TOR switch, i.e., TOR 1, 916, TOR D 926, and TOR M 936, each communicatively coupled to the host machines in the respective rack. Additionally, the TOR switches 916 , 926 , and 936 are communicatively coupled to a number of spine switches, namely, spine switches 940 and 950 .

[0128] As shown in FIG. 9, there is a first connection (i.e., connection 1 shown by dashed line) from a GPU host (i.e., host 1-A 912) to another GPU host (i.e., host MA 932), and there is a second connection (i.e., connection 2 shown by dotted line) from a GPU host (i.e., host 1-K 914) to a non-GPU host (i.e., host D 922). For connection 1, data packets associated with the flow are routed on a hop-by-hop basis by configuring each intermediate network device based on the GPU-based policy routing mechanism as previously described in FIG. 8. Specifically, data packets of connection 1 are routed along the dashed links shown in FIG. 9, i.e., from host 1-A to TOR 1, from TOR 1 to spine switch 1, from spine switch 1 to TOR M, and finally from TOR M to host MA. Each of the network devices is configured to bind an incoming link-port of the network device to an outgoing link-port.

[0129] In contrast, connection 2 is from a GPU-based host (i.e., host 1-K 914) to a non-GPU-based host (i.e., host D 922). In this case, TOR 1 916 is configured to bind an incoming link-port, i.e., a port and link (971) that receives a data packet from a GPU-based host, to an outgoing link-port, i.e., an output port and a link connected to the output port 972. Thus, TOR 1 forwards the data packet to spine switch 1 940 using the outgoing link 972. Because the data packet is destined for a non-GPU-based host, spine switch 1 940 does not utilize a policy-based routing mechanism to forward the packet to TOR D. Rather, spine switch 1 940 utilizes an ECMP routing mechanism to select one of the available links 980 to forward the packet to TOR D, which forwards the data packet to host D 922.

[0130] In some embodiments, flow collisions as described above with reference to FIG. 7 are avoided by network devices of the cloud infrastructure described herein by implementing a modified version of ECMP routing. In this case, the ECMP hashing algorithm is modified such that traffic arriving via a particular incoming port-link of the network device is hashed (and directed) to the same outgoing port-link of the network device. Specifically, each network device implements a modified ECMP algorithm to determine the output port-link to be used to forward packets, where the modified ECMP algorithm ensures that any packet received on a particular incoming port-link always hashes to the same outgoing port-link. For example, consider the case where a first packet and a second packet are received on a first incoming port-link of the network device, and a third packet and a fourth packet are received on a second incoming port-link of the network device. In such a situation, the network device is configured to implement a modified ECMP algorithm, where the network device transmits the first packet and the second packet on a first outgoing port-link of the network device, transmits the third packet and the fourth packet on a second outgoing port-link of the network device, where the first incoming port-link of the network device is different from the second incoming port-link of the network device, and where the first outgoing port-link of the network device is different from the second outgoing port-link of the network device. In some implementations, information stored in a forwarding information database (e.g., a forwarding table, an ECMP table, etc.) can be modified to enable the above-mentioned functionality.

[0131] 10, an exemplary configuration of a rack 1000 is shown in accordance with some embodiments. As shown in FIG. 10, the rack 1000 includes two host machines, namely, host machine 1010 and host machine 1020. Although the rack 1000 is shown to include two host machines, it is understood that the rack 1000 may include a greater number of host machines. Each host machine includes multiple GPUs and multiple CPUs. For example, the host machine 1010 includes multiple CPUs 1012 and multiple GPUs 1014, and the host machine 1020 includes multiple CPUs 1022 and multiple GPUs 1024.

[0132] The host machines are communicatively coupled to different network fabrics via different TOR switches. For example, the host machines 1010 and 1020 are communicatively coupled to a network fabric (referred to herein as a front-end network of the rack 1000) via a TOR switch, i.e., TOR 1 switch 1050. The front-end network may correspond to an external network. More specifically, the host machine 1010 is connected to the front-end network via a network interface card (NIC) 1030 and a network virtualization device (NVD) 1035 coupled to the TOR 1 switch 1050. The host machine 1020 is connected to the front-end network via a NIC 1040 and a NVD 1045 coupled to the TOR 1 switch 1050. Thus, according to some embodiments, the CPU of each host machine can communicate with the front-end network via the NIC, the NVD, and the TOR switch. For example, the CPU 1012 of the host machine 1010 can communicate with the front-end network via the NIC 1030, the NVD 1035, and the TOR 1 switch 1050.

[0133] The host machines 1010 and 1020 are connected to a Quality of Service (QoS) enabled back-end network, which is referred to herein as a back-end network corresponding to the GPU cluster network as shown in FIG. 6. The host machine 1010 is connected to a TOR 2 switch 1060 communicatively coupling the host machine 1010 to the back-end network via another NIC 1065. Similarly, the host machine 1020 is connected to a TOR 2 switch 1060 communicatively coupling the host machine 1020 to the back-end network via a NIC 1080. In this manner, the multiple GPUs of each host machine can communicate with the back-end network via the NIC and the TOR switch. In this manner, the multiple CPUs utilize separate sets of NICs (compared to the set of NICs utilized by the GPUs) to communicate with the front-end and back-end networks, respectively.

[0134] FIG. 11A illustrates an exemplary flowchart 1100 illustrating steps performed by a network device in routing a packet, according to some embodiments. The process illustrated in FIG. 11A may be implemented in software (e.g., code, instructions, programs) executed by one or more processing units (e.g., processors, cores) of the respective system, hardware, or combination thereof. The software may be stored in a non-transitory storage medium (e.g., in a memory device). The method presented in FIG. 11A and described below is intended to be exemplary and non-limiting. Although FIG. 11A illustrates various processing steps occurring in a particular sequence or order, this is not intended to be limiting. In some alternative embodiments, steps may be performed in several different orders, or some steps may be performed in parallel.

[0135] The process begins at step 1105, where a network device receives a data packet transmitted by a graphics processing unit (GPU) of a host machine. At step 1110, the network device determines an incoming port / link on which the packet was received. At step 1115, the network device identifies an outgoing port / link that corresponds to the incoming port / link (on which the packet was received) based on policy routing information. According to some embodiments, the policy routing information corresponds to a pre-configured GPU routing table for the network device that links each incoming port-link of the network device to a unique outgoing link-port of the network device.

[0136] The process then proceeds to step 1120, where a query is performed to determine whether the outgoing port-link is functional, e.g., whether the outgoing link is active. If the query is answered affirmatively (i.e., the link is active), the process proceeds to step 1125, and if the query is answered negatively (i.e., the link is faulty / inactive), the process proceeds to step 1130. In step 1125, the network device forwards the received data packet to another network device using the outgoing port-link (identified in step 1115). In step 1130, the network device obtains flow information for the data packet, e.g., the flow information may correspond to a 4-tuple (i.e., source port, destination port, source IP address, destination IP address) associated with the packet. Based on the obtained flow information, the network device uses ECMP routing to identify a new outgoing port-link, i.e., an available outgoing port-link. The process then proceeds to step 1135, where the network device forwards the data packet received in step 1105 using the newly obtained outgoing port-link.

[0137] FIG. 11B illustrates another exemplary flowchart 1150 illustrating steps performed by a network device in routing a packet, according to some embodiments. The process illustrated in FIG. 11B may be implemented in software (e.g., code, instructions, programs) executed by one or more processing units (e.g., processors, cores) of the respective system, hardware, or combination thereof. The software may be stored in a non-transitory storage medium (e.g., in a memory device). The method presented in FIG. 11B and described below is intended to be exemplary and non-limiting. Although FIG. 11B illustrates various processing steps occurring in a particular sequence or order, this is not intended to be limiting. In some alternative embodiments, steps may be performed in several different orders, or some steps may be performed in parallel.

[0138] The process begins at step 1155, where the network device receives a data packet transmitted by a graphics processing unit (GPU) of a host machine. At step 1160, the network device determines flow information for the received packet. In some implementations, the flow information may correspond to a 4-tuple (i.e., source port, destination port, source IP address, destination IP address) associated with the packet. At step 1165, the network device calculates an outgoing port-link by implementing a modified version of ECMP routing. The modified ECMP algorithm hashes any packet received on a particular incoming port-link to always be sent on the same outgoing port-link.

[0139] The process then moves to step 1170, where a query is performed to determine whether the outgoing port-link (determined in step 1165) is functional, e.g., whether the outgoing link is active. If the query is answered affirmatively (i.e., the link is active), the process moves to step 1175, and if the query is answered negatively (i.e., the link is faulty / inactive), the process moves to step 1180. In step 1175, the network device utilizes the outgoing port-link (determined in step 1165) to forward the received data packet to another network device. If the identified outgoing port-link (of step 1165) is determined to be inactive, the process moves to step 1180. In step 1180, the network device implements ECMP routing (i.e., standard ECMP routing) to identify a new outgoing port-link. The process then moves to step 1185, where the network device forwards the data packet received in step 1155 using the newly calculated outgoing port-link.

[0140] It is noted that the above-described technique for routing data packets originating from the GPU of the host machine results in a 20% increase in throughput for small clusters and 70% for large clusters (i.e., a 3x improvement over the standard ECMP routing algorithm).

[0141] Cloud Infrastructure Implementation Example As mentioned above, infrastructure as a service (IaaS) is one particular type of cloud computing. IaaS can be configured to provide virtualized computing resources over a public network (e.g., the Internet). In an IaaS model, a cloud computing provider can host infrastructure components (e.g., servers, storage devices, network nodes (e.g., hardware), deployment software, platform virtualization (e.g., hypervisor layer), etc.). In some cases, an IaaS provider can also provide various services (e.g., billing, monitoring, logging, security, load balancing, clustering, etc.) that accompany the infrastructure components. Thus, because these services can be policy-driven, an IaaS user may be able to implement policies that drive load balancing to maintain application availability and performance.

[0142] In some cases, IaaS customers can access resources and services over a wide area network (WAN), such as the Internet, and can use the cloud provider's services to install the remaining elements of their application stack. For example, a user can log into an IaaS platform, create virtual machines (VMs), install an operating system (OS) on each VM, deploy middleware such as databases, create storage buckets for workloads and backups, and even install enterprise software on the VMs. The customer can then use the provider's services to perform a variety of functions, including balancing network traffic, troubleshooting applications, monitoring performance, managing disaster recovery, and more.

[0143] In most cases, the cloud computing model requires the participation of a cloud provider, which may, but does not have to, be a third-party service that specializes in providing (e.g., offering, renting, selling) IaaS. An entity may decide to deploy a private cloud and become its own provider of infrastructure services.

[0144] In some examples, an IaaS deployment is the process of placing a new application, or a new version of an application, onto a prepared application server, etc. An IaaS deployment may include the process of preparing the server (e.g., installing libraries, daemons, etc.). An IaaS deployment is often managed below the hypervisor layer (e.g., server, storage, network hardware, and virtualization) by the cloud provider. Thus, the customer may be responsible for handling things like (OS), middleware, and / or application deployment (e.g., on self-service virtual machines (e.g., that can be spun up on demand)).

[0145] In some instances, IaaS provisioning may refer to obtaining the computer or virtual host to be used and also installing the necessary libraries or services on the computer or virtual host. In most cases, deployment does not include provisioning, which must be performed first.

[0146] In some cases, there are two different challenges in IaaS provisioning. First, there is the initial challenge of provisioning an initial set of infrastructure before anything is running. Second, there is the challenge of evolving the existing infrastructure (e.g., adding new services, modifying services, removing services, etc.) after everything has been provisioned. In some cases, these two challenges can be addressed by allowing the configuration of the infrastructure to be defined declaratively. In other words, the infrastructure (e.g., which components are required and how these components interact) can be defined by one or more configuration files. Thus, the overall topology of the infrastructure (e.g., which resources depend on which and how they each work together) can be described declaratively. In some cases, once the topology is defined, workflows can be generated to create and / or manage the different components described in the configuration files.

[0147] In some examples, the infrastructure can have many interconnected elements. For example, there may be one or more virtual private clouds (VPCs) (e.g., potential on-demand pools of configurable and / or shared computing resources), also known as a core network. In some examples, there may also be one or more security group rules provisioned to define how the security of the network is set up, and one or more virtual machines (VMs). Other infrastructure elements such as load balancers, databases, etc. may also be provisioned. The infrastructure can evolve incrementally as more infrastructure elements are desired and / or added.

[0148] In some instances, continuous deployment techniques may be employed to enable deployment of infrastructure code across various virtual computing environments. Additionally, the described techniques may enable infrastructure management within these environments. In some instances, a service team may write code that is desired to be deployed to one or more, but often many, different production environments (e.g., across a variety of different geographic locations, which may span the entire world). However, in some instances, the infrastructure onto which the code will be deployed must first be set up. In some instances, provisioning may be done manually, a provisioning tool may be utilized to provision resources, and / or a deployment tool may be utilized to deploy the code after the infrastructure is provisioned.

[0149] 12 is a block diagram 1200 illustrating an example IaaS architecture pattern, according to at least one embodiment. A service operator 1202 may be communicatively coupled to a secure host tenancy 1204, which may include a virtual cloud network (VCN) 1206 and a secure host subnet 1208. In some examples, the service operator 1202 may use one or more client computing devices, which may be portable handheld devices (e.g., iPhone®, mobile phone, iPad®, computing tablet, personal digital assistant (PDA)), or wearable devices (e.g., Google Glass® head-mounted display) running software such as Microsoft Windows Mobile® and / or various mobile operating systems such as iOS, Windows Phone, Android, BlackBerry8, PalmOS, and capable of Internet, email, short message service (SMS), Blackberry®, or other communications protocols. Alternatively, the client computing devices may be general purpose personal computers, including, by way of example, personal and / or laptop computers running various versions of the Microsoft Windows operating systems, the Apple Macintosh operating systems, and / or the Linux operating systems. The client computing devices may be workstation computers running various commercially available UNIX or UNIX-like operating systems, including, without limitation, various GNU / Linux operating systems, such as Google Chrome OS.Alternatively or in addition, the client computing devices may be any other electronic device, such as a thin-client computer, an Internet-enabled gaming system (e.g., a Microsoft Xbox gaming console with or without a Kinect® gesture input device), and / or a personal messaging device, that can communicate over a network that has access to the VCN 1206 and / or the Internet.

[0150] VCN 1206 may include a local peering gateway (LPG) 1210, which may be communicatively coupled to a secure shell (SSH) VCN 1212 via the LPG 1210 included in the SSH VCN 1212. The SSH VCN 1212 may include an SSH subnet 1214, which may be communicatively coupled to a control plane VCN 1216 via the LPG 1210 included in the control plane VCN 1216. The SSH VCN 1212 may also be communicatively coupled to a data plane VCN 1218 via the LPG 1210. The control plane VCN 1216 and the data plane VCN 1218 may be included in a service tenancy 1219, which may be owned and / or operated by the IaaS provider.

[0151] The control plane VCN 1216 may include a control plane demilitarized zone (DMZ) tier 1220 that acts as a perimeter network (e.g., a portion of an enterprise network between the enterprise intranet and an external network). DMZ-based servers may have limited reliability and help mitigate security breaches. Additionally, the DMZ tier 1220 may include one or more load balancer (LB) subnets 1222, a control plane app tier 1224 that may include an app subnet 1226, and a control plane data tier 1228 that may include a database (DB) subnet 1230 (e.g., a front-end DB subnet and / or a back-end DB subnet). The LB subnet 1222 included in the control plane DMZ tier 1220 can be communicatively coupled to an app subnet 1226 included in the control plane app tier 1224 and an Internet gateway 1234 that can be included in the control plane VCN 1216, and the app subnet 1226 can be communicatively coupled to a DB subnet 1230, a service gateway 1236, and a network address translation (NAT) gateway 1238 included in the control plane data tier 1228. The control plane VCN 1216 can include the service gateway 1236 and the NAT gateway 1238.

[0152] The control plane VCN 1216 can include a data plane mirrored app layer 1240, which can include an app subnet 1226. The app subnet 1226 included in the data plane mirrored app layer 1240 can include a virtual network interface controller (VNIC) 1242 on which a compute instance 1244 can run. The compute instance 1244 can communicatively couple the app subnet 1226 of the data plane mirrored app layer 1240 to the app subnet 1226, which can be included in the data plane app layer 1246.

[0153] The data plane VCN 1218 can include a data plane app layer 1246, a data plane DMZ layer 1248, and a data plane data layer 1250. The data plane DMZ layer 1248 can include a LB subnet 1222 that can be communicatively coupled to an app subnet 1226 of the data plane app layer 1246 and an Internet gateway 1234 of the data plane VCN 1218. The app subnet 1226 can be communicatively coupled to a service gateway 1236 of the data plane VCN 1218 and a NAT gateway 1238 of the data plane VCN 1218. The data plane data layer 1250 can also include a DB subnet 1230 that can be communicatively coupled to the app subnet 1226 of the data plane app layer 1246.

[0154] The Internet gateway 1234 of the control plane VCN 1216 and the Internet gateway 1234 of the data plane VCN 1218 can be communicatively coupled to a metadata management service 1252, which can be communicatively coupled to the public Internet 1254. The public Internet 1254 can be communicatively coupled to a NAT gateway 1238 of the control plane VCN 1216 and the NAT gateway 1238 of the data plane VCN 1218. The service gateway 1236 of the control plane VCN 1216 and the service gateway 1236 of the data plane VCN 1218 can be communicatively coupled to cloud services 1256.

[0155] In some examples, a service gateway 1236 of the control plane VCN 1216 or the data plane VCN 1218 can make application programming interface (API) calls to cloud services 1256 without going through the public Internet 1254. API calls from the service gateway 1236 to the cloud services 1256 can be one-way. That is, the service gateway 1236 can make an API call to the cloud services 1256, and the cloud services 1256 can send the requested data to the service gateway 1236. However, the cloud services 1256 cannot initiate an API call to the service gateway 1236.

[0156] In some examples, secure host tenancy 1204 can be directly connected to service tenancy 1219, which may otherwise be isolated. Secure host subnet 1208 can communicate with SSH subnet 1214 through LPG 1210, which may allow bidirectional communication in an isolated system. By connecting secure host subnet 1208 to SSH subnet 1214, secure host subnet 1208 can access other entities in service tenancy 1219.

[0157] The control plane VCN 1216 can enable users of the service tenancy 1219 to set up or otherwise provision desired resources. The desired resources provisioned in the control plane VCN 1216 can be deployed or otherwise used in the data plane VCN 1218. In some examples, the control plane VCN 1216 can be isolated from the data plane VCN 1218, and the data plane mirror app layer 1240 of the control plane VCN 1216 can communicate with the data plane app layer 1246 of the data plane VCN 1218 via a VNIC 1242, which can be included in the data plane mirror app layer 1240 and the data plane app layer 1246.

[0158] In some examples, a user or customer of the system may make a request, such as, for example, a create, read, update, or delete (CRUD) operation, via the public internet 1254, which may communicate such a request to the metadata management service 1252. The metadata management service 1252 may communicate the request to the control plane VCN 1216 via the internet gateway 1234. The request may be received by the LB subnet 1222 included in the control plane DMZ layer 1220. The LB subnet 1222 may determine that the request is valid, and in response to this determination, the LB subnet 1222 may send the request to the app subnet 1226 included in the control plane app layer 1224. If the request is validated and requires a call to the public internet 1254, the call to the public internet 1254 may be sent to the NAT gateway 1238, which may make the call to the public internet 1254. Memory that may be desired to be stored by the request may be stored in the DB subnet 1230.

[0159] In some examples, the data plane mirror app layer 1240 can facilitate direct communication between the control plane VCN 1216 and the data plane VCN 1218. For example, it may be desired that a change, update, or other suitable modification to the configuration be applied to the resources included in the data plane VCN 1218. The control plane VCN 1216 can communicate directly with the resources included in the data plane VCN 1218 via the VNIC 1242, thereby performing the change, update, or other suitable modification to the configuration on the resources.

[0160] In some embodiments, the control plane VCN 1216 and the data plane VCN 1218 can be included in the service tenancy 1219. In this case, a user or customer of the system may not own and operate either the control plane VCN 1216 or the data plane VCN 1218. Instead, an IaaS provider may own or operate the control plane VCN 1216 and the data plane VCN 1218, both of which may be included in the service tenancy 1219. This embodiment may enable network isolation, which may prevent users or customers from interacting with other users' or other customers' resources. This embodiment may also enable users or customers of the system to store databases privately without having to rely on the public Internet 1254, which may not have the desired level of security for storage.

[0161] In another embodiment, the LB subnet 1222 included in the control plane VCN 1216 can be configured to receive signals from the service gateway 1236. In this embodiment, the control plane VCN 1216 and the data plane VCN 1218 can be configured to be called by the IaaS provider's customers without calling the public Internet 1254. The IaaS provider's customers may desire this embodiment because databases used by the customers can be stored in the service tenancy 1219, which can be controlled by the IaaS provider and isolated from the public Internet 1254.

[0162] 13 is a block diagram 1300 illustrating another example pattern of an IaaS architecture, according to at least one embodiment. A service operator 1302 (e.g., service operator 1202 of FIG. 12) can be communicatively coupled to a secure host tenancy 1304 (e.g., secure host tenancy 1204 of FIG. 12), which can include a virtual cloud network (VCN) 1306 (e.g., VCN 1206 of FIG. 12) and a secure host subnet 1308 (e.g., secure host subnet 1208 of FIG. 12). The VCN 1306 can include a local peering gateway (LPG) 1310 (e.g., LPG 1210 of FIG. 12), which can be communicatively coupled to a secure shell (SSH) VCN 1312 (e.g., SSH VCN 1212 of FIG. 12) via the LPG 1310 included in the SSH VCN 1312. SSH VCN 1312 can include an SSH subnet 1314 (e.g., SSH subnet 1214 in FIG. 12), which can be communicatively coupled to a control plane VCN 1316 (e.g., control plane VCN 1216 in FIG. 12) via an LPG 1310 included in the control plane VCN 1316. The control plane VCN 1316 can be included in a service tenancy 1319 (e.g., service tenancy 1219 in FIG. 12), and the data plane VCN 1318 (e.g., data plane VCN 1218 in FIG. 12) can be included in a customer tenancy 1321, which may be owned or operated by a user or customer of the system.

[0163] The control plane VCN 1316 may include a control plane DMZ tier 1320 (e.g., control plane DMZ tier 1220 of FIG. 12) that may include a LB subnet 1322 (e.g., LB subnet 1222 of FIG. 12), a control plane app tier 1324 (e.g., control plane app tier 1224 of FIG. 12) that may include an app subnet 1326 (e.g., app subnet 1226 of FIG. 12), and a control plane data tier 1328 (e.g., control plane data tier 1228 of FIG. 12) that may include a database (DB) subnet 1330 (e.g., similar to DB subnet 1230 of FIG. 12). The LB subnet 1322 included in the control plane DMZ tier 1320 can be communicatively coupled to an app subnet 1326 included in the control plane app tier 1324 and to an Internet gateway 1334 (e.g., Internet gateway 1234 in FIG. 12 ) that can be included in the control plane VCN 1316, and the app subnet 1326 can be communicatively coupled to a DB subnet 1330 included in the control plane data tier 1328 and to a service gateway 1336 (e.g., service gateway in FIG. 12 ) and a network address translation (NAT) gateway 1338 (e.g., NAT gateway 1238 in FIG. 12 ). The control plane VCN 1316 can include the service gateway 1336 and the NAT gateway 1338.

[0164] The control plane VCN 1316 can include a data plane mirror app layer 1340 (e.g., data plane mirror app layer 1240 of FIG. 12 ), which can include an app subnet 1326. The app subnet 1326 included in the data plane mirror app layer 1340 can include a virtual network interface controller (VNIC) 1342 (e.g., VNIC 1242) on which a compute instance 1344 (e.g., similar to compute instance 1244 of FIG. 12 ) can run. The compute instance 1344 can facilitate communication between the app subnet 1326 of the data plane mirror app layer 1340 and the app subnet 1326, which can be included in the data plane app layer 1346 (e.g., data plane app layer 1246 of FIG. 12 ), via the VNIC 1342 included in the data plane mirror app layer 1340 and the VNIC 1342 included in the data plane app layer 1346.

[0165] An Internet gateway 1334 included in the control plane VCN 1316 can be communicatively coupled to a metadata management service 1352 (e.g., metadata management service 1252 of FIG. 12), which can be communicatively coupled to a public Internet 1354 (e.g., public Internet 1254 of FIG. 12). The public Internet 1354 can be communicatively coupled to a NAT gateway 1338 included in the control plane VCN 1316. A service gateway 1336 included in the control plane VCN 1316 can be communicatively coupled to cloud services 1356 (e.g., cloud services 1256 of FIG. 12).

[0166] In some examples, the data plane VCN 1318 can be included in the customer tenancy 1321. In this case, the IaaS provider can provide a control plane VCN 1316 for each customer, and the IaaS provider can set up a unique compute instance 1344 for each customer, which is included in the service tenancy 1319. Each compute instance 1344 can enable communication between the control plane VCN 1316 included in the service tenancy 1319 and the data plane VCN 1318 included in the customer tenancy 1321. The compute instance 1344 can enable resources provisioned in the control plane VCN 1316 included in the service tenancy 1319 to be deployed or otherwise used in the data plane VCN 1318 included in the customer tenancy 1321.

[0167] In another example, an IaaS provider customer may have a database that resides in customer tenancy 1321. In this example, control plane VCN 1316 may include data plane mirror app tier 1340, which may include app subnet 1326. Data plane mirror app tier 1340 may reside in data plane VCN 1318, but may not reside in data plane VCN 1318. That is, data plane mirror app tier 1340 may have access to customer tenancy 1321, but may not reside in data plane VCN 1318, and may not be owned and operated by the IaaS provider customer. Data plane mirror app tier 1340 may be configured to make calls to data plane VCN 1318, but may not be configured to make calls to any entities included in control plane VCN 1316. A customer may desire to deploy or otherwise use resources in the data plane VCN 1318 that have been provisioned in the control plane VCN 1316, and the data plane mirror app layer 1340 can facilitate the desired deployment or other use of the customer's resources.

[0168] In some embodiments, the IaaS provider's customer can apply filters to the data plane VCN 1318. In this embodiment, the customer can determine what the data plane VCN 1318 can access, and the customer can limit access from the data plane VCN 1318 to the public internet 1354. The IaaS provider may not be able to apply filters or control access from the data plane VCN 1318 to any external networks or databases. Applying filters and controls to the data plane VCN 1318 that the customer includes in the customer tenancy 1321 can help isolate the data plane VCN 1318 from other customers and the public internet 1354.

[0169] In some embodiments, the service gateway 1336 may call cloud services 1356 to access services that may not be on the public internet 1354, on the control plane VCN 1316, or on the data plane VCN 1318. The connection between the cloud services 1356 and the control plane VCN 1316 or the data plane VCN 1318 may not be live or continuous. The cloud services 1356 may be on a separate network owned or operated by the IaaS provider. The cloud services 1356 may be configured to receive calls from the service gateway 1336 and may not be configured to receive calls from the public internet 1354. Some cloud services 1356 may be isolated from other cloud services 1356, and the control plane VCN 1316 may be isolated from cloud services 1356 that may not be in the same region as the control plane VCN 1316. For example, the control plane VCN 1316 may be located in “Region 1” and the cloud service “Deployment 12” may be located in “Region 1” and “Region 2”. If a call to a deployment 12 is made by a service gateway 1336 included in a control plane VCN 1316 located in region 1, the call may be sent to the deployment 12 in region 1. In this example, the control plane VCN 1316 or the deployment 12 in region 1 may not be communicatively coupled or otherwise in communication with the deployment 12 in region 2.

[0170] 14 is a block diagram 1400 illustrating another example pattern of an IaaS architecture, according to at least one embodiment. A service operator 1402 (e.g., service operator 1202 of FIG. 12) can be communicatively coupled to a secure host tenancy 1404 (e.g., secure host tenancy 1204 of FIG. 12), which can include a virtual cloud network (VCN) 1406 (e.g., VCN 1206 of FIG. 12) and a secure host subnet 1408 (e.g., secure host subnet 1208 of FIG. 12). The VCN 1406 can include an LPG 1410 (e.g., LPG 1210 of FIG. 12), which can be communicatively coupled to an SSH VCN 1412 (e.g., SSH VCN 1212 of FIG. 12) via an LPG 1410 included in the SSH VCN 1412. SSH VCN 1412 can include an SSH subnet 1414 (e.g., SSH subnet 1214 in FIG. 12), which can be communicatively coupled to a control plane VCN 1416 (e.g., control plane VCN 1216 in FIG. 12) via an LPG 1410 included in the control plane VCN 1416, and to a data plane VCN 1418 (e.g., data plane 1218 in FIG. 12) via an LPG 1410 included in the data plane VCN 1418. The control plane VCN 1416 and the data plane VCN 1418 can be included in a service tenancy 1419 (e.g., service tenancy 1219 in FIG. 12).

[0171] The control plane VCN 1416 may include a control plane DMZ tier 1420 (e.g., control plane DMZ tier 1220 of FIG. 12) that may include a load balancer (LB) subnet 1422 (e.g., LB subnet 1222 of FIG. 12), a control plane app tier 1424 (e.g., control plane app tier 1224 of FIG. 12) that may include an app subnet 1426 (e.g., similar to app subnet 1226 of FIG. 12), and a control plane data tier 1428 (e.g., control plane data tier 1228 of FIG. 12) that may include a DB subnet 1430. The LB subnet 1422 included in the control plane DMZ layer 1420 can be communicatively coupled to an app subnet 1426 included in the control plane app layer 1424 and an Internet gateway 1434 (e.g., Internet gateway 1234 of FIG. 12) that can be included in the control plane VCN 1416, and the app subnet 1426 can be communicatively coupled to a DB subnet 1430 included in the control plane data layer 1428 and a service gateway 1436 (e.g., service gateway of FIG. 12) and a network address translation (NAT) gateway 1438 (e.g., NAT gateway 1238 of FIG. 12). The control plane VCN 1416 can include the service gateway 1436 and the NAT gateway 1438.

[0172] The data plane VCN 1418 may include a data plane app layer 1446 (e.g., data plane app layer 1246 of FIG. 12), a data plane DMZ layer 1448 (e.g., data plane DMZ layer 1248 of FIG. 12), and a data plane data layer 1450 (e.g., data plane data layer 1250 of FIG. 12). The data plane DMZ layer 1448 may include a LB subnetwork 1422 that may be communicatively coupled to a trusted app subnetwork 1460 and an untrusted app subnetwork 1462 of the data plane app layer 1446 included in the data plane VCN 1418, as well as an Internet gateway 1434. The trusted app subnetwork 1460 may be communicatively coupled to a service gateway 1436 included in the data plane VCN 1418, a NAT gateway 1438 included in the data plane VCN 1418, and a DB subnetwork 1430 included in the data plane data layer 1450. The untrusted app subnet 1462 can be communicatively coupled to a service gateway 1436 included in the data plane VCN 1418 and a DB subnet 1430 included in the data plane data layer 1450. The data plane data layer 1450 can include a DB subnet 1430 that can be communicatively coupled to a service gateway 1436 included in the data plane VCN 1418.

[0173] The untrusted app subnet 1462 may include one or more primary VNICs 1464(1)-(N), which may be communicatively coupled to tenant virtual machines (VMs) 1466(1)-(N). Each tenant VM 1466(1)-(N) may be communicatively coupled to a respective app subnet 1467(1)-(N), which may be included in a respective container egress VCN 1468(1)-(N), which may be included in a respective customer tenancy 1470(1)-(N). Each secondary VNIC 1472(1)-(N) may facilitate communication between the untrusted app subnet 1462 included in the data plane VCN 1418 and the app subnet included in the container egress VCN 1468(1)-(N). Each container egress VCN 1468(1)-(N) may include a NAT gateway 1438, which may be communicatively coupled to the public internet 1454 (e.g., public internet 1254 in FIG. 12).

[0174] The Internet gateway 1434 included in the control plane VCN 1416 and the Internet gateway 1434 included in the data plane VCN 1418 can be communicatively coupled to a metadata management service 1452 (e.g., metadata management system 1252 of FIG. 12 ), which can be communicatively coupled to the public Internet 1454. The public Internet 1454 can be communicatively coupled to a NAT gateway 1438 included in the control plane VCN 1416 and the NAT gateway 1438 included in the data plane VCN 1418. The service gateway 1436 included in the control plane VCN 1416 and the service gateway 1436 included in the data plane VCN 1418 can be communicatively coupled to cloud services 1456.

[0175] In some embodiments, data plane VCN 1418 can be integrated with customer tenancies 1470. This integration can be useful or desirable for an IaaS provider's customers in some cases, such as when they may want support when running code. A customer may provide code to be run that may be disruptive, may communicate with other customer resources, or may cause undesirable effects. In response, the IaaS provider can decide whether or not to run the code that the customer has provided to the IaaS provider.

[0176] In some examples, an IaaS provider's customer may grant temporary network access to the IaaS provider and request a function to be attached to data plane layer app 1446. The code that executes the function may run in VM 1466(1)-(N) and may not be configured to run anywhere else on data plane VCN 1418. Each VM 1466(1)-(N) may be connected to one customer tenancy 1470. Each container 1471(1)-(N) contained in VM 1466(1)-(N) may be configured to execute code. In this case, there may be double isolation (e.g., container 1471(1)-(N) executes code, and container 1471(1)-(N) may be contained in at least VM 1466(1)-(N) contained in untrusted app subnet 1462). This may help prevent erroneous or otherwise undesirable code from causing damage to the IaaS provider's network or from causing damage to a different customer's network. Containers 1471(1)-(N) can be communicatively coupled to customer tenancy 1470 and can be configured to send or receive data from customer tenancy 1470. Containers 1471(1)-(N) may not be configured to send or receive data from any other entity in data plane VCN 1418. When code execution is complete, the IaaS provider can kill or otherwise discard containers 1471(1)-(N).

[0177] In some embodiments, trusted app subnet 1460 can execute code that may be owned or operated by the IaaS provider. In this embodiment, trusted app subnet 1460 can be communicatively coupled to DB subnet 1430 and configured to perform CRUD operations in DB subnet 1430. Untrusted app subnet 1462 can be communicatively coupled to DB subnet 1430, but in this embodiment, untrusted app subnet 1462 can be configured to perform read operations in DB subnet 1430. Containers 1471(1)-(N) that may be included in each customer's VMs 1466(1)-(N) and that may execute code from the customer may not be communicatively coupled to DB subnet 1430.

[0178] In other embodiments, the control plane VCN 1416 and the data plane VCN 1418 may not be directly communicatively coupled. In this embodiment, there may be no direct communication between the control plane VCN 1416 and the data plane VCN 1418. However, communication may occur indirectly in at least one manner. An IaaS provider may establish an LPG 1410 that can facilitate communication between the control plane VCN 1416 and the data plane VCN 1418. In another example, the control plane VCN 1416 or the data plane VCN 1418 can make a call to a cloud service 1456 through a service gateway 1436. For example, a call from the control plane VCN 1416 to the cloud service 1456 can include a request for a service that can communicate with the data plane VCN 1418.

[0179] FIG. 15 is a block diagram 1500 illustrating another example pattern of an IaaS architecture, according to at least one embodiment. A service operator 1502 (e.g., service operator 1202 of FIG. 12) can be communicatively coupled to a secure host tenancy 1504 (e.g., secure host tenancy 1204 of FIG. 12), which can include a virtual cloud network (VCN) 1506 (e.g., VCN 1206 of FIG. 12) and a secure host subnet 1508 (e.g., secure host subnet 1208 of FIG. 12). The VCN 1506 can include an LPG 1510 (e.g., LPG 1210 of FIG. 12), which can be communicatively coupled to an SSH VCN 1512 (e.g., SSH VCN 1212 of FIG. 12) via the LPG 1510 included in the SSH VCN 1512. SSH VCN 1512 can include an SSH subnet 1514 (e.g., SSH subnet 1214 in FIG. 12), which can be communicatively coupled to a control plane VCN 1516 (e.g., control plane VCN 1216 in FIG. 12) via an LPG 1510 included in the control plane VCN 1516, and to a data plane VCN 1518 (e.g., data plane 1218 in FIG. 12) via an LPG 1510 included in the data plane VCN 1518. The control plane VCN 1516 and the data plane VCN 1518 can be included in a service tenancy 1519 (e.g., service tenancy 1219 in FIG. 12).

[0180] The control plane VCN 1516 may include a control plane DMZ tier 1520 (e.g., control plane DMZ tier 1220 of FIG. 12) that may include a LB subnet 1522 (e.g., LB subnet 1222 of FIG. 12), a control plane app tier 1524 (e.g., control plane app tier 1224 of FIG. 12) that may include an app subnet 1526 (e.g., app subnet 1226 of FIG. 12), and a control plane data tier 1528 (e.g., control plane data tier 1228 of FIG. 12) that may include a DB subnet 1530 (e.g., DB subnet 1430 of FIG. 14). The LB subnet 1522 included in the control plane DMZ tier 1520 can be communicatively coupled to an app subnet 1526 included in the control plane app tier 1524 and to an Internet gateway 1534 (e.g., Internet gateway 1234 of FIG. 12) that can be included in the control plane VCN 1516, and the app subnet 1526 can be communicatively coupled to a DB subnet 1530 included in the control plane data tier 1528 and to a service gateway 1536 (e.g., service gateway of FIG. 12) and a network address translation (NAT) gateway 1538 (e.g., NAT gateway 1238 of FIG. 12). The control plane VCN 1516 can include the service gateway 1536 and the NAT gateway 1538.

[0181] The data plane VCN 1518 may include a data plane app layer 1546 (e.g., data plane app layer 1246 of FIG. 12), a data plane DMZ layer 1548 (e.g., data plane DMZ layer 1248 of FIG. 12), and a data plane data layer 1550 (e.g., data plane data layer 1250 of FIG. 12). The data plane DMZ layer 1548 may include a LB subnetwork 1522, which may be communicatively coupled to a trusted app subnetwork 1560 (e.g., trusted app subnetwork 1460 of FIG. 14) and an untrusted app subnetwork 1562 (e.g., untrusted app subnetwork 1462 of FIG. 14) of the data plane app layer 1546 included in the data plane VCN 1518, as well as an Internet gateway 1534. The trusted app subnet 1560 may be communicatively coupled to a service gateway 1536 included in the data plane VCN 1518, a NAT gateway 1538 included in the data plane VCN 1518, and a DB subnet 1530 included in the data plane data layer 1550. The untrusted app subnet 1562 may be communicatively coupled to a service gateway 1536 included in the data plane VCN 1518, and a DB subnet 1530 included in the data plane data layer 1550. The data plane data layer 1550 may include a DB subnet 1530 that may be communicatively coupled to a service gateway 1536 included in the data plane VCN 1518.

[0182] The untrusted app subnet 1562 may include primary VNICs 1564(1)-(N), which may be communicatively coupled to tenant virtual machines (VMs) 1566(1)-(N) residing within the untrusted app subnet 1562. Each tenant VM 1566(1)-(N) may execute code in a respective container 1567(1)-(N), which may be communicatively coupled to an app subnet 1526, which may be included in a data plane app tier 1546, which may be included in a container egress VCN 1568. Each secondary VNIC 1572(1)-(N) may facilitate communication between the untrusted app subnet 1562, which may be included in the data plane VCN 1518, and the app subnet, which may be included in the container egress VCN 1568. The container egress VCN may include a NAT gateway 1538, which may be communicatively coupled to the public internet 1554 (e.g., public internet 1254 of FIG. 12).

[0183] The Internet gateway 1534 included in the control plane VCN 1516 and the Internet gateway 1534 included in the data plane VCN 1518 can be communicatively coupled to a metadata management service 1552 (e.g., metadata management system 1252 of FIG. 12 ), which can be communicatively coupled to the public Internet 1554. The public Internet 1554 can be communicatively coupled to a NAT gateway 1538 included in the control plane VCN 1516 and the NAT gateway 1538 included in the data plane VCN 1518. The service gateway 1536 included in the control plane VCN 1516 and the service gateway 1536 included in the data plane VCN 1518 can be communicatively coupled to cloud services 1556.

[0184] In some examples, the pattern illustrated by the architecture of block diagram 1500 of FIG. 15 may be considered an exception to the pattern illustrated by the architecture of block diagram 1400 of FIG. 14 and may be desirable for customers of an IaaS provider when the IaaS provider cannot communicate directly with the customer (e.g., in a non-connected region). The customers can access the respective containers 1567(1)-(N) contained in each customer's VMs 1566(1)-(N) in real time. The containers 1567(1)-(N) can be configured to call the respective secondary VNICs 1572(1)-(N) contained in the app subnet 1526 of the data plane app tier 1546 that can be contained in the container egress VCN 1568. The secondary VNICs 1572(1)-(N) can send the call to the NAT gateway 1538 that can send the call to the public Internet 1554. In this example, containers 1567(1)-(N) that a customer can access in real time can be isolated from control plane VCN 1516 and can be isolated from other entities included in data plane VCN 1518. Containers 1567(1)-(N) can also be isolated from resources of other customers.

[0185] In another example, a customer can use containers 1567(1)-(N) to invoke cloud service 1556. In this example, the customer can execute code in containers 1567(1)-(N) that requests a service from cloud service 1556. Containers 1567(1)-(N) can send the request to secondary VNICs 1572(1)-(N), which can send the request to a NAT gateway that can send the request to public Internet 1554. Public Internet 1554 can send the request to LB subnet 1522 included in control plane VCN 1516 via Internet gateway 1534. In response to determining that the request is valid, LB subnet can send the request to app subnet 1526, which can send the request to cloud service 1556 via service gateway 1536.

[0186] It should be understood that the IaaS architectures 1200, 1300, 1400, 1500 shown in the figures may include components other than those shown. Additionally, the illustrated embodiments are only some examples of cloud infrastructure systems that may incorporate embodiments of the present disclosure. In other embodiments, the IaaS systems may have more or fewer components than those shown in the figures, may combine two or more components, or may have a different configuration or arrangement of components.

[0187] In some embodiments, the IaaS system described herein may include a suite of application, middleware, and database service offerings that are self-service, subscription-based, elastically scalable, reliable, highly available, and securely delivered to customers. One example of such an IaaS system is Oracle Cloud Infrastructure (OCI), offered by the present assignee.

[0188] 16 illustrates an example computer system 1600 in which various embodiments may be implemented. System 1600 may be used to implement any of the computer systems described above. As shown, computer system 1600 includes a processing unit 1604 that communicates with a number of peripheral subsystems via a bus subsystem 1602. These peripheral subsystems may include a processing accelerator 1606, an I / O subsystem 1608, a storage subsystem 1618, and a communication subsystem 1624. The storage subsystem 1618 includes a tangible computer readable storage medium 1622 and a system memory 1610.

[0189] Bus subsystem 1602 provides a mechanism for allowing the various components and subsystems of computer system 1600 to communicate with each other as intended. Although bus subsystem 1602 is shown diagrammatically as a single bus, alternative embodiments of the bus subsystem may utilize multiple buses. Bus subsystem 1602 can be any of several types of bus structures including a memory bus or memory controller, a peripheral bus, and a local bus using any of a variety of bus architectures. For example, such architectures can include a Peripheral Component Interconnect (PCI) bus, which can be implemented as an Industry Standard Architecture (ISA) bus, a MicroChannel Architecture (MCA) bus, an Enhanced ISA (EISA) bus, a Video Electronics Standards Association (VESA) local bus, and a mezzanine bus manufactured in accordance with the IEEE P1386.1 standard.

[0190] The processing unit 1604 may be implemented as one or more integrated circuits (e.g., a conventional microprocessor or microcontroller) and controls the operation of the computer system 1600. The processing unit 1604 may include one or more processors. These processors may include single-core or multi-core processors. In some embodiments, the processing unit 1604 may be implemented as one or more independent processing units 1632 and / or 1634 with single-core or multi-core processors included in each processing unit. In other embodiments, the processing unit 1604 may be implemented as a quad-core processing unit formed by integrating two dual-core processors into a single chip.

[0191] In various embodiments, the processing unit 1604 may execute various programs in response to program code and may maintain multiple programs or processes executing simultaneously. At any given time, some or all of the program code to be executed may reside in the processor 1604 and / or in the storage subsystem 1618. The processor 1604 may provide various functionality as discussed above through suitable programming. The computer system 1600 may further include a processing accelerator 1606, which may include a digital signal processor (DSP), a special purpose processor, or the like.

[0192] The I / O subsystem 1608 can include user interface input devices and user interface output devices. User interface input devices can include pointing devices such as keyboards, mice or trackballs, touchpads or touchscreens integrated into displays, scroll wheels, click wheels, dials, buttons, switches, keypads, voice input devices with voice command recognition systems, microphones, and other types of input devices. User interface input devices can include motion sensing and / or gesture recognition devices, such as, for example, a Microsoft Kinect® motion sensor, which allows a user to control and interact with input devices, such as a Microsoft Xbox® 360 game controller, through a natural user interface (NUI) using gestures and voice commands. User interface input devices can also include eye gesture recognition devices, such as a Google Glass® blink detector, which detects eye activity from a user (e.g., "blinks" when taking a picture and / or selecting a menu) and translates the eye activity into input to the input device (e.g., Google Glass®). Additionally, the user interface input devices may include a voice recognition sensing device that allows a user to interact with a voice recognition system (eg, the Siri® navigator) via voice commands.

[0193] User interface input devices may also include, without limitation, three-dimensional (3D) mice, joysticks or pointing sticks, game pads and graphic tablets, as well as audio / visual devices such as speakers, digital cameras, digital video cameras, portable media players, webcams, image scanners, fingerprint scanners, barcode readers, 3D scanners, 3D printers, laser range finders, and eye-tracking devices. Additionally, user interface input devices may include medical imaging input devices such as, for example, computed tomography, magnetic resonance imaging, positron emission tomography, and medical ultrasound. User interface input devices may also include audio input devices such as, for example, MIDI keyboards and electronic musical instruments.

[0194] User interface output devices may include non-visual displays such as a display subsystem, indicator lights, or audio output devices. The display subsystem may be a flat panel device such as one using a cathode ray tube (CRT), a liquid crystal display (LCD) or a plasma display, a projection device, a touch screen, etc. In general, when the term "output device" is used, it is intended to include all possible types of devices and mechanisms for outputting information from computer system 1600 to a user or to another computer. For example, user interface output devices may include a variety of display devices that visually convey text, graphics, and audio / video information, such as, without limitation, monitors, printers, speakers, headphones, car navigation systems, plotters, voice output devices, and modems.

[0195] Computer system 1600 can include a storage subsystem 1618, which can include software components shown here as residing in system memory 1610. System memory 1610 can store program instructions loadable and executable on processing unit 1604, and data generated by the execution of these programs.

[0196] Depending on the configuration and type of computer system 1600, the system memory 1610 may be volatile memory (such as random access memory (RAM)) and / or non-volatile memory (such as read-only memory (ROM), flash memory, etc.). RAM typically contains data and / or program modules that are immediately accessible to and / or currently being operated on and executed by the processing unit 1604. In some implementations, the system memory 1610 may include a number of different types of memory, such as static random access memory (SRAM) or dynamic random access memory (DRAM). In some implementations, ROM may typically store a basic input / output system (BIOS), which contains the basic routines that help to transfer information between elements within the computer system 1600, such as during start-up. By way of example and not limitation, the system memory 1610 also illustrates application programs 1612, program data 1614, and an operating system 1616, which may include client applications, a web browser, a mid-tier application, a relational database management system (RDBMS), and the like. By way of example, operating system 1616 may include various versions of Microsoft Windows, Apple Macintosh, and / or Linux operating systems, various commercially available UNIX or UNIX-like operating systems (including without limitation various GNU / Linux operating systems, Google Chrome OS, etc.), and / or mobile operating systems such as iOS, Windows Phone, Android OS, BlackBerry 10 OS, and Palm OS operating systems.

[0197] The storage subsystem 1618 may also provide a tangible computer readable storage medium that stores the basic programming and data constructs that provide the functionality of some embodiments. The storage subsystem 1618 may store software (programs, code modules, instructions) that, when executed by the processor, provide the functionality described above. These software modules or instructions may be executed by the processing unit 1604. The storage subsystem 1618 may also provide a repository for storing data used in accordance with the present disclosure.

[0198] Storage subsystem 1610 may also include a computer-readable storage medium reader 1620, which may be further connected to a computer-readable storage medium 1622. Computer-readable storage medium 1622 may comprehensively represent storage media as well as remote, local, fixed, and / or removable storage devices for containing, storing, transmitting, and retrieving computer-readable information on a temporary and / or more permanent basis, together with, or optionally in combination with, system memory 1610.

[0199] The computer readable storage medium 1622 containing the code or portions of code may also include any suitable medium known or used in the art, including storage media and communication media, such as, but not limited to, volatile and non-volatile, removable and non-removable media implemented in any method or technology for storing and / or transmitting information. This may include tangible computer readable storage media, such as RAM, ROM, Electronically Erasable Programmable ROM (EEPROM), flash memory or other memory technology, CD-ROM, digital versatile disk (DVD) or other optical storage, magnetic cassette, magnetic tape, magnetic disk storage or other magnetic storage device, or other tangible computer readable medium. This may also include intangible computer readable media, such as data signals, data transmissions, or any other medium that may be used to transmit the desired information and that may be accessed by computer system 1600.

[0200] By way of example, the computer readable storage medium 1622 may include hard disk drives that read from or write to non-removable, non-volatile magnetic media, magnetic disk drives that read from or write to removable, non-volatile magnetic disks, and optical disk drives that read from or write to removable, non-volatile optical disks, such as CD ROMs, DVDs, and Blu-Ray® disks or other optical media. The computer readable storage medium 1622 may include, but is not limited to, Zip® drives, flash memory cards, Universal Serial Bus (USB) flash drives, Secure Digital (SD) cards, DVD disks, digital video tapes, and the like. The computer readable storage medium 1622 may also include flash memory-based SSDs, enterprise flash drives, solid state drives (SSDs) based on non-volatile memory such as solid state ROM, SSDs based on volatile memory such as solid state RAM, dynamic RAM, static RAM, DRAM-based SSDs, magnetoresistive RAM (MRAM) SSDs, and hybrid SSDs that use a combination of DRAM and flash memory-based SSDs. The disk drives and their associated computer-readable media may provide non-volatile storage of computer readable instructions, data structures, program modules, and other data for the computer system 1600.

[0201] The communications subsystem 1624 provides an interface with other computer systems and networks. The communications subsystem 1624 serves as an interface for receiving data from other systems and transmitting data from the computer system 1600 to other systems. For example, the communications subsystem 1624 may enable the computer system 1600 to connect to one or more devices via the Internet. In some embodiments, the communications subsystem 1624 may include a radio frequency (RF) transceiver component for accessing a wireless voice and / or data network (e.g., using cellular technology, advanced data network technology such as 3G, 4G, or EDGE (enhanced data rates for global evolution), WiFi (IEEE 1602.11 family of standards), or other mobile communications technology, or any combination thereof), a global positioning system (GPS) receiver component, and / or other components. In some embodiments, the communications subsystem 1624 may provide a wired network connection (e.g., Ethernet) in addition to or instead of a wireless interface.

[0202] In some embodiments, the communications subsystem 1624 may also receive incoming communications in the form of structured and / or unstructured data feeds 1626, event streams 1628, event updates 1630, etc., on behalf of one or more users who may use the computer system 1600.

[0203] As an example, the communications subsystem 1624 may be configured to receive data feeds 1626 in real time from users of social networks and / or other communications services, such as web feeds such as Twitter® feeds, Facebook® updates, Rich Site Summary (RSS) feeds, and / or receive real-time updates from one or more third party information sources.

[0204] Additionally, the communications subsystem 1624 may be configured to receive data in the form of a continuous data stream, which may include an event stream 1628 of real-time events and / or event updates 1630, which may be continuous in nature with no clear end or bounds. Examples of applications that generate continuous data may include, for example, sensor data applications, financial stock ticker machines, network performance measurement tools (e.g., network monitoring and traffic management applications), clickstream analysis tools, automobile traffic monitoring, and the like.

[0205] The communications subsystem 1624 may also be configured to output structured and / or unstructured data feeds 1626, event streams 1628, event updates 1630, etc. to one or more databases that may be in communication with one or more streaming data source computers coupled to the computer system 1600.

[0206] The computer system 1600 may be one of a variety of types, including a handheld portable device (e.g., an iPhone® mobile phone, an iPad® computing tablet, a PDA), a wearable device (e.g., a Google Glass® head mounted display), a PC, a workstation, a mainframe, a kiosk, a server rack, or any other data processing system.

[0207] Because the nature of computers and networks is constantly changing, the description of the computer system 1600 shown in the figure is intended as a specific example only. Many other configurations are possible having more or fewer components than the system shown in the figure. For example, customized hardware may be used and / or particular elements may be implemented in hardware, firmware, software (including applets), or a combination. Additionally, connections to other computing devices, such as network input / output devices, may be employed. Based on the disclosure and teachings provided herein, one of ordinary skill in the art will recognize other means and / or methods of implementing various embodiments.

[0208] Although specific embodiments have been described, various variations, modifications, alternative constructions, and equivalents are encompassed within the scope of the present disclosure. The embodiments are not limited to operate in a particular data processing environment, but can freely operate in multiple data processing environments. Furthermore, while the embodiments have been described using a particular sequence of transactions and steps, it should be apparent to one skilled in the art that the scope of the present disclosure is not limited to the sequence of transactions and steps described. Various features and aspects of the above-described embodiments may be used individually or jointly.

[0209] Furthermore, while embodiments have been described using a particular combination of hardware and software, it should be appreciated that other combinations of hardware and software are within the scope of the present disclosure. The embodiments may be implemented solely in hardware, solely in software, or using a combination thereof. The various processes described herein may be implemented on the same processor or on different processors in any combination. Thus, where a component or module is described as performing certain operations, such configuration may be realized, for example, by designing an electronic circuit to perform the operations, by programming a programmable electronic circuit (such as a microprocessor) to perform the operations, or by a combination thereof. Processes may communicate using a variety of techniques, including, but not limited to, conventional techniques for inter-process communication, and different pairs of processes may use different techniques, or the same pair of processes may use different techniques at different times.

[0210] Accordingly, the specification and drawings are to be regarded in an illustrative and not a restrictive sense. However, it will be apparent that additions, subtractions, deletions, and other modifications and alterations may be made without departing from the broader spirit and scope as set forth in the following claims. Thus, although specific disclosed embodiments have been described, they are not intended to be limiting. Various modifications and equivalents are within the scope of the following claims.

[0211] In the context of describing the disclosed embodiments (particularly in the context of the claims which follow), use of the terms "a," "an," and "the" and similar referents should be construed to encompass both the singular and the plural, unless otherwise indicated in this disclosure and unless clearly contradicted by context. The terms "comprising," "having," "including," and "containing" should be construed as open-ended terms (i.e., meaning "including, but not limited to"), unless otherwise noted. The term "connected" should be construed as contained within, attached to, or joined to one another, either as a part or as the whole, even if there is an intervening element. Recitations of ranges of values ​​herein, unless otherwise indicated herein, are merely intended to serve as a shorthand method of referring individually to each separate value falling within the range, and each separate value is incorporated into this disclosure as if it were individually recited in this disclosure. Unless otherwise indicated in this disclosure and unless clearly contradicted by context, all methods described in this disclosure can be performed in any suitable order. Any and all examples provided in this disclosure, or the use of exemplary language (e.g., "etc.") are intended merely to make the embodiments more clear and do not limit the scope of the disclosure unless otherwise claimed. No language in this specification should be construed as indicating any non-claimed element as essential to the practice of the disclosure.

[0212] Disjunctive language, such as the phrase "at least one of X, Y, or Z," is intended to be understood in context as generally used to indicate that an item, term, etc. may be either X, Y, or Z, or any combination thereof (e.g., X, Y, and / or Z), unless specifically stated otherwise. Thus, such disjunctive language is not generally intended to, and should not, imply that some embodiments require that at least one of X, at least one of Y, or at least one of Z, respectively, be present.

[0213] Preferred embodiments of the present disclosure are described herein, including the best mode known for carrying out the present disclosure. Variations of these preferred embodiments will become apparent to those skilled in the art upon reading the foregoing description. Such variations should be readily adaptable to those skilled in the art, and the present disclosure may be carried out in ways other than those specifically described herein. Accordingly, the present disclosure includes all modifications and equivalents of the subject matter recited in the claims appended hereto as permitted by applicable law. Moreover, unless otherwise indicated herein, any combination of the above-described elements in all possible variations thereof is encompassed by the present disclosure.

[0214] All references cited herein, including publications, patent applications, and patents, are incorporated by reference to the same extent as if each reference was individually and specifically indicated to be incorporated by reference and set forth in its entirety herein. In the foregoing specification, aspects of the present disclosure are described with reference to specific embodiments thereof, but those skilled in the art will recognize that the disclosure is not limited thereto. Various features and aspects of the above-described disclosure may be used individually or in combination. Moreover, the embodiments may be utilized in any number of environments and applications beyond those described herein without departing from the broader spirit and scope of the specification. Thus, the specification and drawings should be regarded as illustrative rather than restrictive.< / realm>

Claims

1. 1. A method comprising: For packets sent by the host machine's graphics processing unit (GPU) and received by the network device: the network device determining an incoming port-link of the network device on which the packet was received; the network device identifying an outgoing port-link corresponding to the incoming port-link based on a GPU routing policy; Including, the GPU routing policy is pre-configured prior to receiving the packet and establishes a mapping of each incoming port-link of the network device to a unique outgoing port-link of the network device; The method further comprises the steps of: the network device forwarding the packet on the outgoing port-link of the network device; The method further comprising:

2. The step of transferring includes: verifying, by the network device, a condition associated with the outgoing port-link of the network device; responsive to the condition being satisfied, forwarding the packet on the outgoing port-link of the network device; The method of claim 1 further comprising:

3. 3. The method of claim 2, wherein the condition corresponds to determining whether the outgoing port-link of the network device is active.

4. In response to the above conditions not being met, the network device obtaining flow information associated with the packet; The network device executes an equal-cost multi-path algorithm to obtain a new outgoing port-link of the network device based on the flow information; the network device forwarding the packet on the new outgoing port-link of the network device; The method of claim 2 , further comprising:

5. The method of claim 4 , wherein the flow information associated with the packets includes at least information associated with a source port, a destination port, a source IP address, and a destination IP address.

6. The method of claim 1 , wherein the network device is a top-of-rack (TOR) switch.

7. 7. The method of claim 6, wherein the TOR and the host machines are contained in a rack, the host machines being communicatively coupled to the TOR via a plurality of links, each link being associated with a network interface card.

8. 7. The method of claim 6, wherein the incoming port-link of the network device is a first link connecting the host machine to the TOR, and the outgoing port-link of the network device is a second link connecting the TOR to a spine switch.

9. The method of claim 1 , wherein the packets belong to a GPU workload.

10. 1. A network device, comprising: A processor; a memory containing instructions; the instructions, when executed by the processor, cause the network device to For packets sent by a graphics processing unit (GPU) of a host machine and received by the network device, determining an incoming port-link of the network device on which the packet was received; and identifying an outgoing port-link corresponding to the incoming port-link based on a GPU routing policy; Let them do so, the GPU routing policy is pre-configured prior to receiving the packet and establishes a mapping of each incoming port-link of the network device to a unique outgoing port-link of the network device; The instructions, when executed by the processor, cause the network device to: For the packet, forwarding said packet on said outgoing port-link of said network device; Further, network devices.

11. Verifying a condition associated with the outgoing port-link of the network device; In response to the condition being satisfied, forwarding the packet on the outgoing port-link of the network device. The network device of claim 10 further configured to:

12. 12. The network device of claim 11, wherein the condition corresponds to determining whether the outgoing port-link of the network device is active.

13. In response to the above conditions not being met, Obtaining flow information associated with the packet; Running an equal-cost multi-path algorithm to obtain a new outgoing port-link of the network device based on the flow information; Forwarding the packet on the new outgoing port-link of the network device. The network device of claim 11 further configured to:

14. The network device of claim 13 , wherein the flow information associated with the packets includes at least information associated with a source port, a destination port, a source IP address, and a destination IP address.

15. The network device of claim 10 , wherein the network device is a top-of-rack (TOR) switch.

16. 16. The network device of claim 15, wherein the TOR and the host machines are contained in a rack, the host machines being communicatively coupled to the TOR via a plurality of links, each link being associated with a network interface card.

17. 16. The network device of claim 15, wherein the incoming port-link of the network device is a first link connecting the host machine to the TOR, and the outgoing port-link of the network device is a second link connecting the TOR to a spine switch.

18. The network device of claim 10 , wherein the packet belongs to a GPU workload.

19. A program for causing a computer system to execute the method according to any one of claims 1 to 9.