Patent ID: 12204449

DETAILED DESCRIPTION

Certain embodiments of systems, devices, components, modules, routines, data structures, and processes for computer memory management are described below. In the following description, specific details of components are included to provide a thorough understanding of certain embodiments of the disclosed technology. A person skilled in the relevant art will also understand that the technology can have additional embodiments. The technology can also be practiced without several of the details of the embodiments described below with reference toFIGS.1-7.

As used herein, the term a “distributed computing system” generally refers to a computing facility having a computer network interconnecting a plurality of host machines to one another or to external networks (e.g., the Internet). An example of such a computing facility can include a datacenter for providing cloud computing services. A compute network can include a plurality of network devices. The term “network device” generally refers to a physical network device, examples of which include routers, switches, hubs, bridges, load balancers, security gateways, or firewalls.

As used herein, a “host computing device” or “host” generally refers to a computing device configured to support execution of one or more applications or computer programs. In certain embodiments, the host can include a host operating system configured to support execution of applications or computer programs. In other embodiments, the host can also support implementation of, for instance, one or more virtual machines (VMs), containers, or other suitable virtualized components. For example, a host can include a server having a hypervisor configured to support one or more virtual machines, containers, or other suitable types of virtual components. The one or more virtual machines or containers can be used to launch and execute suitable applications or computer programs to provide corresponding computing services.

Also used herein, a “host operating system” generally refers to an operating system deployed to interact directly with hardware components of a computer device (e.g., a server) and can grant or deny system level access to services provided by the host operating system. In certain implementations, a hypervisor (e.g., a hosted hypervisor) can run on top of a host operating system rather than interacting directly with the hardware components of the computing device. The hypervisor can then create, manage, or otherwise support one or more VMs or containers each having a “guest operating system” or “guest” separated from the host operating system by a security boundary. In certain implementations, a guest operating system may not be the same as a host operating system supporting the guest operating system.

As used herein, a “hypervisor” generally refers to computer software, firmware, and/or hardware that creates, manages, and runs one or more virtual machines on a host machine. A “virtual machine” or “VM” is an emulation of a physical computing system using computer software. Different virtual machines can be configured to provide suitable computing environment to execute different processes for the same or different users on a single host machine. During operation, a hypervisor on the host machine can present different virtual machines with a virtual operating platform to hardware resources on the host machine and manages execution of various processes for the virtual machines.

Also used herein, the term “computing service” or “cloud service” generally refers to one or more computing resources provided over a computer network such as the Internet. Example cloud services include software as a service (“SaaS”), platform as a service (“PaaS”), and infrastructure as a service (“IaaS”). SaaS is a software distribution technique in which software applications are hosted by a cloud service provider in, for instance, datacenters, and accessed by users over a computer network. PaaS generally refers to delivery of operating systems and associated services over the computer network without requiring downloads or installation. IaaS generally refers to outsourcing equipment used to support storage, hardware, servers, network devices, or other components, all of which are made accessible over a computer network.

As used herein, a memory region generally refers to a portion of a physical memory with a number of memory subregions, blocks, pages, or other suitable subdivisions. For example, a memory region can include one terabyte of physical memory that is divided into one thousand memory subregions of one gigabyte each. Each of the memory subregions can also include a certain amount of designated memory (referred to herein as “metadata memory”) for storing metadata of the corresponding memory subregions. The metadata can contain information indicating a state of the memory subregions such as, for instance, allocation status, refreshing status, etc.

In certain computing devices, a physical memory can be subdivided into multiple memory pages of a certain size (e.g., 4 KB). During operation, when a request for an amount of memory (e.g., 1 MB) is received from a program or process, a memory manager can search metadata memory and locate memory pages (e.g., 256 memory pages of 4 KB each) suitable for the request. The memory manager can then perform allocation of the multiple memory pages to the program or process by informing the program or process regarding the allocated memory pages. The memory manager can also modify metadata in the corresponding metadata memory to reflect that the memory pages have been allocated to the program or process.

The foregoing technique of memory management have certain drawbacks when being applied to computing devices with large amounts of computer memory. In one aspect, the metadata memory can represent significant overhead in the computing devices because the metadata memory cannot be allocated to facilitate execution of programs or processes. In another aspect, updating metadata of a large number of memory pages when allocating the memory pages to a requesting program or process can cause high processing latency that reduces system performance in the computing device.

Several embodiments of the disclosed technology can address several aspects of the above drawbacks by implementing multiple functional types of memory coexisting on a physical memory in a computing device and concurrently tracking status of memory subdivisions of different sizes with an operating system in the computing device. For example, a physical memory having an overall size (e.g., one terabyte) can be divided into a first memory region of a first functional type and a second memory region of a second functional type. The first and second memory regions can each have a size or percentage of the overall size. The first and second memory regions can have memory subregions with different sizes and support different memory management operations. As such, when a request for memory is received, such request can be suitably served by allocating memory from either the first or second memory region, as described in more detail below with reference toFIGS.1-7.

FIG.1is a schematic diagram illustrating a distributed computing system100having hosts106implementing computer memory management in accordance with embodiments of the disclosed technology. As shown inFIG.1, the distributed computing system100can include a computer network (shown as an “underlay network108”) interconnecting a plurality of hosts106, a plurality of client devices102of users101, and a resource manager110to one another. The resource manager110can be a cluster controller, a fabric controller, a database controller, and/or other suitable types of controller configured to monitor and manage resources and operations of the hosts106and/or other components in the distributed computing system100. Even though particular components of the computing system100are shown inFIG.1, in other embodiments, the computing system100can also include network storage devices, maintenance managers, and/or other suitable components (not shown) in addition to or in lieu of the components shown inFIG.1.

As shown inFIG.1, the underlay network108can include multiple network devices112that interconnect the multiple hosts106and the client devices102. In certain embodiments, the hosts106can be organized into racks, action zones, groups, sets, or other suitable divisions. For example, in the illustrated embodiment, the hosts106are grouped into three clusters identified individually as first, second, and third clusters107a-107c. In the illustrated embodiment, each of the clusters107a-107cis operatively coupled to a corresponding network device112a-112c, respectively, which are commonly referred to as “top-of-rack” or “TOR” network devices. The TOR network devices112a-112ccan then be operatively coupled to additional network devices112to form a network in a hierarchical, flat, mesh, or other suitable types of topology. The computer network can allow communications among the hosts106and the client devices102. In other embodiments, the multiple host machine sets107a-107ccan share a single network device112or can have other suitable arrangements.

The hosts106can individually be configured to provide computing, storage, and/or other suitable cloud computing services to the individual users101. For example, as described in more detail below with reference toFIG.2, each of the hosts106can initiate and maintain one or more virtual machines144(shown inFIG.2) upon requests from the users101. The users101can then utilize the instantiated virtual machines144to execute suitable processes for performing computation, communication, and/or other suitable tasks. In certain embodiments, one of the hosts106can provide virtual machines144for multiple users101. In other embodiments, multiple hosts106can host virtual machines144for one or more users101a-101c.

The client devices102can each include a computing device that facilitates corresponding users101or administrator104to access computing services provided by the hosts106via the underlay network108. For example, in the illustrated embodiment, the client devices102individually include a desktop computer. In other embodiments, the client devices102can also include laptop computers, tablet computers, smartphones, or other suitable computing devices. Even though three users101are shown inFIG.1for illustration purposes, in other embodiments, the distributed computing system100can facilitate any suitable numbers of users101or administrators to access cloud and/or other suitable types of computing services provided by the hosts106and/or other components in the distributed computing system100.

FIG.2is a schematic diagram illustrating an overlay network108′ that can be implemented on the underlay network108inFIG.1in accordance with embodiments of the disclosed technology. InFIG.2, only certain components of the underlay network108ofFIG.1are shown for clarity. As shown inFIG.2, the first host106aand the second host106bcan each include a CPU132, a memory134, and a network interface136operatively coupled to one another. The CPU132can include one or more processors, microprocessors, field-programmable gate arrays, and/or other suitable logic devices. The memory134can include volatile and/or nonvolatile media (e.g., ROM; RAM, magnetic disk storage media; optical storage media; flash memory devices, and/or other suitable storage media) and/or other types of computer-readable storage media configured to store data received from, as well as instructions for, the CPU132(e.g., instructions for performing the methods discussed below with reference toFIG.6). The network interface136can include a network interface card, a connection converter, and/or other suitable types of input/output devices configured to accept input from and provide output to other components on the overlay networks108′.

The first host106aand the second host106bcan individually contain instructions in the memory134executable by the CPU132to cause the individual hosts106aand106bto provide a hypervisor140(identified individually as first and second hypervisors140aand140b). The hypervisors140can be individually configured to generate, monitor, terminate, and/or otherwise manage one or more virtual machines144organized into tenant sites142. For example, as shown inFIG.2, the first host106acan provide a first hypervisor140athat manages first and second tenant sites142aand142b, respectively. The second host106bcan provide a second hypervisor140bthat manages first and second tenant sites142a′ and142b′, respectively. The hypervisors140are individually shown inFIG.2as software components. However, in other embodiments, the hypervisors140can also include firmware and/or hardware components.

The tenant sites142can each include multiple virtual machines144for a particular tenant. For example, the first host106aand the second host106bcan both host the tenant site142aand142a′ for a first user101a. The first host106aand the second host106bcan both host the tenant site142band142b′ for a second user101b. Each virtual machine144can be executing applications or processes147corresponding to an operating system, middleware, and/or suitable applications. The executed applications or processes147can each correspond to one or more computing services or other suitable types of computing services. Examples of such computing services can include platform services, microservices, authentication services, or other suitable types of services.

Also shown inFIG.2, the computing system100can include an overlay network108′ having one or more virtual networks146that interconnect the tenant sites142aand142bacross the first and second hosts106aand106b. For example, a first virtual network146ainterconnects the first tenant sites142aand142a′ at the first host106aand the second host106b. A second virtual network146binterconnects the second tenant sites142band142b′ at the first host106aand the second host106b. Even though a single virtual network146is shown as corresponding to a single tenant site142, in other embodiments, multiple virtual networks (not shown) may be configured to correspond to a single tenant site146.

The virtual machines144on the virtual networks146can communicate with one another via the underlay network108(FIG.1) even though the virtual machines144are located or hosted on different hosts106. Communications of each of the virtual networks146can be isolated from other virtual networks146. In certain embodiments, communications can be allowed to cross from one virtual network146to another through a security gateway or otherwise in a controlled fashion. A virtual network address can correspond to one of the virtual machines144in a particular virtual network146. Thus, different virtual networks146can use one or more virtual network addresses that are the same. Example virtual network addresses can include IP addresses, MAC addresses, and/or other suitable addresses.

In operation, the hosts106can facilitate communications among the virtual machines and/or applications executing in the virtual machines144. For example, the CPU132of the first host106acan execute suitable network communication operations to facilitate the first virtual machine144ato transmit packets to the second virtual machine144bvia the virtual network146aby traversing the network interface136on the first host106a, the underlay network108(FIG.1), and the network interface136on the second host106b. As such, the first virtual machine144aof a tenant site142aon the first host106acan cooperate with another virtual machine144bon another server106bto execute suitable applications147or processes in order to provide suitable computing services to the users101.

In order to host the virtual machines144, the hosts106can allocate certain amount of memory space to the virtual machines144. The inventors have recognized that having a fixed size (e.g., 4 KB) memory pages in the memories134may not be efficient for providing memory access to the virtual machines144or other suitable types of guest operating systems. For example, having a large number of 4 KB memory pages can result in a large amount of the memories134being designated as metadata memory, and thus increasing operation overhead in the memories134. In another example, during allocation, updating each of a large number of 4 KB memory pages can result in high latency when instantiating the virtual machines144. Several embodiments of the disclosed technology can address at least some aspects of the foregoing drawbacks by implementing multiple memory types in the memories134of the hosts106and concurrently tracking status of memory subdivisions of different sizes with an operating system such that the memory overhead and operation latency related to allocating memory to the virtual machines144can be reduced, as described in more detail below with reference toFIGS.3A-4D.

FIGS.3A-3Care schematic diagrams of certain hardware/software components of a host ofFIGS.1and2during stages of initializing memory regions in the host106in accordance with embodiments of the disclosed technology. Only certain components of the host106are shown inFIGS.3A-3Cfor illustration purposes. In other embodiments, the host106can include additional memories134or other suitable components.

As shown inFIG.3A, the processor132of the host106can execute suitable instructions to provide an operating system138that supports a hypervisor140and a virtual stack148operatively coupled with one another. The processor132is also operatively coupled to a physical memory134and a persistent storage135holding a memory configuration file111. The virtual stack148can be configured to complement activities of the hypervisor140in running guest operating systems such as the virtual machines144inFIG.2. For example, the virtual stack148can include software library components emulated devices, management services, and user interfaces.

The configuration file111can include data indicating partition settings of the physical memory134into multiple memory regions. In certain implementations, the physical memory134can have an overall size (e.g., one terabyte) can be divided into a first memory region134a(shown inFIG.3B) of a first functional type and a second memory region134b(shown inFIG.3B) of a second functional type. The first and second memory regions134aand134bcan each have a preconfigured size or percentage of the overall size of the physical memory134. In certain embodiments, the preconfigured size or percentage of the first and/or second memory regions can be set by a user101(FIG.1) of the host106and persistently stored in the configuration file111at the persistent storage135. In other embodiments, the preconfigured size or percentage can have default values, can be set during operation, or set in other suitable manners. In further embodiments, at least a part of the first memory region134acan be converted into the second functional types during operation, or vice versa, as discussed in more detail with reference toFIG.3C.

As shown inFIG.3A, the memory manager150includes a partioner152and an allocator154operatively coupled to each other. Though only the foregoing components of the memory manager150are shown inFIG.3A, in other embodiments, the memory manager150can include other suitable components in addition to the foregoing components shown inFIG.3A.

The partioner152can be configured to partition the physical memory134into multiple memory regions according to the configuration file111. For example, as shown inFIG.3A, in response to receive a startup command120, the partioner152of the memory manager150can be configured to retrieve the configuration file111from the persistent storage135and configure the first and second memory regions134aand134baccordingly. For example, the partioner152can be configured to subdivide a preconfigured size or percentage of the physical memory134into first and second memory regions134aand134beach with multiple memory subregions of a preset size according to the configuration file111.

In certain implementations, the first memory region134acan be subdivided into multiple memory subregions123aof a first size (e.g., 4 KB, 1 MB, or 2 MB) individually having a designated metadata memory124ain the first memory region134a. The metadata memory124acan be configured for holding metadata of the memory subregions123a. The first memory region134acan also be configured to support a first set of memory management operations. Examples of such memory management operations can include operations for allocation, deallocation, swapping, memory protection, segmentation, error checking, and other suitable tasks. During operation, the operating system138at the host106can allocate memory from the first memory region134ato programs or processes executing on top of the operating system138, as described in more detail below with reference toFIGS.4A-4B.

The second memory region134bcan be subdivided into multiple memory subregions123bof a second size (e.g., 1 GB) that is larger than the first size of the first functional type. It is also recognized that not all memory management operations may be suitable for memory allocated to a guest operating system such as the virtual machines inFIG.2. As such, the second memory region134bcan also be configured to support a second set of memory management operations that are different than the first set of memory management operations. For instance, memory allocated to a virtual machine144may not require operations other than allocation and deallocation. As such, the second set can support only allocation and deallocation of memory from the second memory region134b, but not other operations supported by the first set. During operation, the operating system138at the host106can allocate memory from the second memory region134bto a virtual machine144(or other suitable types of guest operating system), as described in more detail below with reference toFIGS.4C-4D.

As shown inFIG.3C, in certain implementations, the relative proportion of the first and second memory regions134aand134bcan be modified during operation. For example, upon receiving a convert command121, the partitioner152can be configured to convert at least a portion of the first memory region to the second memory functional type, or vice versa. In the illustrated example inFIG.3C, a portion of the first memory region134ais shown being converted into the memory subregions123b(shown with shading designated as134′) of the second memory region134b. In other examples, one or more memory subregions123bof the second memory region134bcan also be converted into memory subregions123aof the first memory region134a. The partitioner152can also be configured to designate and/or update the metadata memory124aor124bto reflect any conversion between the first and second memory regions134aand134b. Upon completion of portioning the physical memory134, the memory manager150can be configured to allocate memory from the first and second memory regions134aand134bin accordance with a characteristic of a request for allocation, as described in more detail below with reference toFIGS.4A-4D.

FIGS.4A-4Dare schematic diagrams of certain hardware/software components of a host ofFIGS.1and2during stages of memory allocation in the host in accordance with embodiments of the disclosed technology. As shown inFIGS.4A and4B, during operation, upon receiving a first request126for memory from a program or process executing in the operating system138, the allocator154of the memory manager150can be configured to allocate a portion of the first memory region134ato the program or process. As such, the allocator154can be configured to provide a first response128to the program or process identifying one or more memory subregions123afrom the first memory region134aand update corresponding metadata memory124aaccordingly.

As shown inFIGS.4C and4D, a second request126′ can be received from, for instance, a virtual machine manager (not shown) for a virtual machine144(FIG.2) to be instantiated on the host106via the virtual stack148. In response, the allocator154of the memory manager150can be configured to allocate a portion of the second memory region134binstead of the first memory region134afor use by the virtual machine144. As such, the allocator154can be configured to provide a second response128′ to the virtual machine manager identifying one or more memory subregions123bfrom the second memory region134band update corresponding metadata memory124baccordingly.

The allocator154of the memory manager150can be configured to distinguish the first and second requests126and126′ in various manners. In one example, the memory manager150(or other components of the operating system138) can provide distinct Application Programming Interfaces (“APIs”) each configured to receive the first or second request126and126′, respectively. As such, the allocator154can be configured to select one of the first or second memory regions134aand134bfor allocating memory based on an identity of the API at which the first or second request126or126′ is received. In other examples, the allocator154can be configured to distinguish the first and second requests126and126′ based on metadata included with the first and second requests126and126′ or in other suitable manners. For instance, the memory manager150can be configured to maintain a list of registered processes for each of the first and second memory regions134aand134b. Upon receiving the first or second request126or126′, the memory manager150can be configured to identify the corresponding process and allocate from one of the first or second memory region134aand134bwhen the process is registered. Otherwise, the memory manager150can be configured to allocate from a default memory region (e.g., the first memory region134a). Such registration can be per-thread, per-process, per-processor, or at other suitable basis. In other implementations, the hypervisor140can maintain a table of the metadata and use the metadata to determine which of the first or second memory region134aand134bto allocate based on a caller identity and a listing in the metadata table.

Several embodiments of the disclosed technology can significantly reduce memory overhead in the host106. By subdividing the second memory region134baccording to the second size larger than the first size, an amount of metadata for the second memory region134bcan be significantly reduced than if the second memory region134bis also subdivided according to the first size. For example, assuming a 1% overhead for the metadata memory124aor124b, subdividing one terabyte of memory into memory subregions123aof 4 KB each (i.e., a single memory page) results in about ten gigabytes of metadata memory124a. On the other hand, subdividing one terabyte of memory into memory blocks of one gigabyte each results in about 40 kilobytes of metadata memory124b. By reducing the memory overhead, more memory space in the physical memory134may be available for allocation to virtual machines144or containers for executing computing tasks. As such, costs for providing computing services from the virtual machines144or container at the host106may be reduced.

Several embodiments of the disclosed technology can also facilitate efficient update/reset of the operating system138on the host106while maintaining state information of virtual machines144(FIG.2) or containers hosted on the host106. For example, during a Kernel Software Reset (“KSR”), the memory manager150can be configured to maintain the distribution of the first and second memory region134aand134b. For example, the memory manager150can maintain which pages of the second memory region134bare in use by the virtual machines144and selectively persist/restore metadata for the pages that are in use. Data of the operating system138in the first memory region134acan then be overwritten and updated while data in the second memory region134bis maintained. After reinitializing the operating system138in the first memory region134a, various virtual machines144or containers can be resumed on the computing device based on the maintained state information in the second memory region134b. As such, fast update/reset of the operating system138can be achieved while preserving the state information of the virtual machines144or containers.

Further, processing latency of allocating memory from the second memory region134bto virtual machines144, containers, or other suitable types of guest operating systems can be much lower than allocating memory from the first memory region134a. The second functional type can have much larger memory subregions than the first functional type. As such, a number of updates to the metadata memory124bduring allocation can be significantly decreased when compared to allocating from the first memory region134a. For example, allocating one terabyte memory of 4 KB each involves updating metadata in about 10 gigabytes of metadata memory124a. In contrast, allocating one terabyte memory of one gigabyte each includes updating metadata in about 40 kilobytes of metadata memory124b. As a result, a speed of instantiating virtual machines144or containers and/or other system performance may be improved in the host106.

Though only one physical memory134is shown inFIGS.3A-4D, in other embodiments, the host106can have multiple physical memories134that are either local or remotely accessible by the processor132as shown inFIG.5. For example, Non-Uniform Memory Access (“NUMA”) is a computer memory design according to which a processor can access both local memory and non-local memory (e.g., memory local to another processor or memory shared between processors). Each local or non-local memory134,134′, and134″ can form a NUMA node. In accordance with several aspects of the disclosed technology, each NUMA node can have corresponding ratios of the first and second memory regions134aand134bfrom 0% to 100%. In one example, as shown inFIG.5, one NUMA node (e.g., memory134) can include only a first memory region134awhile another NUMA node (e.g., memory134′) includes only a second memory region134b. In other examples, at least some of the NUMA nodes (e.g., memory134″) can include both the first and second memory region134aand134bat the same ratio or at different ratios.

FIG.6is a flowchart illustrating a process200of memory management in accordance with embodiments of the disclosed technology. Though the process200is described below in the context of the host106inFIGS.3A-4D, in other embodiments, the process200may be implemented in computing devices or systems with additional and/or different components. As shown inFIG.6, the process200can include receiving an allocation request at stage202. The process200can then include a decision stage204to determine whether the request is for allocation from the first memory region134aor the second memory region134bof the physical memory134(FIGS.3A-4D). The first memory region134ahas multiple memory subregions123aof a first size. The second memory region134bcan also have multiple memory subregions123bof a second size larger than the first size of the first memory region134aand is not available for allocation to a program or process executed by the processor on the operating system138. Instead, the second memory region134ais available for allocation to a virtual machine, container, or other suitable types of guest operating system. In response to determining that the request for allocation of memory is for allocation from the first memory region134a, the process200proceeds to allocating a portion of the memory subregions123aof the first memory region134aat stage206. In response to determining that the request for allocation of memory is for allocation from the second memory region134b, the process200proceeds to allocating a portion of the memory subregions123bof the second memory region134bat stage208.

FIG.7is a computing device300suitable for the host100inFIGS.1-4D. In a very basic configuration302, the computing device300can include one or more processors304and a system memory306. A memory bus308can be used for communicating between processor304and system memory306. Depending on the desired configuration, the processor304can be of any type including but not limited to a microprocessor (μP), a microcontroller (μC), a digital signal processor (DSP), or any combination thereof. The processor304can include one more level of caching, such as a level-one cache310and a level-two cache312, a processor core314, and registers316. An example processor core314can include an arithmetic logic unit (ALU), a floating-point unit (FPU), a digital signal processing core (DSP Core), or any combination thereof. An example memory controller318can also be used with processor304, or in some implementations memory controller318can be an internal part of processor304.

Depending on the desired configuration, the system memory306can be of any type storage device including but not limited to volatile memory (such as RAM), nonvolatile memory (such as ROM, flash memory, etc.) or any combination thereof. The system memory306can include an operating system320, one or more applications322, and program data324.

The computing device300can have additional features or functionality, and additional interfaces to facilitate communications between basic configuration302and any other devices and interfaces. For example, a bus/interface controller330can be used to facilitate communications between the basic configuration302and one or more data storage devices332via a storage interface bus334. The data storage devices332can be removable storage devices336, non-removable storage devices338, or a combination thereof. Examples of removable storage and non-removable storage devices include magnetic disk devices such as flexible disk drives and hard-disk drives (HDD), optical disk drives such as compact disk (CD) drives or digital versatile disk (DVD) drives, solid state drives (SSD), and tape drives to name a few. Example computer storage media can include volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information, such as computer readable instructions, data structures, program modules, or other data. The term “computer readable storage media” or “computer readable storage device” excludes propagated signals and communication media.

The system memory306, removable storage devices336, and non-removable storage devices338are examples of computer readable storage media. Computer readable storage media include, but not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other media which can be used to store the desired information and which can be accessed by computing device300. Any such computer readable storage media can be a part of computing device300. The term “computer readable storage medium” excludes propagated signals and communication media.

The computing device300can also include an interface bus340for facilitating communication from various interface devices (e.g., output devices342, peripheral interfaces344, and communication devices346) to the basic configuration302via bus/interface controller330. Example output devices342include a graphics processing unit348and an audio processing unit350, which can be configured to communicate to various external devices such as a display or speakers via one or more NV ports352. Example peripheral interfaces344include a serial interface controller354or a parallel interface controller356, which can be configured to communicate with external devices such as input devices (e.g., keyboard, mouse, pen, voice input device, touch input device, etc.) or other peripheral devices (e.g., printer, scanner, etc.) via one or more I/O ports358. An example communication device346includes a network controller360, which can be arranged to facilitate communications with one or more other computing devices362over a network communication link via one or more communication ports364.

The network communication link can be one example of a communication media. Communication media can typically be embodied by computer readable instructions, data structures, program modules, or other data in a modulated data signal, such as a carrier wave or other transport mechanism, and can include any information delivery media. A “modulated data signal” can be a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media can include wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, radio frequency (RF), microwave, infrared (IR) and other wireless media. The term computer readable media as used herein can include both storage media and communication media.

The computing device300can be implemented as a portion of a small-form factor portable (or mobile) electronic device such as a cell phone, a personal data assistant (PDA), a personal media player device, a wireless web-watch device, a personal headset device, an application specific device, or a hybrid device that include any of the above functions. The computing device300can also be implemented as a personal computer including both laptop computer and non-laptop computer configurations.

Specific embodiments of the technology have been described above for purposes of illustration. However, various modifications can be made without deviating from the foregoing disclosure. In addition, many of the elements of one embodiment can be combined with other embodiments in addition to or in lieu of the elements of the other embodiments. Accordingly, the technology is not limited except as by the appended claims.