Memory management by controlling data processing tasks

The data analysis application optimizes memory usage by generating factory objects or queuing tasks when memory is insufficient, addressing inefficiencies in conventional platforms and enhancing processing efficiency.

JP7766697B2Active Publication Date: 2025-11-10ALTERYX INC
View PDF 7 Cites 0 Cited by

Patent Information

Application Number
JP2023547761
Authority / Receiving Office
JP · JP
Patent Type
Patents
Current Assignee / Owner
Priority Date
2021-02-09
Filing Date
2022-02-08
Publication Date
2025-11-10
Estimated Expiration
2042-02-08

AI Technical Summary

Technical Problem

Conventional data analysis platforms inefficiently manage memory usage, leading to performance bottlenecks and reduced data processing efficiency due to locking memory blocks for tasks that require more space than available, even when sufficient memory is not needed for other processes.

Method used

Implementing a data analysis application that generates factory objects or queues tasks when memory is insufficient, allowing memory blocks to be used for other tasks until sufficient memory becomes available, optimizing memory usage and improving processing efficiency.

Benefits of technology

Enhances memory management by avoiding excessive usage and optimizing memory allocation, thereby improving data processing efficiency and reducing performance bottlenecks.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 0007766697000001
    Figure 0007766697000001
  • Figure 0007766697000002
    Figure 0007766697000002
  • Figure 0007766697000003
    Figure 0007766697000003
Patent Text Reader

Abstract

The module manages memory usage in the computer by scheduling data processing tasks. The module determines whether memory associated with the computer is available to execute the data processing task. In response to determining that memory is not available to execute the data processing task, the module creates a factory object for the data processing task. The factory object specifies instructions for generating the data processing task. After the factory object is created, the module receives a request to execute the data processing task. The module generates the data processing task using the factory object in response to the request and again determines whether memory is available to execute the data processing task. In response to determining that memory is now available to execute the data processing task, the module uses the memory to execute the data processing task.
Need to check novelty before this filing date? Find Prior Art

Description

[Technical Field]

[0001] The described embodiments relate generally to computer memory management, and more particularly to managing memory usage by controlling data processing tasks. [Background technology]

[0002] With the growth of data analytics platforms such as big data analytics, data processing has expanded to include tools for processing large amounts of data to extract information of business value. For example, small businesses may utilize third-party data analytics environments that use dedicated computing and human resources to collect, process, and analyze vast amounts of data from various data sources, such as external data providers, internal data sources (e.g., files on a local computer), big data stores, and cloud-based data (e.g., social media information). Processing such large datasets used in data analytics in a way that extracts useful quantitative and qualitative information typically requires complex software tools implemented on powerful computing devices.

[0003] Additionally, multiple data analysis processes can be run simultaneously to efficiently access, process, and analyze large data sets from different data sources. In such a multiprocessing environment, it is essential for the data analysis platform to effectively share available memory among processes. However, currently available data analysis platforms face the challenge of running multiple data analysis processes. For example, conventional data analysis platforms typically limit free memory space for a process, preventing that free memory space from being used by other processes even when the free space is not sufficient to actually run the process, resulting in inefficient memory usage. This can also lead to excessive memory usage, especially when numerous processes are running simultaneously. This can result in performance bottlenecks that hinder the functionality of the data analysis platform, slow data processing, and reduce the quality of information extracted from the data. Summary of the Invention

[0004] The above and other problems are addressed by a method, computer system, and computer-readable storage medium for managing memory in a computer. An embodiment of the method includes determining, at a first time, whether memory associated with the computer is available to execute a data processing task. The method further includes generating a factory object for the data processing task in response to determining, at the first time, that the memory is not available to execute the data processing task. The factory object specifies instructions for generating the data processing task. The method further includes receiving a request to execute the data processing task after generating the factory object. The method further includes generating the data processing task by using the factory object in response to the request. The method further includes determining, at a second time, after the first time, that the memory is available to execute the data processing task. The method also includes executing the data processing task by using the memory.

[0005] One embodiment of a computer system includes a computer processor for executing computer program instructions. The system also includes a non-transitory computer-readable storage medium storing computer program instructions that, when executed, cause the computer processor to perform operations. The operations include determining, at a first time, whether memory associated with the computer is available to perform a data processing task. The operations further include generating a factory object for the data processing task in response to determining, at the first time, that the memory is not available to perform the data processing task. The factory object specifies instructions for generating the data processing task. The operations further include receiving a request to perform the data processing task after generating the factory object. The method further includes generating the data processing task by using the factory object in response to the request. The method further includes determining, at a second time after the first time, that the memory is available to perform the data processing task. The operations also include performing the data processing task by using the memory.

[0006] An embodiment of a non-transitory computer-readable memory stores executable computer program instructions. The instructions are executable to perform operations for determining, at a first time, whether memory associated with the computer is available to execute a data processing task. The operations further include generating a factory object for the data processing task in response to determining, at the first time, that the memory is not available to execute the data processing task. The factory object specifies instructions for generating the data processing task. The operations further include receiving a request to execute the data processing task after generating the factory object. The method further includes generating the data processing task by using the factory object in response to the request. The method further includes determining, at a second time after the first time, that the memory is available to execute the data processing task. The operations also include executing the data processing task by using the memory. [Brief explanation of the drawings]

[0007] [Figure 1] FIG. 1 is a block diagram illustrating a data analysis environment including a data analysis system, according to one embodiment. [Figure 2] FIG. 1 is a block diagram illustrating a workflow created using a data analysis system for processing data, according to one embodiment. [Figure 3] FIG. 1 is a block diagram illustrating a data analysis application, according to one embodiment. [Figure 4] FIG. 1 is a schematic diagram illustrating a process for managing memory usage through control of data processing tasks, according to one embodiment. [Figure 5] 1 is a flowchart illustrating a process for managing memory usage through control of data processing tasks, according to one embodiment. [Figure 6] FIG. 2 is a high-level block diagram illustrating a functional view of a typical computer system for use as the data analysis system of FIG. 1, according to one embodiment.

[0008] The drawings depict various embodiments for purposes of illustration only. Those skilled in the art will readily recognize from the following description that alternative embodiments of the structures and methods illustrated herein may be utilized without departing from the principles of the present invention as described herein. Like reference symbols and designations in the various drawings refer to like elements. DETAILED DESCRIPTION OF THE INVENTION

[0009] 1 is a block diagram illustrating a data analysis environment 100 including a data analysis system 110 according to one embodiment. The environment 100 further includes multiple data sources 120 connected to the data analysis system 110 via a network 130. Although the illustrated environment 100 includes only one data analysis system 110 coupled to multiple data sources 120, embodiments can have multiple data analysis systems and a single data source.

[0010] The data analysis system 110 is a computer-based system used to process large amounts of data. The data is collected, gathered, or accessed from multiple data sources 120 via a network 130. The data analysis system 110 can implement scalable software tools and hardware resources used for data processing tasks from a wide variety of data sources. A data processing task (also referred to as a task) is a computing operation for processing data. Data processing tasks include, for example, accessing data, preparing data, blending data, packaging data, analyzing data, other types of operations on data, or some combination thereof. For example, the data analysis system 110 supports the execution of data-intensive processes and workflows, such as the workflows described below in conjunction with FIG. 2. The data analysis system 110 can be a computing device used to implement data analysis functions, including memory management techniques described herein. The data analysis system 110 can execute multiple tasks in parallel. When it has available computer resources (e.g., memory), it can select a task to execute from multiple tasks ready to execute.

[0011] 1 , data analysis system 110 includes memory 140 and data analysis application 150. Memory 140 stores data used in data analysis operations and provides access to data storage. In some embodiments, memory 140 includes random access memory (RAM), a hard disk drive (HDD), a solid state drive (SSD), other forms of computer memory, or some combination thereof. Use of memory 140 is managed by data analysis application 150.

[0012] Data analysis application 150 is a software application that performs data processing tasks in a manner that controls the use of memory 140. For example, after receiving a data processing task, data analysis application 150 does not directly lock blocks of memory 140 to store data for the data processing task, but rather first determines whether memory 140 is available for the data processing task, e.g., whether unreserved blocks of memory 140 are sufficient to store the data for the task. In response to determining that memory 140 is available, data analysis application 150 then locks memory blocks and performs the data processing task.

[0013] However, in situations where data analysis application 150 determines that an unreserved block of memory 140 is insufficient to execute the task, it suspends execution of the data processing task. In some embodiments, data analysis application 150 generates a factory object that specifies instructions for generating a data processing task so that the next time the data analysis application 150 attempts to execute the task, it can later generate the task from the factory object. In some other embodiments, data analysis application 150 queues the data processing task. The queue contains, for example, tasks that are not ready to execute because they lack sufficient memory (and / or other types of required computer resources), but can execute when memory becomes available. Given that memory blocks locked for other tasks can be released as those tasks complete, memory 140 may later have enough free space for the task. Data analysis application 150 can later check whether memory becomes available for the data processing task and, when memory becomes available, retrieve the data processing task by using the factory object or from the queue and execute the data processing task.

[0014] By using factory objects or queues, data analysis application 150 does not need to allocate memory blocks for inputting or reading data for a task before executing the task. In this way, memory blocks are not locked until there is enough available memory to execute the task. Data analysis application 150 can then use the memory blocks that have been de-locked to execute other data processing tasks. For example, in a situation where memory only has 400 MB of free space but 600 MB is required to execute a task, conventional data analysis platforms typically lock the 400 MB memory block for the task anyway and wait until another 200 MB is available to execute the task. The 400 MB is "wasted" while waiting. Unlike conventional data analysis platforms, data analysis application 150 does not lock the 400 MB. Rather, it uses the 400 MB to execute other data processing tasks that require no more than 400 MB while waiting for sufficient memory to become available for the task. Therefore, the memory management techniques implemented by data analysis application 150 optimize memory 140 usage and improve data processing efficiency.

[0015] The memory management techniques implemented by data analysis application 150 also avoid situations where multiple data processing tasks lock memory simultaneously, thus preventing excessive usage of memory 140. Data analysis application 150 also further improves memory usage by storing factory objects in memory 140, as opposed to the tasks themselves, because factory objects may have a smaller memory footprint than the memory footprint of the tasks. Thus, data analysis application 150 offers advantageous memory management techniques over traditional data analysis platforms.

[0016] In some embodiments, memory 140 includes primary memory 140, which provides relatively fast access to a relatively small data storage area, and secondary memory 150, which provides relatively slower access to a relatively large data storage area. Data analysis application 150 manages the use of the primary and secondary memory to provide efficient data processing.

[0017] In some cases, data analysis application 150 provides software that supports networked or cloud-based access to data analysis tools and macros for multiple end users. As an example, data analysis application 150 allows users to share, view, and consume analyses in a manner similar to a mobile application store or other cloud-based service. Analytical data, macros, and workflows can be packaged and executed as smaller, customizable analytical applications (i.e., apps) that can be accessed by other users of data analysis system 110, for example. In some cases, access to published analytical apps can be managed by data analysis system 110, i.e., granting or revoking access, thereby providing access control and security features. Data analysis application 150 can perform functions associated with analytical apps, such as creating, deploying, publishing, iterating, and updating.

[0018] Additionally, data analysis application 150 can support functions performed at various stages involved in data analysis, such as functions to access, prepare, blend, analyze, and output analysis results. In some cases, data analysis application 150 can access various data sources, for example, obtain raw data in a stream of data. The data stream collected by data analysis application 150 can include multiple records of raw data, where the raw data is in different formats and structures. After receiving at least one data stream, data analysis application 150 can perform operations that enable the records of the data stream to be used as input for data analysis operations. Additionally, analytical functions involving statistical, qualitative, or quantitative processing of records, such as predictive analysis (e.g., predictive modeling, clustering, data exploration), can be implemented by data analysis application 150.

[0019] The data analysis application 150 also supports software tools to design and execute repeatable workflows through a visual graphical user interface (GUI). As an example, the GUI associated with the data analysis application 150 provides a drag-and-drop workflow environment for data blending, data processing, and advanced data analysis. Furthermore, a workflow can include a series of data processing tools that perform specific processing operations or data analysis functions. Each tool that is part of a workflow performs a data-related function specific to the tool. As an example, a workflow can include tools that implement various data analysis functions, including one or more of input / output, preparation, joining, prediction, spatial, exploration, and analysis and transformation operations. Details of a workflow are described in relation to FIG. 2.

[0020] As described above, the data source 120 provides electronic data to the data analysis system 110. The data source 120 may be a computer, a database, or a cloud storage system. The data source 120 may also be a computer system that can retrieve data from another source. The data source 120 may be remote from the data analysis system 110 and provide data via the network 130. Furthermore, some or all of the data sources 120 may be directly coupled to the data analysis system and provide data without passing the data over the network 130. The data provided by the data source 120 is typically organized into data records, each of which includes one or more values. For example, a data record provided by a data source may include a series of comma-separated values. The data describes information related to an enterprise using the data analysis system. For example, the data from the data source 120 may describe content accessible on a website and / or computer-based interactions with a social media application (e.g., click tracking data).

[0021] Network 130 represents a communication path between data analysis system 110 and data sources 120. In one embodiment, network 130 is the Internet and uses standard communication technologies and / or protocols. Data exchanged over network 130 can be represented using technologies and / or formats including HyperText Markup Language (HTML), Extensible Markup Language (XML), etc. In another embodiment, entities can use custom and / or proprietary data communication technologies instead of or in addition to the above technologies.

[0022] FIG. 2 is a block diagram illustrating a workflow 200 created using the data analysis system 110 to process data, according to one embodiment. In one embodiment, the workflow 200 is created using a visual workflow environment supported by the GUI of the data analysis system 110. The visual workflow environment enables a set of drag-and-drop tools that eliminate the need to provide software code for designing the workflow and the need to identify complex mathematical formulas implemented by the workflow. In another embodiment, the workflow 200 is created and described in a document, such as an Extensible Markup Language (XML) document. The workflow 200 is executed by a computing device of the data analysis system 110. However, in other embodiments, the workflow 200 is deployed on a separate computing device that may be communicatively connected to the data analysis system 110 via a network (e.g., network 130).

[0023] A workflow can include a series of tools that perform specific processing operations or data analysis functions. As a common example, the tools in a workflow can perform one or more of the following data analysis functions: input / output, preparation, joining, prediction, spatial, investigation, and analysis and transformation operations. Implementing a workflow involves defining, executing, and automating a data analysis process, where data is passed to each tool in the workflow, and each tool performs its own processing operation on the received data. Records containing aggregated groups of individual records can be passed through the tools in the workflow, allowing the individual processing operations to operate more efficiently on the data. Such data aggregation techniques can speed up the development and execution of workflows, even when processing large amounts of data. A workflow can define or otherwise structure a repeatable sequence of operations and specify the order in which the specified tools operate. In some cases, the tools included in a workflow execute in a linear order. In other cases, multiple tools execute in parallel.

[0024] As shown, the workflow 200 of FIG. 2 includes input / output tools, shown as input tools 205 and 206, and browse tool 230. The input tools 205 and 206 function to access records from particular data sources 120. The input tools 205 and 206 bring the accessed records into the workflow and provide the records to subsequent tools in the workflow 200. In this example, the input tool 205 provides the accessed records to the filter tool 210, and the input tool 206 provides the accessed records to the select tool 211. The browse tool 230 is located at the end of the workflow 200 and receives output resulting from the execution of each of the upstream tools in the workflow 200. Although the browse tool 230 is located at the end of the workflow 200 in this example, the browse tool 230 may be added at any point in the workflow to review and verify results from the execution of upstream tools in the workflow.

[0025] Continuing with the example of FIG. 2, workflow 200 includes preparation tools shown as filter tool 210, select tool 211, formula tool 215, and sample tool 212. Filter tool 210 queries records based on an expression and separates the data into two streams: a true stream containing records that satisfy the expression and a false stream containing records that do not satisfy the expression. Select tool 211 can be used to select, deselect, sort, and rename fields, change field type or size, and assign descriptions. Formula tool 215 creates or updates fields using one or more expressions and performs a wide variety of calculations and / or operations. Sample tool 212 limits the received stream of records to a number, percentage, or random set of records.

[0026] The workflow 200 also includes a join tool 220 that blends multiple data sources. Specifically, the join tool 220 combines two input data streams based on common fields (or record positions). The workflow 200 of FIG. 2 is shown to include a summarize tool 225, which is an analysis and transformation tool that can restructure and reshape data into a format used for further analysis. The summarize tool 225 can perform data summarization by grouping, summing, counting, spatial operations, and string concatenation. In one embodiment, the output generated by the summarize tool 225 includes the results of calculations.

[0027] In some embodiments, execution of workflow 200 involves the Input tool 205 passing records one at a time through the Filter tool 210 and Formula tool 215 until all records have been processed and reach the Combine tool 220. The Input tool 206 then begins passing records one at a time through the Select tool 211 and Sample tool 212 until the records are passed to the same Combine tool 220. Some individual tools in workflow 200 may have the ability to implement their own parallel operations, such as beginning to read a block of data while processing the last block of data, or breaking a computationally intensive operation, such as a Sort tool, into multiple parts. However, in some existing workflow technologies, each record from a set of records is processed individually, one record at a time, by each tool in the workflow in a pipelined manner until it reaches a tool in the workflow that requires multiple records to perform its processing operation (e.g., a Sort tool, a Combine tool, a Summarize tool, etc.).

[0028] 3 is a block diagram illustrating a data analysis application 300 according to one embodiment. The data analysis application 300 provides efficient data processing and memory management according to a specified workflow. The data analysis application 300 is an embodiment of the data analysis application 150 of FIG. 1. In the embodiment of FIG. 3, the data analysis application 300 includes a data receiving module 310, a tools module 320, a memory allocation module 330, a scheduling module 340, and Data Output Module 350. Those skilled in the art will recognize that other embodiments may have different and / or other components than those described herein, and that functionality may be distributed among the components in different ways.

[0029] The data reception module 310 receives data records from a data source, e.g., data source 120, and provides the data records to other modules in the data analysis application 300. In one embodiment, the data reception module 310 functions as an interface between tools in the data analysis application, such as the input tool 206 shown in Figure 2. In another embodiment, the data reception module 310 is not present, and the functions of the data reception module 310 are performed by the tools.

[0030] The tool module 320 provides a set of data processing tools (also referred to as tools) that perform specific data processing tasks within a workflow. The tools operate on data records received from a data source by the data reception module 310. In some embodiments, the tool module 320 provides tools included in the workflow 200 described in conjunction with FIG. 2. One or more tools in the tool module 320 may execute in parallel while processing the data records of the workflow. The tools execute as multiple separate threads, each thread running on a processor. 602 For example, embodiments of the join tool may distribute the tasks associated with the join operation across multiple threads to run on separate cores of the processor. 602The tool leverages the parallel processing capabilities of the tool. The tool creates tasks to perform its operations. A tool operation includes one or more tasks. Each task is assigned to a thread of the tool for execution by the thread. In some embodiments, the tool requests the memory required for the operation before creating a task for the operation. The requested memory can be allocated to the tool by the memory allocation module 330. The allocated memory can be shared by the threads to execute the tasks.

[0031] A thread to which a task is assigned interacts with other modules of data analysis application 150 to perform the task. In some embodiments, the thread sends a memory availability request to memory allocation module 330 to inquire whether there is enough memory available to perform the task. In one embodiment, the memory availability request specifies the amount of memory needed to perform the task ("required memory"). The amount of required memory may be determined by the thread or may be received by the thread when the task is assigned to the thread.

[0032] The thread receives a memory availability response from the memory allocation module 330. The memory availability response includes information indicating whether there is sufficient memory available for the task. In some embodiments, the thread determines whether memory is available to execute the task based on the memory availability response. For example, the memory availability response specifies the amount of available memory. In one embodiment, the thread compares the amount of available memory in the memory availability response to the amount of required memory. The thread determines that sufficient memory is available if the comparison indicates that the amount of available memory is not less than the amount of required memory. Otherwise, the thread determines that memory is not available for the task.

[0033] In another embodiment, even after the thread determines that the amount of available memory is less than the amount of required memory, the thread determines the amount of memory required to execute a reduced scope of the task and the amount of available memory compared to the amount of memory required to execute the reduced scope of the task. If the comparison indicates that the amount of memory required to execute the reduced scope of the task is less than the amount of available memory, the thread determines that sufficient memory is available.

[0034] In situations where sufficient memory is available, the thread sends a memory allocation request to the memory allocation module 330, requesting that the memory allocation module 330 allocate the required memory to the task. The thread also sends a scheduling request to the scheduling module 340 to schedule its performance of the task. The thread then executes the task as scheduled with the allocated memory and requests the memory allocation module 330 to release the allocated memory after the task is completed (e.g., by sending a memory release request to the memory allocation module 330).

[0035] In situations where there is not enough memory available, the thread creates a factory object for the task and sends the factory object to the scheduling module. 340 Alternatively, the thread places the task in a queue of data processing tasks maintained by the scheduling module 340. The thread is then free to perform other tasks.

[0036] Once the time window has elapsed, the thread (which may be the same thread or a different thread) receives a request, for example, from the scheduling module 340, to execute the task. In response to the request, the thread generates a task from a task factory and attempts to execute the task for a second time. The thread sends another memory availability request to the memory allocation module 330 to determine whether memory is available for the task for the second time. Memory used for other data processing tasks may be released when those tasks are completed during the time window, so memory may become available during the time window. If so, the thread continues the process of executing the task as described above: requesting memory allocation, requesting task scheduling, executing the task, and releasing the memory after the task is finished. However, if memory is still not available, the thread requests the scheduling module 340 to hold the task in a queue.

[0037] The memory allocation module 330 manages memory usage by the tool module 320. The memory allocation module 330 receives memory availability requests from the tool module 320 within the data analysis application 150. The memory availability requests may be received from the tools of the tool module 320, for example, while the tools are processing a workflow. In response to such memory availability requests, the memory allocation module 330 determines the amount of memory that is available to reserve for the corresponding task. In some embodiments, available memory is memory that is not reserved for other data processing tasks. The memory allocation module 330 compares the amount of required memory with the amount of available memory. After determining that the amount of required memory is greater than the amount of available memory, the memory allocation module 330 generates a memory availability response indicating that no memory is available for the task. On the other hand, after determining that the amount of required memory is not greater than the amount of available memory, the memory allocation module 330 generates a memory availability response indicating that memory is available for the task. The memory allocation module 330 sends the memory availability response to the tool module 320.

[0038] The memory allocation module 330 also allocates and frees memory for storing data records being processed by tools in the tool module 320 as the tools implement workflows. In some embodiments, the memory allocation module 330 receives memory allocation requests from tools in the tool module 320 to reserve blocks of memory. In response to such memory allocation requests, the memory allocation module allocates a logically contiguous block of memory and returns a handle to the memory block to the requesting tool, such that the block is locked by the requesting tool and unavailable to other tools. In some embodiments, the memory allocation request specifies a block size, and the memory allocation module 330 allocates the block based on the block size.

[0039] The memory allocation module 330 also receives memory freeing requests that specify handles to blocks of memory. The memory allocation module 330 frees such memory blocks so that the blocks are available for reallocation in subsequent requests. The memory allocation module 330 maintains a list of free blocks that are available for reallocation.

[0040] In one embodiment, memory allocation module 330 is dedicated to data analysis application 150. Memory allocation module 330 may interact separately with memory management functions provided by data analysis system 110. For example, memory allocation module 330 may interact with a different memory management system provided by an operating system running on data analysis system 110. Memory allocation module 330 abstracts the memory operations of data analysis application 150 away from the memory management system of the operating system.

[0041] The scheduling module 340 interacts with the tool module 320 to schedule the performance of data processing tasks by the tool module 320. In one example, a tool in the tool module 320 creates a task and communicates with the scheduling module 340 to schedule the performance of the task. The tool can schedule the task directly with the scheduling module 340 and / or register the task as a factory object with the scheduling module 340 for the scheduling module 340 to query for the task. In another example, the scheduling module 340 monitors the tool's threads and detects a free thread for executing a task (a "free thread"). A free thread may be an idle thread that is not executing a data processing task and is therefore available to execute a new task. In response to detecting a free thread, the scheduling module 340 queries for the task.

[0042] In some embodiments, the scheduling module 340 queries for tasks by requesting a registered factory object to generate the task. The scheduling module 340 may receive a response from the factory object that it cannot generate a task that is ready to run (i.e., there is enough memory to execute the task) or that it can generate a ready task. In some other embodiments, the scheduling module 340 queries for tasks by checking a queue to determine whether any tasks in the queue are ready to run. In response to a task (either from the factory object or from the queue) being ready to run, the scheduling module 340 assigns the task to a free thread and schedules the execution of the task by the thread. The scheduling module 340 may also schedule future tasks using the thread.

[0043] Data output module 350 outputs the results of the processing performed by data analysis application 150. That is, data output module 350 receives processed data records produced by execution of workflow 200 and makes the data records available to other systems and / or human reviewers. For example, data output module 350 may provide a GUI that enables a human reviewer associated with an enterprise to review the output of workflow 200 resulting from the processing of data records associated with the enterprise.

[0044] Figure 4 is a schematic diagram illustrating a process for managing memory usage by scheduling data processing tasks, according to one embodiment. The process is performed by memory allocation module 330, tools module 320, and scheduling module 340. Figure 4 illustrates the various actions of the three modules in the course of executing a data processing task.

[0045] The process begins with the scheduling module 340 inquiring about a task, for example, by requesting the tool module 320 to generate the task. In response to the request, the tool module 320 generates the task. The tool module 320 also requests memory using the memory allocation module 330, for example, by sending a memory availability request to the memory allocation module 330. The tool module 320 may determine the amount of memory needed to execute the task and include the amount in the memory availability request.

[0046] The memory allocation module 330 sends a response to the tool module 320 indicating that memory is not available to execute the task. The response may be generated based on a determination that the amount of memory unlocked for executing other tasks is less than the amount of memory required to execute this task. After receiving the response from the memory allocation module 330, the tool module 320 decides not to execute the task. Rather, it queues the task or registers a factory object with the scheduling module 340 so that the task can be generated from the factory object for later execution. The scheduling module 340 attempts to execute the task when the required memory becomes available.

[0047] After a certain period of time has elapsed, the scheduling module 340 queries the factory object or queue for the task. For example, the scheduling module 340 determines that a thread is free to execute the task and, in response to the determination, queries the factory object or queue. After the task is created from the factory object or retrieved from the queue, the scheduling module 340 assigns the task to a free thread. After the tool module 320 receives the request, it creates the task from the factory object and again requests memory with the memory allocation module 330. This time, the response from the memory allocation module 330 is again that memory is not available. Again, the tool module 320 determines not to execute the task. In embodiments where the task is retrieved from a queue, the task is returned to the queue.

[0048] After further time has passed, the scheduling module 340 again identifies a free thread requesting the task (which may be the same or a different thread than the previous free thread). As before, the scheduling module 340 assigns the task to the free thread requesting memory (either from a factory object or a queue) with the memory allocation module 330. This time, the tool module 320 receives a response from the memory allocation module 330 that memory is available to execute the task. Based on the response, the tool module 320 requests the memory allocation module 330 to lock a block of memory for the task and then requests the scheduling module 340 to schedule the task. 340 In response to a request from a tool module, the memory allocation module 330 reserves a memory block for the task so that the memory block is locked and cannot be used to execute other tasks, and sends a request to the scheduling module 340schedules the execution of tasks and removes tasks from the queue. The tool module 320 executes the tasks as scheduled in the locked memory blocks and releases the locked memory blocks after completing the tasks.

[0049] 5 is a flowchart illustrating a process for managing memory usage by scheduling data processing tasks, according to one embodiment. In some embodiments, the method is performed by data analysis application 150, although in other embodiments, some or all of the operations in the method may be performed by other entities. In some embodiments, the operations in the flowchart are performed in a different order and may include different and / or additional steps.

[0050] The data analysis application 150 determines, at a first time, whether memory associated with the computer is available to perform the data processing task. In some embodiments, the data analysis application 150 determines the amount of memory required to perform the data processing task. The data analysis application 150 also determines the amount of memory not reserved for other data processing tasks. The data analysis application 150 then determines whether the amount of memory required to perform the data processing task is greater than the amount of memory not reserved for other data processing tasks. In response to determining that the amount of memory required to perform the data processing task is greater than the amount of memory not reserved for other data processing tasks, the data analysis application 150 determines that memory is not available to perform the data processing task.

[0051] In some embodiments, in response to determining that memory is not available to perform the data processing task at a first time, data analysis application 150 places the data processing task in a data processing task queue, and data analysis application 150 can later retrieve the task from the queue and perform the task after memory becomes available for the task.

[0052] In response to determining that memory is not available to execute the data processing task at a first time, the data analysis application 150 generates a factory object for the data processing task. The factory object specifies instructions to generate the data processing task. In some embodiments, the factory object includes program instructions that, when executed, cause a computer processor to generate the data processing task. The factory object is stored in memory. The factory object may have a memory footprint that is smaller than the memory footprint of the data processing task.

[0053] After creating the factory object, data analysis application 150 receives a request to perform a data processing task. In some embodiments, data analysis application 150 receives the request at a first time after a predetermined time has elapsed since determining that memory is not available. In some other embodiments, data analysis application 150 receives the request in response to detecting that data analysis application 150 has tools available to perform the task.

[0054] In response to the request, the data analysis application 150 generates a data processing task by using the factory object, for example, by executing program instructions in the factory object. The data analysis application 150 determines that memory is available to execute the data processing task at a second time after the first time. In some embodiments, the data analysis application 150 determines the amount of memory required to execute the data processing task and the amount of memory not reserved for other data processing tasks. The data analysis application 150 then determines whether the amount of memory required to execute the data processing task is greater than the amount of memory not reserved for other data processing tasks. In response to determining that the amount of memory required to execute the data processing task is greater than the amount of memory not reserved for other data processing tasks, the data analysis application 150 determines the amount of memory required to execute a reduced scope of the data processing task. The data analysis application 150 determines whether the amount of memory required to execute the reduced scope of the data processing task is less than or equal to the amount of memory not reserved for other data processing tasks. In response to determining that the amount of memory required to execute the reduced scope of the data processing task is less than or equal to the amount of memory not reserved for other data processing tasks, the data analysis application 150 determines that memory is available to execute the data processing task.

[0055] In some embodiments, at a second time, in response to determining that memory is available to perform the data processing task, the data analysis application 150 schedules the task and removes the task from the queue.

[0056] In some embodiments, the data analysis application 150 determines whether memory is available to perform the data processing task at a third time, the third time being after the first time and before the second time. In response to determining that memory is not available to perform the data processing task at the third time, the data analysis application 150 schedules the execution of the data processing task by scheduling the execution of the data processing task. 340 to return the data processing task to the queue.

[0057] The data analysis application 150 uses memory to perform data processing tasks, and releases the memory after the data analysis application 150 completes the task.

[0058] FIG. 6 is a high-level block diagram illustrating a functional view of an exemplary computer system 600 for use as the machine learning server 110 of FIG. 1, according to one embodiment.

[0059] The illustrated computer system includes at least one processor 602 coupled to a chipset 604. The processor 602 may include multiple processor cores on the same die. The chipset 604 includes a memory controller hub 620 and an input / output (I / O) controller hub 622. The memory 606 and the graphics adapter 612 are coupled to the memory controller hub 620, and the display 618 is coupled to the graphics adapter 612. The storage device 608, the keyboard 610, the pointing device 614, and the network adapter 616 may be coupled to the I / O controller hub 622. In some alternative embodiments, the computer system 600 may have additional, fewer, or different components, and the components may be combined differently. For example, an embodiment of the computer system 600 may lack a display and / or a keyboard. Additionally, the computer system 600 may be instantiated as a rack-mounted blade server or as a cloud server instance in some embodiments.

[0060] The memory 606 holds instructions and data used by the processor 602. In some embodiments, the memory 606 is a random access memory. The storage device 608 is a non-transitory computer-readable storage medium. The storage device 608 may be an HDD, an SSD, or another type of non-transitory computer-readable storage medium. Data processed and analyzed by the machine learning server 110 may be stored in the memory 606 and / or the storage device 608.

[0061] Pointing device 614 may be a mouse, trackball, or other type of pointing device and is used in combination with keyboard 610 to input data into computer system 600. Graphics adapter 612 displays images and other information on display 618. In some embodiments, display 618 includes touch screen capabilities for receiving user inputs and selections. Network adapter 616 couples computer system 600 to network 160.

[0062] The computer system 600 is adapted to execute computer modules to provide the functionality described herein. As used herein, the term "module" refers to computer program instructions and other logic for providing a particular function. A module can be implemented in hardware, firmware, and / or software. A module can include one or more processes and / or can be provided by only a portion of a process. Modules are typically stored in the storage device 608, loaded into the memory 606, and executed by the processor 602.

[0063] The particular naming of components, term capitalization, attributes, data structures, or other programming or structural aspects are not required or important, and mechanisms for implementing the described embodiments may have different names, formats, or protocols. Furthermore, the system may be implemented through a combination of hardware and software as described, or entirely with hardware elements. Also, the particular division of functionality among various system components described herein is merely exemplary and not required. Functions performed by a single system component may instead be performed by various components, and functions performed by various components may instead be performed by a single component.

[0064] Some portions of the above description are presented in terms of algorithms and symbolic representations of operations on information. These algorithmic descriptions and representations are the means used by those skilled in the data processing arts to most effectively convey the substance of their work to others skilled in the art. These operations, while described in functional or logical terms, will be understood to be implemented by computer programs. Further, without loss of generality, it is sometimes convenient to refer to the arrangement of these operations in terms of modules or functional names.

[0065] As is apparent from the above description, unless otherwise stated, throughout the description, descriptions utilizing terms such as "processing" or "computing" or "calculating" or "determining" or "displaying" relate to the actions and processes of a computer system or similar electronic computing device that manipulates and transforms data represented as physical (electronic) quantities in the memory or registers of the computer system, or other information storage, transmission, or display device.

[0066] Certain embodiments described herein include process steps and instructions that are described in the form of algorithms. It should be noted that the process steps and instructions of the embodiments may be implemented in software, firmware, or hardware, and when embodied in software, may be downloaded to reside on and operate from different platforms used by a real-time network operating system.

[0067] Finally, it should be noted that the language used in the specification has been chosen primarily for ease of reading and descriptive purposes, and not to delineate or limit the subject matter of the present invention. Accordingly, the disclosure of embodiments is intended to be illustrative, but not limiting.

Claims

1. 1. A computer-implemented method comprising: determining, at a first time, whether memory associated with the computer is available to perform a data processing task; in response to determining that the memory is not available to execute the data processing task at the first time, creating a factory object for the data processing task, the factory object specifying instructions for creating the data processing task; receiving a request to perform the data processing task after creating the factory object; In response to the request, generating the data processing task using the factory object; determining, at a second time after the first time, that the memory is available to perform the data processing task; using said memory to perform said data processing task; 10. A computer-implemented method comprising:

2. The computer-implemented method of claim 1 , wherein the factory object includes program instructions that, when executed, cause a computer processor to generate the data processing task.

3. The computer-implemented method of claim 1 , wherein the factory object has a memory footprint that is smaller than a memory footprint of the data processing task.

4. in response to determining that the memory is not available to execute the data processing task at the first time, placing the data processing task in a data processing task queue; 2. The computer-implemented method of claim 1, further comprising: in response to determining that the memory is available to execute the data processing task at the second time, scheduling performance of the data processing task and removing the data processing task from the data processing task queue.

5. determining whether the memory is available to perform the data processing task at a third time after the first time and before the second time; 5. The computer-implemented method of claim 4, further comprising: in response to determining that the memory is not available to execute the data processing task at the third time, returning the data processing task to the queue.

6. determining whether the memory is available to perform the data processing task at the first time; determining the amount of memory required to perform the data processing task; determining an amount of memory that is not reserved for other data processing tasks; determining whether the amount of memory required to execute the data processing task is greater than the amount of memory not reserved for other data processing tasks; determining that the memory is not available to execute the data processing task in response to determining that the amount of memory required to execute the data processing task is greater than the amount of memory not reserved for other data processing tasks; The computer-implemented method of claim 1 , comprising:

7. determining that the memory is available to perform the data processing task at the second time after creating the factory object, determining the amount of memory required to perform the data processing task; determining an amount of memory that is not reserved for other data processing tasks; determining whether the amount of memory required to execute the data processing task is greater than the amount of memory not reserved for other data processing tasks; determining an amount of memory required to execute a reduced scope of the data processing task in response to determining that the amount of memory required to execute the data processing task is greater than the amount of memory not reserved for other data processing tasks; determining that the amount of memory required to execute the reduced range of the data processing tasks is less than or equal to the amount of memory not reserved for other data processing tasks.

8. A computer system for managing memory in a computer, A computer processor; A non-transitory computer-readable storage medium storing executable computer program instructions that, when executed, cause the computer processor to: determining, at a first time, whether memory associated with the computer is available to perform a data processing task; in response to determining that the memory is not available for executing the data processing task at the first time, creating a factory object for the data processing task, the factory object specifying instructions for creating the data processing task; receiving a request to perform the data processing task after creating the factory object; In response to the request, generating the data processing task using the factory object; determining that the memory is available to perform the data processing task at a second time after the first time; using said memory to perform said data processing task; a non-transitory computer-readable storage medium for performing operations including: A computer system comprising:

9. 9. The computer system of claim 8, wherein the factory object includes program instructions that, when executed, cause a computer processor to generate the data processing task.

10. 9. The computer system of claim 8, wherein the factory object has a memory footprint that is smaller than a memory footprint of the data processing task.

11. The operations include, in response to determining that the memory is not available to execute the data processing task at the first time, placing the data processing task in a data processing task queue; 9. The computer system of claim 8, further comprising: in response to determining that the memory is available to execute the data processing task at the second time, scheduling performance of the data processing task and removing the data processing task from the data processing task queue.

12. the operations include determining whether the memory is available to perform the data processing task at a third time after the first time and before the second time; 12. The computer system of claim 11, further comprising: in response to determining that the memory is not available to execute the data processing task at the third time, returning the data processing task to the queue.

13. Determining whether the memory is available to perform the data processing task at the first time includes: determining an amount of memory required to perform said data processing task; determining an amount of memory that is not reserved for other data processing tasks; determining whether the amount of memory required to execute the data processing task is greater than the amount of memory not reserved for other data processing tasks; determining that the memory is not available to execute the data processing task in response to determining that the amount of memory required to execute the data processing task is greater than the amount of memory not reserved for other data processing tasks; and 9. The computer system of claim 8, comprising:

14. Determining that the memory is available to perform the data processing task at the second time after creating the factory object includes: determining an amount of memory required to perform said data processing task; determining an amount of memory that is not reserved for other data processing tasks; determining whether the amount of memory required to execute the data processing task is greater than the amount of memory not reserved for other data processing tasks; determining an amount of memory required to execute a reduced scope of the data processing task in response to determining that the amount of memory required to execute the data processing task is greater than the amount of memory not reserved for other data processing tasks; and determining that the amount of memory required to execute the reduced range of the data processing tasks is less than or equal to the amount of memory not reserved for other data processing tasks.

15. 1. A non-transitory computer-readable storage medium storing executable computer program instructions for managing memory in a computer, the computer program instructions including instructions that, when executed, cause a computer processor to perform operations, the operations including: determining, at a first time, whether memory associated with a computer is available to perform a data processing task; in response to determining that the memory is not available for executing the data processing task at the first time, creating a factory object for the data processing task, the factory object specifying instructions for creating the data processing task; receiving a request to perform the data processing task after creating the factory object; In response to the request, generating the data processing task using the factory object; determining that the memory is available to perform the data processing task at a second time after the first time; using said memory to perform said data processing task; 1. A non-transitory computer-readable storage medium comprising:

16. 16. The non-transitory computer-readable storage medium of claim 15, wherein the factory object comprises program instructions that, when executed, cause a computer processor to generate the data processing task.

17. 16. The non-transitory computer-readable storage medium of claim 15, wherein the factory object has a memory footprint that is smaller than a memory footprint of the data processing task.

18. The operations include, in response to determining that the memory is not available to execute the data processing task at the first time, placing the data processing task in a data processing task queue; 16. The non-transitory computer-readable storage medium of claim 15, further comprising: in response to determining that the memory is available to execute the data processing task at the second time, scheduling performance of the data processing task and removing the data processing task from the data processing task queue.

19. Determining whether the memory is available to perform the data processing task at the first time includes: determining an amount of memory required to perform said data processing task; determining an amount of memory that is not reserved for other data processing tasks; determining whether the amount of memory required to execute the data processing task is greater than the amount of memory not reserved for other data processing tasks; determining that the memory is not available to execute the data processing task in response to determining that the amount of memory required to execute the data processing task is greater than the amount of memory not reserved for other data processing tasks; and 16. The non-transitory computer-readable storage medium of claim 15, comprising:

20. Determining that the memory is available to perform the data processing task at the second time after creating the factory object includes: determining an amount of memory required to perform said data processing task; determining an amount of memory that is not reserved for other data processing tasks; determining whether the amount of memory required to execute the data processing task is greater than the amount of memory not reserved for other data processing tasks; determining an amount of memory required to execute a reduced scope of the data processing task in response to determining that the amount of memory required to execute the data processing task is greater than the amount of memory not reserved for other data processing tasks; and and determining that the amount of memory required to execute the reduced range of the data processing tasks is less than or equal to the amount of memory not reserved for other data processing tasks.

Citation Information

Patent Citations

  • Buffer control system

    JP1989237718A

  • Parallel object task engine, and parallel processing method

    JP2001318798A

  • Program-executing method, and system using the same

    JP2002063043A

  • Deferment method and device for memory allocation

    JP2004054933A

  • Image processor and program

    JP2007323393A