The present invention relates generally to management and monitoring of memory resources in a computing system.
Modern computing architectures use multiple layers of address spaces, for example to abstract underlying structures, provide security and isolation (e.g., per process or per guest virtual machine (VM) from an underlying hypervisor), or simplify programming (e.g., by means of independent selection of memory addresses).
A variety of mechanisms exist for implementing and accelerating address mappings and address translations between layers. A few representative examples of such mechanisms in a modern Memory Management Unit (MMU) include the use of Page Tables (PTs), Page-Table Walkers (PTWs), Translation Caches, Page Table Caches, Translation Lookaside Buffers (TLBs), and numerous forms of lookup tables. Additional address mapping and translation mechanisms exist in closely related domains, such as in storage systems. Examples include: FTL (Flash Translation Layer), LBA (Logical Block Addressing) to CHS (Cylinder/Head/Sector) and LBA to PBA (Physical Block Address).
The process of address mapping and translation is commonly performed at coarse-granularity of relatively large chunks (such as pages/blocks/frames etc.), where the ultimate fine-grain target address includes the coarse-grained translation coupled with an offset (normally in Byte granularity). Such large chunks may come in equal sizes (e.g., 4 KB pages) or in varying sizes (e.g., plurality of custom address regions).
In recent years, the vast use of “big data” applications, large databases, and other types of applications that require enormous amounts of memory and storage, have induced significant stress on the various address mapping and translation mechanisms. For instance, the significant increase in system memory from dozens of gigabytes (GBs) to several terabytes (TBs), accompanied by reduced locality patterns in modern workloads, has reduced the effectiveness of translation mechanisms such as TLBs and other translation caches in the MMU. In particular, TLB size has not scaled up in proportion to the increase in system memory size, mainly due to the associated silicon and power costs involving such increase. Consequently, in some systems the effectiveness of the TLB has degraded, causing more TLB-misses that require much slower page-table walks, thus affecting the overall performance of the system.
A possible workaround to remedy this situation uses large pages (which, in certain architectures, may correspond to 2 MB or 1 GB pages instead of the traditional 4 KB pages). Such a workaround dramatically increases the TLB reach and reduces TLB misses, providing significant performance gains to the system in the context of demanding modern workloads.
However, an increase in page size is known to affect related important mechanisms. In particular, it reduces OS (or functionally similar entities) visibility into the usage patterns of memory and the distribution of hot spots across the memory space. Accurate sampling of such hot spot levels is an essential component in many system-level algorithms that offer improved memory usage by redistributing the corresponding memory resources as needed (such that optimal hot spot levels are achieved)
In one common implementation, for instance, the operating system (OS) would periodically review Page Table Entries (PTEs) and evaluate per-page indications such as A(Access) and D(Dirty) bits—which may be seen as a coarse-grained hot spot sampling method. The OS would then seek to classify pages as “hot” or “cold” according to their usage patterns, and further evict “cold” pages from main memory into lower hierarchies of memory and/or storage (e.g., into remote memory). By evicting “cold” pages that are less frequently used (resulting in, e.g., page-outs), the OS makes room for more important data which is more frequently used. Whereas the use of smaller 4 KB pages provides the OS with relatively fair fine-grained visibility when classifying “hot” and “cold” pages13 the shift to much larger pages (e.g., 2 MB, 1 GB, etc.) leads to significant loss of visibility and prevents the OS from having a fine-grained view on memory entropy distributions. As an example, a large page would be considered hot and will be kept in main memory even if only a small fraction of this Large Page is actually accessed and used—therefore leading to memory bloating.
Regardless of their implementations in hardware, firmware, or software, existing memory management architectures interlink the precision of memory address translation with the precision of hot spot sampling. Such coupling makes it difficult and oftentimes infeasible to uncover usage patterns of memory, such as: spatial and temporal localities that may assist in predicting imminent events; asymmetrical entropy distributions that might lead to inefficient resource utilization; accumulation of heat in hot spots due to excessive use; and degradation in reliability due to excessive and uneven wear of the memory elements.
A computer based system and method for managing memory resources in a computing system may include receiving, from a computing system, data associated with memory transaction events originating from a process executing on the computing system; storing data related to memory transactions in multiple data structures according to metadata related to past memory transactions events; and altering memory storage or determining memory address translations based on the stored data.
Non-limiting examples of embodiments of the disclosure are described below with reference to figures attached hereto. Dimensions of features shown in the figures are chosen for convenience and clarity of presentation and are not necessarily shown to scale. The subject matter regarded as the invention is particularly pointed out and distinctly claimed in the concluding portion of the specification. The invention, however, both as to organization and method of operation, together with objects, features and advantages thereof, can be understood by reference to the following detailed description when read with the accompanied drawings. Embodiments of the invention are illustrated by way of example and not limitation in the figures of the accompanying drawings, in which like reference numerals indicate corresponding, analogous or similar elements, and in which:
It will be appreciated that for simplicity and clarity of illustration, elements shown in the figures have not necessarily been drawn accurately or to scale. For example, the dimensions of some of the elements can be exaggerated relative to other elements for clarity, or several physical components can be included in one functional block or element.
In the following detailed description, numerous specific details are set forth in order to provide a thorough understanding of the invention. However, it will be understood by those skilled in the art that the present invention can be practiced without these specific details. In other instances, well-known methods, procedures, and components, modules, units and/or circuits have not been described in detail so as not to obscure the invention.
When discussed herein, “a” computer processor performing functions may mean one computer processor performing the functions or multiple computer processors or modules performing the functions; for example, a process as described herein may be performed by one or more processors, possibly in different locations.
Embodiments may capture or intercept memory transactions (e.g. read or write), and record the transactions or data related to the transactions, for example in a journal, based on metadata related to the transaction [e.g. process ID (identification) related to the transaction, memory address, etc.]. A single transaction may be saved in multiple data journals, each different journal possibly dealing with a different issue. The data saved in journals may then be used by, system monitoring module or entity, in order to react to future memory transactions, or to calculate data (e.g. entropy, memory “heat” or usage, or future usage patterns of memory resources) used to alter memory storage, allocation, address translation, or policies or rules: for example a memory transaction may he delayed or throttled based on the transaction, a policy, and metadata saved in journal entries; and based on a policy, and meta.data saved in journal entries, memory storage may be altered, moved or reallocated. Similarly, memory pages or memory chunks of various sizes may be moved, or migrated, from one location to another—e.g., from remote memory to local memory, or from one memory-media type (e.g., persistent memory) to another memory-media type (e.g., DRAM), such that a desirable memory redistribution (which may accelerate the system's performance) is achieved. For example, a system monitoring module may be used for reading and analyzing data saved in journals and for determining that particular memory resources or components are accessed in a high rate (e.g., found above a certain safety threshold)—which may lead, for example, to excessive heating of memory components which may, in turn, result in immediate or longer-term. memory robustness and reliability issues. In response, the system monitoring module may, for instance, be used for configuring a memory controller to throttle or limit memory transactions to particular ranges of memory addresses.
In another example, a system monitoring module may be used for reading and analyzing data saved in journals and for determining that a particular virtual machine is accessing memory resources more frequently than its service level agreement (SLA) permits. In response, the system monitoring module may, e.g., react by configuring registers in the memory subsystem that throttle or limit transactions from that particular virtual machine. In yet another example, a different system. monitoring module may be used for detecting frequent accesses from an execution unit (e.g., local CPU core) to remote memory, and respond, for instance, with an instruction to a DMA engine to relocate memory sections (e.g., memory pages), front remote persistent memory to a memory resource such as local DRAM, being tightly coupled with the local execution unit (such that, e.g., memory speed may be optimized).
Other actions may be taken based on data stored in journal entries. Policies, e.g. in the form of rules, may take as input data such as journal data (e.g. describing a history of memory transactions) and/or a transaction, and cause action to be taken, e.g. determining if and where to save transaction or entropy data, or signaling the operating system or a system monitoring module to perform memory related operations such as migrations, throttling, etc., as demonstrated hereinabove. Data structures such as journals may include metadata such as transactor or application ID, virtual machine (VM) ID, or other metadata. Each transaction or data describing each transaction may be saved in multiple different journals. Metadata such as transactor or application ID, virtual machine (VM) ID, or other metadata may also be used to determine which rule is to be applied to a transaction. Different amounts of transactions may be sampled or collected: e.g. all transactions, a certain percentage of transactions, X transactions every time period, etc. Memory or processing related actions such as reallocation, address translation, deciding where to store data, migrations, and throttling (e.g. changing the operational speed of a process), restricting memory access of a process, etc. may be effected by sending a message or request to, for example, the operating system (OS), a system monitoring module or device, or another pre-existing unit. For example, altering memory storage, such as reprovisioning, redirecting storage requests from one storage medium to another, storing transaction request data in a particular or specific memory resources, throttling memory requests, etc. may be based on the data stored in journals, and policies (which may take as input journal data, a specific transaction, metadata associated with memory transaction events or other data). A policy may affect if, how, where, or how often journal data is stored, and may dictate a rate. A rate journal data is stored or sampled may be based on different factors: e.g. the rate data is added to data structures such as journals may be in part due to the output of a random number generator, or a timer or clock ticks.
For example, a policy or rule may when triggered or executed may, for any memory transaction for resource X and address within X, determine or calculate energy consumed for the transaction, sum energy over time for this resource and address based on journal entries, decide the transaction is good or bad, and if bad linear access to this resource, e.g. throttle, as it is too “hot”. A proxy for actual heat may be a measurement of memory accesses: for example heat may be calculated, for instance, by applying a linear mathematical function according to the assumption that each memory access is associated with a certain amount of energy expressed in pico-Joules. In some embodiments of the invention, energy contributions may be collected in a journal and then analyzed by a system monitoring module to further perform memory related actions or operations, such as throttling, restricting memory access of a process, altering memory storage, allocation, address translation, or policies as demonstrated hereinabove. Throttling may include reducing CPU speed, or sending a command or request to a MMU to slow down writing to a certain memory, or limit amount of compute allowed for a certain server rack. A policy may in the case of a tennant (e.g. process or virtual machine) consuming too much memory, affecting other tenants' use of common memory in a cloud computing environment, lead to sampling of entropy data that may, in turn, be used by a system monitoring unit for throttling memory usage of the tennant. Data measured may be multidimensional, e.g. both in in time domain and space domain. Each data point collected may instead of being considered in isolation, used to make a decision in conjunction with other data accumulated over time.
In one embodiment, a memory transaction event (e.g. to read or write a set of data to memory) may be received, and based on data or an item of metadata describing the transaction, which may be taken from the event, and a journal describing a history of memory transactions, in which memory system of a plurality of memory resources or systems to store the data, it may be determined, e.g. where to store the relevant transaction data, to be used by the OS or a system monitoring module in determining if to re-allocate memory, if to modify translation structures, how to serve the transaction (e.g. immediately, slowly, in a throttled manner), if to change a policy or resource allocation for the VM or application requesting the transaction (e.g. to throttle the speed of the VM, to limit the speed of VM access to memory, etc.). A journal may include data related to transaction events, describing a history of memory transactions for a set of memory resources. It is noted that embodiments of the invention may decide both, and separately, where, if and how to store the transaction in a journal for the purpose of documenting past memory transactions; and how to store/access/read the data or memory described by the transaction.
Reference is made to
OS 115 may be or may include any code segment (e.g., one similar to executable code 125) designed and/or configured to perform tasks involving coordination, scheduling, arbitration, controlling or otherwise managing operation of computing device 100, for example, scheduling execution of software programs or enabling software programs or other modules or units to communicate.
Memory 120 may be or may include, for example, a Random Access Memory (RAM), a read only memory (ROM), a Dynamic RAM (DRAM), a Synchronous DRAM (SD-RAM), a double data rate (DDR) memory chip, a Flash memory, a volatile memory, a non-volatile memory, a cache memory, a buffer, a short term memory unit, a long term memory unit, or other suitable memory or storage units. Memory 120 may be or may include a plurality of, possibly different memory units. Memory 120 may be a computer or processor non-transitory readable medium, or a computer non-transitory storage medium, e.g., a RAM. Multiple memories 120 may be included, in different layers, e.g. cache, local memory within a computer (e.g. on the same board or in the same box as the processors); a peripheral memory physically attached to a computer; a remote memory geographically removed from the processor (e.g. cloud computing); or memory in a different computing system (e.g. accessed using remote direct memory access (RDMA) techniques). Memories 120, storage 130, or other memory or storage systems may be memo resources or components affected by methods as discussed herein.
Executable code 125 may be any executable code, e.g., an application, a program, a process, task or script. Executable code 125 may be executed by controller 105 possibly under control of operating system 115. For example, executable code 125 may configure controller 105 to link records from different data sets, form metrics or ratings, display such analysis in preexisting programs, and perform other methods as described herein. Although, for the sake of clarity, a single item of executable code 125 is shown in
Storage system 130 may be or may include, for example, a hard disk drive, a CD-Recordable (CD-R) drive, a Blu-ray disk (BD), a universal serial bus (USB) device or other suitable removable and/or fixed storage unit. Data such as commits, issues, etc. may be stored in storage system 130 and may be loaded from storage system 130 into memory 120 where it may be processed by controller 105. Some of the components shown in
Input devices 135 may be or may include a mouse, a keyboard, a microphone, a touch screen or pad or any suitable input device. Any suitable number of input devices may be operatively connected to computing device 100 as shown by block 135. Output devices 140 may include one or more displays or monitors, speakers and/or any other suitable output devices. Any suitable number of output devices may be operatively connected to computing device 100 as shown by block 140. Any applicable input/output (I/O) devices may be connected to computing device 100 as shown by blocks 135 and 140. For example, a wired or wireless network interface card (NIC), a printer, a universal serial bus (USB) device or external hard drive may be included in input devices 135 and/or output devices 140.
In some embodiments, device 100 may include or may be, for example, a personal computer, a desktop computer, a laptop computer, a workstation, a server computer, a network device, or any other suitable computing device. A system as described herein may include one or more devices such as computing device 100.
Memory entropy (which may be referred to as “entropy” herein) may be used to establish measures and assessments of memory related events and activities, such as memory accesses that may affect hit ratios in caches, or that may develop performance bottlenecks and/or hot spots in other parts of the system's memory. Entropy as used herein may generally correspond to all data and/or metadata associated with memory related events such as address translations and memory access transactions. Such data/metadata may include telemetry metadata, for instance, a TimeStamp, NumaID (processor NUMA ID or sub-NUMA ID), CoreID (Processor Core ID), VMid (Virtual Machine ID), PID (Process ID), PASID (Process Address Space ID), gVA (guest Virtual Address), gPA (guest Physical Address), hPA (host Physical Address), DimmID (DIMM memory component ID), and the like. Such metadata may, e.g., not be visible (e.g. known) to OS 115 of computing device 100.
In some embodiments of the invention, telemetry metadata may be collected from internal busses within a hardware execution unit such as a processor core. In some other embodiments, where the execution entity is virtual and implemented purely in software, telemetry metadata may be collected from internal software transaction parameters associated with, e.g., a virtual execution unit such as a vCPU.
While data that is not visible to OS 115 can, in principle, be collected and processed as known in the art (via, e.g., establishing a connection to a cache-coherent interface for monitoring cache snoop operations), there is currently no systematic way of organizing this data such that it can be readily used for multi-purpose assessments of memory related events. Calculations or manipulations on appropriately organized entropy data may thus generally provide insight into memory usage patterns. As a simple example, the number of accesses per a given unit of time for a particular memory address may be used as a relative measure for hot spot detection (e.g., when this measure is compared across many such addresses). Such relative measure may also be employed as part of memory throttling techniques that restrict memory transactions to a particular physical memory resource for the purpose of managing power consumption.
Embodiments may provide a method and apparatus for collecting and storing data/metadata associated with events and transactions related to the memory system with adjustable fine-grain precision. Embodiments of the present invention may provide a method and apparatus for separating the precision of memory address translation from the precision of entropy collection.
It should be noted that, according to some embodiments of the invention, the above elements may be implemented in a virtualized software framework—e.g., using vCPUs, vCores, vMMUs, vTLBs, and so forth.
A multi-dimensional entropy sampling (MDES) engine 300 may be used to collect entropy data and metadata associated with memory-related events and organize them in a useful manner In possible embodiments of the invention, MDES engine 300 is configured to collect entropy associated with operations by MMU 200 and MC 160 (or IO/coherent link 165), forming an ‘on-CPU’ entropy sampling apparatus, as depicted in
In some embodiments of the invention, MDES engine 300 may receive, sample or collect entropy data describing memory events (e.g., address translation operations by MMU 200, such as page table hits) from their corresponding location in the system's memory and store them in dedicated entropy data structures such as journals, which may be hierarchical. For example, MDES engine 300 may receive data including memory transaction events and store the data multiple data structures, for example according to metadata related to the transaction events (which may itself be stored in the events). Such entropy data structures may vary in size and be further organized in multiple hierarchies. For instance, in some embodiments, some entropy data may be stored as discrete, minimum-size units of entropy elements (EEs) in memory 120. In some other embodiments, entropy data may be organized in more complex structures that include macro-level entropy stores 330 that are further partitioned into data structures such as entropy journals (EJs) 335, each containing a set of entropy records (ERs) which include a plurality of EEs. Entropy data structures may allow collecting entropy data in different dimensions (i.e., spatial and temporal) as explained herein.
Reference is now made to
A given entropy store 330 may be partitioned into EJs 335 which, in turn, may contain one or many ERs 400 ordered in a producer-consumer FIFO (first-in-first-out) fashion that enables a software-entity to track the entropy collected in that EJ. Each ER 400 may include one or more EEs 410. MDES engine 300 may include an ER tabulator 305 which may record the location of an ER within a given EJ, and an ER cache 315 to store ERs for short amounts of time (e.g., in case an ER is to be moved from one EJ to another) and a policy table 310 that may contain conditional rules for sampling and storing ERs as further demonstrated below. While the present example describes tabulator 305, cache 315, and policy table 310 being used for tabulating and storing of ERs, other embodiments may use such components and/or multiple and different data structures, e.g., EEs.
In some embodiments, an ER producer pointer (e.g., ER.Producer) 415a may be configured to point to the ER location (within the EJ) where MDES engine 300 stores new entropy data (e.g., EEs). An ER consumer pointer (ER.Consumer) 415b, on the other hand, may be configured to point to the ER location where backend processing entity, such as software, firmware, or another hardware, reads the entropy data that was previously sampled. The relation between ER.Producer and ER.Consumer may determine a state of the EJ under consideration. For instance, it may determine whether the EJ 335 is in an ‘EMPTY’ state (e.g., no ERs are present in the EJ), in ‘ACTIVE’ state (e.g., entropy data is currently being used by a process or program), or in ‘FULL’ state (e.g., no further ERs can be added).
In some embodiments of the invention, entropy records may be obtained and stored in EJs that correspond to spatial (EJ 335a) or temporal (EJ 335b) sampling schemes, thereby offering a multidimensional perspective on entropy data collection. Spatial sampling is carried out over a particular value space (e.g., a given range of memory addresses). Precision associated with spatial sampling procedures may be adjusted according to the size of the value space associated with it (e.g., large value space corresponds to low precision, small such space to high precision). Temporal Sampling may collect entropy events in a given time domain, such as by their occurrence order. Similarly to spatial sampling, temporal sampling precision may be adjusted according to the length of the time domain in which entropy elements are collected. Both sampling schemes collect or receive entropy data (e.g. memory transaction events or data related to events) into an accumulator array containing # (e.g., space size/quanta) elements, where ‘quanta’ signifies the size of an EE in the sampling procedure. EE size settings may be adjusted or optimized to represent a “sweet spot” between high visibility and informativeness and desirable system performance (e.g., by collecting certain optimal amounts of entropy data within each EE).
In some embodiments of the invention, EEs may be stored in ERs (and ERs may be stored in EJs, which may be stored in entropy stores, etc.) in a particular memory resource available to the system according to a collection of software-defined policies—composed, e.g., by metadata related to memory transaction events stored in policy table 310 in MDES engine 300. Such policies may be triggered by software-defined conditional rules and enable limiting, via policy actions, the sampling process to specific types of entropy data and memory events. In possible embodiments, conditional rules include policy keys that define the set of event properties and metadata required for triggering the sampling of entropy data for a particular event or transaction. In such manner, an optimal number of, e.g., EEs and ERs may be collected such that a desirable amount of system overhead is dedicated to the sampling process; that is, entropy sampling precision may be adjusted at multiple levels based on the number of EEs, ERs, EJs, etc. collected per memory-related event, and based on the size (e.g. quanta) of EEs, in order not to affect the system's performance Properties and metadata that may trigger software-defined policies and policy actions may or may not include entropy data as collected in, e.g., EEs, as well as additional data. Thus, triggering of said policies and policy actions may, for instance, depend on entropy data—which may include telemetry metadata such as: TransactorID tags that identify the initiators of the transaction (e.g., NumaID identifying the processor socket, CoreID identifying a particular processor core, VMid identifying a particular Virtual Machine, PID process identification, PASID identifying a process address space, IOMMUid, and the like). TransacteeID tags that identify the targets of the transaction (e.g., RemoteMemID identifying a remote memory store, DimmID memory component, etc.). Transaction ValueSets in the form of {type,Value}, such as {gVA (guest virtual address), Value}, {hPA (host physical address), Value}, {TransactionSize, #Bytes}, and so forth.
As discussed herein regarding a system monitoring unit, OS 115 may be configured to use entropy data collected and organized by the MDES engine such that, e.g., if an host-virtual-address is requested for a memory transaction, and if that host-virtual-address is currently mapped to a host-physical-address associated with a hot spot, then OS 115 can map that host-virtual-address onto a different host-physical-address via, for example, modifying translation structures, leading to an appropriate translation by MMU 200 as known in the art.
Reference is now made to
In the example illustrated in
Given an entropy sampling scheme or type (e.g., spatial or temporal), a sampling method, or rate, can be set to, for example: Always (continuous, e.g. repeatedly); None (sampling disabled); RS (Random Sampling) with sampling probability set by RS.Prob; or PS (Periodic Sampling) according to intervals in PS.Timer within W, where W defines the sampling validity window (e.g., in clock ticks) and where an event that occurred within the window W (e.g., during the last W ticks), is considered valid for the current round of periodic sampling. In order to activate periodic sampling for a given policy key, the key must be associated with a particular PS.Timer. Multiple PS.Timers may be triggered at the same moment. In such case, policy keys associated with these PS.Timers may be processed concurrently. Other sampling methods may be used in other embodiments of the invention.
As noted above, in the example illustrated in
In the description and claims of the present application, each of the verbs, “comprise”, “include” and “have”, and conjugates thereof, are used to indicate that the object or objects of the verb are not necessarily a complete listing of components, elements or parts of the subject or subjects of the verb. Unless otherwise stated, adjectives such as “substantially” and “about” modifying a condition or relationship characteristic of a feature or features of an embodiment of the disclosure, are understood to mean that the condition or characteristic is defined to within tolerances that are acceptable for operation of an embodiment as described. In addition, the word “or” is considered to be the inclusive “or” rather than the exclusive or, and indicates at least one of, or any combination of items it conjoins.
One skilled in the art will realize the invention may be embodied in other specific forms without departing from the spirit or essential characteristics thereof. The foregoing embodiments are therefore to be considered in all respects illustrative rather than limiting of the invention described herein. Scope of the invention is thus indicated by the appended claims, rather than by the foregoing description, and all changes that come within the meaning and range of equivalency of the claims are therefore intended to be embraced therein.
In detailed description, some features or elements described with respect to one embodiment or flowchart can be combined with or used with features or elements described with respect to other embodiments.
Although embodiments of the invention are not limited in this regard, discussions utilizing terms such as, for example, “processing,” “computing,” “calculating,” “determining,” “establishing”, “analyzing”, “checking”, or the like, can refer to operation(s) and/or process(es) of a computer, a computing platform, a computing system, or other electronic computing device, that manipulates and/or transforms data represented as physical (e.g., electronic) quantities within the computer's registers and/or memories into other data similarly represented as physical quantities within the computer's registers and/or memories or other information non-transitory storage medium that can store instructions to perform operations and/or processes.
The term set when used herein can include one or more items. Unless explicitly stated, the method embodiments described herein are not constrained to a particular order or sequence. Additionally, some of the described method embodiments or elements thereof can occur or be performed simultaneously, at the same point in time, or concurrently.
Descriptions of embodiments of the invention in the present application are provided by way of example and are not intended to limit the scope of the invention. The described embodiments comprise different features, not all of which are required in all embodiments. Embodiments comprising different combinations of features noted in the described embodiments, will occur to a person having ordinary skill in the art. Some elements described with respect to one embodiment may be combined with features or elements described with respect to other embodiments. The scope of the invention is limited only by the claims.
While certain features of the invention have been illustrated and described herein, many modifications, substitutions, changes, and equivalents may occur to those skilled in the art. It is, therefore, to be understood that the appended claims are intended to cover all such modifications and changes as fall within the true spirit of the invention.
The present application claims benefit from prior provisional application 63/120,267 filed on Dec. 2, 2020, entitled ADJUSTABLE-PRECISION MULTIDIMENSIONAL MEMORY ENTROPY SAMPLING, incorporated by reference herein in its entirety.
Number | Date | Country | |
---|---|---|---|
63120267 | Dec 2020 | US |