Event-Based Performance Analysis
|
|
|
- Lenard Page
- 9 years ago
- Views:
Transcription
1 Event-Based Performance Analysis Steven P. Reiss Department of Computer Science Brown University Providence, RI , FAX: Abstract Understanding performance and related issues in a complex system requires analyzing where and why the program spends its resources. In a reactive system such as a interactive application or a server, it is important for understanding that one be able to associate resource usage with the events, be they user actions or client requests, that triggered the corresponding execution. As part of our software visualization and analysis efforts we have developed a system that lets the programmer define what is meant by an event and then to track the resources used in processing that event through the system. The resultant data is currently used to produce visualizations of event-based resource utilization. 1. Introduction Traditional performance analysis and understanding techniques are inadequate for complex, reactive software systems. In a reactive system the important performance questions relate to the time it takes to react to a particular input or request. Traditional techniques look at overall performance and are not input or request-directed. We have developed an automated approach that can provide detailed information describing the resources associated with each particular input or request in a complex system and that is capable of providing performance information for the different types of inputs or requests. Traditional methods look at where the overall system spends resources such as execution time, real time, or memory. They assign resources to particular routine or lines of source code. For example, the UNIX prof tool uses sampling techniques to estimate how much time is spent in each routine over the full run of the program. More sophisticated methods, such as gprof [4], assign resources based on two-level calls, that is, instead of looking at all instances of routine R, they separate these instances based on the different callers of R. Other tools such as HP s CxPerf provide a per-thread analysis of resource utilization. Still other tools look at specific items in a complex system. For example, Tmon [5] and theadmon [2] look at the behavior and interaction of threads in a multithreaded system. There have also been a variety of frameworks for customizing performance analysis [1,3], but these have only been used to do selective overall evaluation rather than looking at the behavior of individual actions. Today s reactive systems are typically multithreaded and event-driven. They wait for events to come either from user interactions or, for a server, from client requests. Overall performance, while important, is not as critical as the response time to these individual event requests. An interactive application will feel sluggish and unusable if particular user interactions take too long, where too long is typically measured in fractions of a second. A server will seem unusable to a client if what are perceived as simple requests from the client actually take significant amounts of time, where significant here is typically measured in milliseconds. In a long running server, the resources and run time for these individual events are often dwarfed by the other actions of the server such as initialization and background processing, and hence traditional analysis does not provide the necessary insights into if and why such events might be perceived as slow. What is needed is to understand resource utilization based on events. That is, the programmer needs to see how much time is used and memory allocated in processing each particular user or client-initiated event. Moreover, the programmer needs to understand this both grouped by event type and throughout the application. This can be done by a system that would collect and display performance information for events and that would handle the complexities of event processing in real applications. The complexities arise from several sources. The first involves identifying when the event starts and when it finishes. Events can come from multiple sources. Events based on inputs (as user interface and client-request events are) might be read at some point in a buffered read and then actually processed latter on. The event might be finished when the next event starts, when a message is sent back, or when the system goes back into an idle state. In order to determine resource requirements, a formal definition of an event and its start and ending points is needed. A second complication is that the program is often multithreaded.
2 Event Definitions Application to Profile Event Tracking Performance Monitor Current Events Event-Based Output FIGURE 1. System overview. This means that the resources that are allocated globally may or may not reflect those needed by the particular event and that the analysis has to be done on a per-thread basis. A third difficulty involves the way that these systems process events. Many systems will do some initial processing of the request and then put it on a queue for a worker thread to eventually handle. The worker thread might take some action and then enqueue something for further processing by another thread. Ideally, what is needed is a way of actually assigning the execution of a thread at a given point in the program to a particular event and then accumulating the time from all such assignments in determining the resources used by that event. Some of the more recent performance tools provide a foundation for event-based analysis but do so by putting the burden on the user. These tools let the user tell the program when to start collecting information and when to stop collecting it. They then let the user browse over the detailed performance information that was collected. For example, Jinsight lets the user specify a method as a trigger [7,8]. Trace collection occurs while the method is being executed. The user can then use Jinsight to browse over the dynamic call tree, objects allocated, etc. JProbe lets the programmer Borland s OptimizeIt lets you see performance by thread, and then examine the dynamic call graph to examine the behavior of individual events. Wily s Interscope again collects enough data to let the programmer specify filters and browse the dynamic call graph down to the method level so that an individual event can be understood. Sitraka s JProbe software lets the user specify what parts of the program should be analyzed in detail and then lets the user browse the dynamic call tree of those portions. The problems with these approaches, and the difficulty we wanted to address, is that the user generally needs to know what events are important in advance and has to manually track the processing of events between different portions of the system using the various browsing techniques. Moreover, it is impossible to get information about the total resources used for an event whose processing was distributed or the total resources used for all events of a given type. Our approach follows events throughout the whole application without programmer intervention. 2. Overview To demonstrate that automatic event-based performance analysis was possible and to demonstrate its utility, we have put together a system that takes program traces created for visualization and generates event-based performance data. The same techniques that we use could just as easily be used to collect and produce event-based performance data dynamically as the program is run. Our system consists of two primary components as shown in Figure 1. The principle component, Event Tracking, detects and manages events. It takes as input both the sequence of events coming from the program and a file that defines what are the events for this particular application. The output of this component is the notion of a current
3 event being processed by each active thread. The second component, Performance Monitor, of the system is a more typical performance analyzer which collects information about run time, memory usage, etc. based on events coming from the program and then accumulates this information on an event basis. When the program terminates, this information is written to an output file for either further analysis or, in our case, for visualization. The key issues that arose in developing this system and in any event-based performance analysis included: How to characterize and define events. This has to be done in a way that captures the programmers intuitive notion of what an event is while at the same time being easy to detect and track during program execution. How to allow events to be both generic (e.g. to handle standard input packages) and application-specific at the same time. How to associate performance statistics with an event. While this is easy on the surface, the fact that the same event can be processed by different threads at different stages of the execution makes this more complex. One also has to deal with the arbitrary behaviors of real applications. How to make the process of tracking events and then associating performance with events as efficient as possible. The remainder of this paper describes our system in more detail paying special attention to the reasons why the above issues are important and the solutions we developed to address them. We start in the next section by describing what we mean by an event and how we define its starting and ending points. The subsequent section describes how we track event processing through the system even where the same event is processed on multiple threads at various times. The next sections describe the implementation of this analysis and the output that we get out from it as well as some of the visualizations we have provided of that output. We conclude with a section describing our experiences to date and the future work in this area. 3. Defining and Triggering Events We are concerned with reactive systems, that is, systems that wait for input from either the user or another program, and then react to that input by doing some computation. An event in this context is any of the possible actions that cause the system to react. Typical events might be user actions coming from the user interface manager, messages sent over a socket from another application, or remote method invocations from some client. Events can also be specific to an application. In some cases, time-outs might be considered events. In other cases, the application might need to react to interrupts or particular types of exceptions. In all these cases, we want to be able to associate system resources with the processing of the underlying event. For our purposes we are mainly interested in application-level servers (rather than say operating systems) and in procedural or object-oriented languages such as C/C++ or Java. Because events come in a variety of forms, it is not always clear where the processing of an event starts. User interface events in Java are processed internally in different ways on Windows and Unix systems and these differences are not exposed to the programmer. Does the event processing include such internal processing and if so, how much? There are multiple ways that remote method invocation can operate and the programmer is usually not exposed to the actual implementation. Should event performance include the internal routines that decode and possibly enqueue the message, or should it only include the cost of actually processing the message. Similar issues arise when dealing with socket-based messages and interrupt-driven systems. Determining when the system is done processing an event may also be problematic. The system might be finished with an event when it moves on to a new event or when it becomes idle. In the case of a user interface event, event processing is generally finished when the system returns to get the next event from the main event loop. In the case of incoming messages, it is done when it is ready to read the next message. In the case of remote method invocation, it is done when the remote method returns or the thread that was created to deal with the remote invocation terminates. In order to associate performance information with events, we first need to determine a way of indicating the start and end of an event. Taking all the above into account and looking at a variety of programs led us to define events by associating them with particular procedure calls, with the entry to the call being the start and the exit from the call being the finish. This is a somewhat simplistic approach but one that seems to be general and to work. Moreover it is similar to techniques used in [8] for selecting portions of the code for detailed visualization. As an example of using procedures to define events, Java input events for AWT or Swing typically are processed by having the lower level event loop call the method dispatchevent for whatever component the event occurs in. Thus, if we look for calls to this method in any of the subclasses of java.awt.component we can find the start and stop of most input events. Other AWT events can be found using the dispatch method of java.awt.event.invocationevent. For Motif applications, X events can be delineated by calls to the routine XNextEvent. For remote method calls using Java RMI, it is possible to find two different routines that indicate the start of a call. The first includes all the argument decoding and
4 <EVENTS> <EVENT METHOD="dispatchEvent" CLASS="java/awt/MenuComponent" SIGN="(Ljava/awt/AWTEvent;)V" NAME="AwtMenuEvent" TYPE="JAVA" /> <EVENT METHOD="dispatchEvent" CLASS="java/awt/Component" SIGN="(Ljava/awt/AWTEvent;)V" NAME="AwtComponentEvent" TYPE="JAVA" /> <EVENT METHOD="dispatch" CLASS="java.awt.event.InvocationEvent" SIGN="()V" NAME="AwtInvocationEvent" TYPE="JAVA" /> <EVENT METHOD="XNextEvent" NAME="X event" TYPE="X11" /> <EVENT METHOD="RIPget_input" NAME="BWE event" TYPE="BWE" /> <EVENT METHOD="process_message" SOURCE="/pro/field/msg/src/msgclient.c" NAME="MSG event" TYPE="BWE" /> <EVENT METHOD="run" CLASS="sun.rmi.transport.tcp.TCPTransport$ConnectionHandler" SIGN="()V" NAME="RMI Invocation" TYPE="RMI" /> <EVENT METHOD="serviceCall" CLASS="sun.rmi.transport.Transport" SIGN="(Ljava/rmi/server/RemoteCall;)Z" NAME="RMI Call" TYPE="RMIC" /> </EVENTS> FIGURE 2. Sample event trigger definitions. encoding as well as the call; the second only includes the actual call. The use of procedure calls also applies naturally to message systems, more detailed remote method invocations, and application-specific events. For example, to apply it to the socket-based messaging framework used in the FIELD programming environment [9], we use the routine process_message inside the message handling code. For an RMI application, the programmer can indicate each significant remote method as a separate event type. While procedure calls provide a natural way of viewing events, their use raises several issues. The first is that the set of routines that need to be identified will differ for different systems. We accommodate this in our implementation by letting the particular routines be defined as resources in a set of XML files. We provide a basic XML file with different generic events such as AWT and Swing user interface callbacks and RMI calls. In addition, programmers can provide project or application specific files that define additional events A portion of the global event definition file is shown in Figure 2, Each of the event definitions first contains enough information to uniquely identify a particular routine or set of routines. For Java, this includes the method name, class, and the signature. 1 For C or C++ it includes the routine name, class, signature, and source file. Each of these can either be specified directly or wildcarded. Moreover, the class entry can be defined either explicitly (using CLASS= xxx as in Figure 2) or by specifying a set of classes or interfaces which implies all 1. We use the standard Java representation (as documented in [6]) to differentiate overloaded methods by specifying their parameter types and created similar representation for C and C++. classes that are either subtypes of or implementors of one of the given classes or interfaces using OBJECTS= xxx. Each event definition also contains an event name and type. The name is used in the output later on. Event types are used to let the programmer select which set of events should be used for a particular application. Thus, the programmer can control whether JAVA events (in this case AWT-based input events) should be considered or not. Moreover, the programmer can decide whether to consider RMI events with or without encoding or to ignore them completely and rely on the actual calls that they would specify in an application-specific file. Finally event definitions can include a set of flags to indicate how they should be processed. These are described in the next section since they are primarily relevant to tracking events. The event tracking system maintains efficiency through preprocessing. It first reads in the event definition file when it starts up. It determines which events are relevant based on the event types and the programmer s requests when event profiling was started. Then it takes each relevant event specification and finds the internal identity for all relevant methods. This identity will be the address of the method for C or C++ and the internal UID of the method from JVMPI for Java. The identities for the set of methods that then need to be checked is stored in a hash table. Doing this all as a preprocessing step ensures that the relevant method can be detected quickly during execution. 4. Tracking and Maintaining Events Ideally, knowing the routine would be sufficient for event-based performance analysis. The system could just detect when a thread enters any of the routines associated with an event and create a new event record. Then it would record resource usage in this record while this event was in progress and then output the total information when the
5 identified routine returned. Unfortunately, programs are not that simple. One problem that arises in using calls to delineate events is that of nested calls. It is common in a Java event loop for the dispatchevent method for one component to decide that this event is not relevant to this component and then to call the corresponding method on its parent component. To avoid this problem, we only check for calls that trigger new events when the current thread is not presently processing an event. Another problem is that while routines are a convenient and accurate way of identifying events, they are not sufficient to detect when such events are being processed. In many reactive systems, when the events occur they first cause some initial processing and then cause a task to be placed on a queue. Later in the system execution another thread will take the task off the queue and do the requisite processing. The resources spent by this second thread should also be attributed to the particular event. This situation can occur both with programmer-defined queues and processing as well as system processing. For example, Java Swing allows a event-processing routine to call the method invokelater to have additional processing be done directly from Swing s event loop. We wanted to develop a general scheme that would catch most of this type of delayed processing and be able to assign resources appropriately to different threads. Based again on the analysis of a wide range of different server applications, we settled on using objects and their usage to track events. To make this work we associate objects (or blocks of memory in a non-object-oriented system) with particular events. Then, if a thread is not processing any other event and starts doing some processing with an object that has previously been associated with an event, we make the assumption that the thread is again doing processing for that event. This can again be done by looking at the calls and returns of particular routines. That is, if a thread is not currently processing an event and a routine is called in that thread with an event-associated object as a key argument, then the thread becomes associated with that event for the duration of that routine call. One problem here is identifying what is meant by a key argument. This can be done in a variety of ways. First one could let that the programmer identify the appropriate routines that do subsequent processing of objects and identify which of their arguments are the appropriate ones. This approach is the most accurate, but it requires both work on the part of the programmer and a more detailed monitoring of execution than is provided by such interfaces as Java JVMPI. 2 To find a more general and automatic alternative we looked at a broad range of server-type programs, both in C/ C++ and Java and found out that it was generally sufficient to detect calls where the event-based argument is the first parameter. For object-oriented languages, this means that a method on the event object is being invoked. In actuality, we found instances where the message content was passed as a parameter to what was the obvious routine that indicated processing was continuing rather than being invoked directly. However, in every such case, there was some secondary routine that did the bulk of the processing where the message content was the first parameter. Our actual implementation provides some of both of these approaches. We first let the programmer identify specific routines that indicate continued processing of an event as part of the XML description files. However, we restrict this to methods on the event-associated object rather than looking at arbitrary arguments. Alternatively and by default, we will let any method called on an event-associated object to trigger continued processing of the event provided that the thread doing the invocation is not currently associated with an event. This can again be controlled by the programmer through the XML files, either by specifying specific routines or event types that should not be handled automatically. One other problem arises in using objects to track events is that of false associations. It is conceivable that several of the objects allocated as part of an event are for general use and not associated with that particular event. If these objects are later used, the corresponding resources should not be associated with the originating event. However, once a server is set up, almost all of the processing it does will be associated with one event or another. By only considering object-based events when no other event is associated with a thread, the system tends to identify the actual event that the thread is processing. In the various examples we have tried we have never seen such a false positive occur. However, we do let the programmer identify a restricted set of classes for each event type and limit the use of associated objects to these classes. Not only does this provide a means of avoiding false associations, but it makes the tracking and detection of events using objects more efficient. False associations can also occur if objects are shared between events. This can happen if the application doesn t 2. JVMPI is a standard Java interface for profiling. It provides hooks for detecting events such as method entry and exit, allocations, monitor wait, and garbage collection. Its method entry events can either pass no parameters or the this pointer; they do not include any of the other parameters.
6 reallocate objects that represent messages or commands for each event but instead reuses existing objects. While this doesn t happen often, we have provided facilities in our framework whereby the programmer can flag routines that should change the event associated with their primary object to the current event. Since it is generally easy to find such a routine (the one that reinitializes the original object, for example), this mechanism is sufficient, albeit application specific to deal with these cases. 5. Implementation To implement event monitoring as described above we need to distinguish and implement event descriptions and event instances. Event descriptions represent types of events. Each has an associated set of routines, an event type used to determine if the event is relevant to the programmer, and a set of flags indicating how the event should be processed. The processing flags include: NO_OBJECTS. If this flag is set then no objects will be associated with events of this type. This is useful to optimize event analysis for those events that are processed completely within the scope of the routine call that creates them. ALLOW_REUSE. This flag indicates that the same routine might be called multiple times for a single event. It causes the object associated with the routine (the first argument, generally the this pointer) to be used to determine if there is a previous event or not. MARK_OBJECT. This flag provides a more selective way of identifying what objects are relevant to an event. If the routine associated with this flag is called when an event is being processed, the object associated with that call will become associated with the current event. Event instances are created dynamically when the system detects that an event has occurred for the first time. Each instance keeps track of the current set of stack frames that have made this event active. (Note that the same event might be active in multiple threads concurrently.) It also keeps track of the event descriptor associated with the event, the start and end time of the event, and all the resources used by the event. Event-based performance analysis then works by tracking actions in the program and maintaining a current event for each active thread. The four basic actions that are considered are method (or routine) entry, method exit, object allocation, and object free. We assume that entry and exit actions have an associated thread, method, object, and stack frame and that allocation and free actions have an associated thread and object. Figure 3 shows the actions associated with a call action. The system first looks to see if there is an event associated with the current thread. At worst this involves a hash lookup; typically it is handled directly since we cache the current thread and its event and the current call usually comes from the same thread as the previous call. If there is no current event, the system calls CheckForNewEvent. Here it uses a hash lookup to find the event descriptor associated with the called method. If this is defined, then it next looks at whether this routine reuses events. If so, it finds the event associated with the primary object. If there is no such event or if the routine doesn t reuse events, then a new event instance is created and associated with the current thread. If no event descriptor is found for the called method, then the system checks the object associated with the call. If an event instance was previously defined for that object, then the instance is restarted. Restarting or starting an event instance involves associating the current stack frame with the instance. This is done by having each event keep a table of its current entry frames. A table is necessary here to because the event might be being processed in multiple threads concurrently, in which case there will be one frame for each of the active threads. Finally, if is a current event, the routine CheckForMarks is invoked. This routine again checks if the method being called has an associated event descriptor and if that descriptor indicates that the this parameter should be marked as belonging to the current event instance. Figure 4 shows the actions associated with the other actions. When an exit occurs and an event is in progress, the system first adds the resources for the call to the statistics associated with the event and then checks if the exit corresponds to the call frame from whence the event was activated. Allocation actions check if there is a current event and that event needs to deal with objects and, if so, then it associates the current event with the given object. Finally, a free action causes any association with the object being freed to be removed. There are a variety of techniques that can be used to track actions in the program in order to do event-based performance monitoring. First, one can patch the source or object code. Several profilers, including MIPS Pixie [15] work in this manner. This is preferred approach because it is probably the most efficient. However it is difficult to do in general, especially for multiple languages and architectures. A second approach is to use a profiling interface such as Java JVMPI or the procedure entry exit calls used in UNIX profiling. This is probably the simplest technique to work with because it should work across machines and much of the required tracing mechanisms already exist. The drawbacks here are in terms of performance (for JVMPI), and in the potential need for the programmer to recompile all the code and libraries to enable profiling.
7 ENTER[action] Let ce = CurrentEvent[action.thread] If ce == NULL then Let ce = CheckForNewEvent[action] Else if any event has mark objects set then CheckForMarks[action,ce] CheckForNewEvent[action] Let ed = event descriptor associated with action.method If ed is defined then Let ei = NULL; If ed allows reuse then Let ei = the event instance associated with action.object If ei == NULL then Let ei = new event instance[ed,action] Add action.frame to ei Associate ei with action.thread Else Add action.frame to ei Else if action.object is defined then Let ei = the event instance associated with action.object If ei!= NULL then Add action.frame to ei CheckForMarks[action,ei] Let ed = event descriptor associated with action.method If ed has mark object flag set then Associate action.object with event ei FIGURE 3. Event processing for a call action EXIT[action] Let ei = event instance associated with action.thread If (ei!= NULL) Then Add performance statistics for this call to ei If action.frame is associated with ei Then Set the event associated with action.thread to NULL ALLOC[action] Let ei = event instance associated with action.thread If ei!= NULL and not ei has property NoObjects then Associate ei with action.object FREE[action] Remove any association with action.object FIGURE 4. Event processing for exit, allocate and free actions A third approach is to generate trace data as the program runs and analyze this data after the run to for performance information. This approach is the most straightforward if the trace data is already available because it isolates the implementation of the above algorithms from the tricky process of data collection. However, it requires that the trace data be available, and generating trace data is generally more complex and time consuming that either of the previous approaches and would not be worth it unless it was to serve other uses as well. As part of our program visualization efforts, we are already producing relatively complete execution traces for both C/C++ and Java programs [10,11]. These traces allow us to do detailed analysis and to correlate a variety of different analysis on program runs. The underlying system provides a convenient framework for implementing trace
8 <EVENT START= END= NAME= MSG event > <STATS CALLS= 216 TOTAL= TOTALA= TOTALD= REAL= REALA= REALD= INSTS= INSTSA= INSTSD= e+10 /> </EVENT> <EVENT OBJECT= X45199 START= END= NAME= RMI Invocation > <STATS CALLS= TOTAL= TOTALA= TOTALD= e+07 REAL= REALA= REALD= ALLOCS= ALLOCSA= ALLOCSD= ASIZE= ASIZEA= ASIZED= UNFREES= 4648 UNFREESA= UNFREESD= UFSIZE= UFSIZEA= UFSIZED= GC= 8 GCTIME= GCRTIME= 0 /> </EVENT> FIGURE 5. Sample XML output from event-based performance analysis. analyses and we used this framework for an initial implementation of event-based performance analysis. Our event-based performance analyzer thus reads program trace files, detects the four relevant types of actions, and tracks events and their associated resources. It generates an XML file that contains the particular program events with whatever identifying information is available along with the associated resources. An example of the output is shown in Figure 5. The top entry is from a C program while the bottom is a Java event. Both cases identify the event type and time. For the Java event, the particular object associated with the event is also recorded. (Information about that object is available in other analysis files.) After the event, the resource statistics are provided. We provide total, average, and standard deviations for each statistic. The different statistics shown here include TOTAL for the total execution time spent processing the event, REAL for the real time associated with the event, INSTS for the number of instructions executed during the event (for C/C++ only), ALLOCS for the number of allocations associated with the event, ASIZE for the size of allocations, UNFREES for the number of unfreed allocations, UFSIZE for the size of the unfreed allocations, and, for Java, garbage collection statistics. 6. Reporting Event Information The system reports events in XML format so that the resultant information can be used by other programs, notably our software visualization system. [12,13]. Figure 6 shows two sample visualizations of the AWT events of a graphical editor associated with our visual query language [14]. In the first, time is displayed along the X axis and the run time used in processing the event along the Y. Color encodes the number of calls associated with the event. Its very easy to spot the two events that took most of the processing run time and to note that these also involved the most calls. The second diagram shows an alternate 3D view of the same events. Here time is shown as a spiral starting in the center, height is the number of calls, and color indicates the size of allocations done for the event. Again, the events that took the most time stand out and it is easy to see that the number of allocations correlates with the processing time of the events since the longer events tend to have colors that are in the blue-violet range while the shorter events are in the red-yellow range. 7. Experiences and Future Work The event mechanism here has been tried on a variety of different programs and demonstrated its capability to identify relevant events and show the resources used by the individual events. In addition to the example of Figure 6 which shows a interactive Java application, we have used it to find both X11 and message-based events in the FIELD programming environment [9], to find swing-based events in several other systems, and to find RMI-based events in different server frameworks. The visualizations produced by the events convey the appropriate information. They are most useful in the context of the overall visualization system where they can be directly related to other visualizations which show what else is going on in the program when each event is being processed. For example, they have been used to track down why certain events (in particular a sequence of drag events to change the shape of a curve) took longer than expected. The visualization framework also allows events to be dynamically grouped in various ways (for example, by event type) to get summary information in more complex visualizations.
9 FIGURE 6. Example visualizations of event-based resource utilization. The code for our implementation is available as part of the BLOOM software visualization and understanding system at While these efforts demonstrate the potential for doing event-based performance analysis and software understanding, there are several directions in which this can be pursued. The particular ones that we are currently looking at are: Supporting nested events as distinct. Right now we only view a thread as processing a single event at one time. Actually, if we allow a variety of event types, it is possible for a thread to be associated with multiple events of different types at one time. Ideally, the underlying framework should support this. Allowing event continuation to be detected using calls that do not rely on the associated object being the first argument. This restriction is implicit in the use of JVMPI for Java profiling, but can be avoided with other technologies. Moreover, there are applications where the relevant object is not invoked directly and event continuation cannot be detected using the existing framework. Extending this framework to handle multiple process programs. Here one would like to track an event across applications. For example, one would like to take an input event in the client and include in the performance summary all the RMI calls and resources used in the server. This requires either detailed post-processing analysis or an slightly augmented version of RMI. It can also be done at a lower level by tracking input and output operations between processes, associating a message written by one process with the current event of that process and then transferring that event to the other process when the same data is read back in. Even without these extensions the current system has demonstrated both the practicality and the utility of doing event-based performance analysis and understanding for reactive systems.
10 8. Acknowledgements This work was done with support from the National Science Foundation through grants ACI , CCR , and CCR and with the generous support of Sun Microsystems. Significant advice and feedback was provided by Manos Renieris. 9. References 1. Ziya Aral and Ilya Gertner, Non-intrusive and interactive profiling in Parasight, Proc. ACM/SIGPLAN COnf. on Parallel Programming, pp (January 1998). 2. Bryan M. Cantrill and Thomas W. Doeppner, Jr., Threadmon: a tool for monitoring multithreaded program performance, Proc. 30th Hawaii Intl. Conf. on Systems Sciences, pp (January 1997). 3. Michael M. Gorlick, The flight recorder: an architecture for system monitoring, ACM/ONR Workshop on Parallel and Distributed Debugging, pp (DEcember 1991). 4. S. L. Graham, P. B. Kessler, and M. K. McKusick, gprof: A call graph execution profiler, SIGPLAN Notices Vol. 17(6) pp (June 1982). 5. Minwean Ji, Edward W. Felten, and Kai Li, Performance measurements for multithreaded programs, Proc. ACM SIGMETRICS/Performance 98, pp (August 1998). 6. Tim Lindholm and Frank Yellin, The Java Virtual Machine Specification, Second Edition, Addison-Wesley (1999). 7. Wim De Pauw and Gary Sevitsky, Visualizing reference patterns for solving memory leaks in Java, in Proceedings of the ECOOP 99 European Conference on Object-oriented Programming, (1999). 8. Wim De Pauw, Nick Mitchell, Martin Robillard, Gary Sevitsky, and Harini Srinivasan, Drive-by analysis of running programs, Proc. ICSE Workshop of Software Visualization, (May 2001). 9. Steven P. Reiss, FIELD: A Friendly Integrated Environment for Learning and Development, Kluwer (1994). 10. Steven P. Reiss and Manos Renieris, Generating Java trace data, Proc Java Grande, (June 2000). 11. Steven P. Reiss and Manos Renieris, Encoding program executions, Proc ICSE 2001, (May 2001). 12. Steven P. Reiss, Bee/Hive: a software visualization backend, IEEE Workshop on Software Visualization, (May 2001). 13. Steven P. Reiss, An overview of BLOOM, PASTE 01, (June 2001). 14. Steven P. Reiss, A visual query language for software visualization, IEEE 2002 Symposium on Human Centric Computing Languages and Environments, pp (September 2002). 15. MIPS Computer Systems, Inc., RISCompiler Languages Programmer s Guide. December 1988.
Efficient Monitoring and Display of Thread State in Java
Efficient Monitoring and Display of Thread State in Java Steven P. Reiss Department of Computer Science Brown University Providence, RI 02912-1910 401-863-7641, FAX: 401-863-7657 [email protected] Abstract
Software Visualization Tools for Component Reuse
Software Visualization Tools for Component Reuse Craig Anslow Stuart Marshall James Noble Robert Biddle 1 School of Mathematics, Statistics and Computer Science, Victoria University of Wellington, New
A Practical Method to Diagnose Memory Leaks in Java Application Alan Yu
A Practical Method to Diagnose Memory Leaks in Java Application Alan Yu 1. Introduction The Java virtual machine s heap stores all objects created by a running Java application. Objects are created by
Lecture 7: Java RMI. CS178: Programming Parallel and Distributed Systems. February 14, 2001 Steven P. Reiss
Lecture 7: Java RMI CS178: Programming Parallel and Distributed Systems February 14, 2001 Steven P. Reiss I. Overview A. Last time we started looking at multiple process programming 1. How to do interprocess
Extend Table Lens for High-Dimensional Data Visualization and Classification Mining
Extend Table Lens for High-Dimensional Data Visualization and Classification Mining CPSC 533c, Information Visualization Course Project, Term 2 2003 Fengdong Du [email protected] University of British Columbia
Instrumentation Software Profiling
Instrumentation Software Profiling Software Profiling Instrumentation of a program so that data related to runtime performance (e.g execution time, memory usage) is gathered for one or more pieces of the
SDT: A Programming Language for Debugging (Working Paper)
SDT: A Programming Language for Debugging (Working Paper) Steven P. Reiss Department of Computer Science Brown University Providence, RI 02912 [email protected] (401) 863-7641 January, 1989 Abstract This
Implementing Java Distributed Objects with JDBC
Implementing Java Distributed Objects with JDBC Pritisha 1, Aashima Arya 2 1,2 Department of Computer Science Bhagwan Mahaveer institute of engineering & technology (BMIET), Deenbandhu Chhotu Ram University
NetBeans Profiler is an
NetBeans Profiler Exploring the NetBeans Profiler From Installation to a Practical Profiling Example* Gregg Sporar* NetBeans Profiler is an optional feature of the NetBeans IDE. It is a powerful tool that
language 1 (source) compiler language 2 (target) Figure 1: Compiling a program
CS 2112 Lecture 27 Interpreters, compilers, and the Java Virtual Machine 1 May 2012 Lecturer: Andrew Myers 1 Interpreters vs. compilers There are two strategies for obtaining runnable code from a program
Gadget: A Tool for Extracting the Dynamic Structure of Java Programs
Gadget: A Tool for Extracting the Dynamic Structure of Java Programs Juan Gargiulo and Spiros Mancoridis Department of Mathematics & Computer Science Drexel University Philadelphia, PA, USA e-mail: gjgargiu,smancori
1 Organization of Operating Systems
COMP 730 (242) Class Notes Section 10: Organization of Operating Systems 1 Organization of Operating Systems We have studied in detail the organization of Xinu. Naturally, this organization is far from
Real Time Programming: Concepts
Real Time Programming: Concepts Radek Pelánek Plan at first we will study basic concepts related to real time programming then we will have a look at specific programming languages and study how they realize
Performance Monitoring and Visualization of Large-Sized and Multi- Threaded Applications with the Pajé Framework
Performance Monitoring and Visualization of Large-Sized and Multi- Threaded Applications with the Pajé Framework Mehdi Kessis France Télécom R&D {Mehdi.kessis}@rd.francetelecom.com Jean-Marc Vincent Laboratoire
Trace-Based and Sample-Based Profiling in Rational Application Developer
Trace-Based and Sample-Based Profiling in Rational Application Developer This document is aimed at highlighting the importance of profiling in software development and talks about the profiling tools offered
RTOS Debugger for ecos
RTOS Debugger for ecos TRACE32 Online Help TRACE32 Directory TRACE32 Index TRACE32 Documents... RTOS Debugger... RTOS Debugger for ecos... 1 Overview... 2 Brief Overview of Documents for New Users... 3
Program Visualization for Programming Education Case of Jeliot 3
Program Visualization for Programming Education Case of Jeliot 3 Roman Bednarik, Andrés Moreno, Niko Myller Department of Computer Science University of Joensuu [email protected] Abstract:
Process Scheduling CS 241. February 24, 2012. Copyright University of Illinois CS 241 Staff
Process Scheduling CS 241 February 24, 2012 Copyright University of Illinois CS 241 Staff 1 Announcements Mid-semester feedback survey (linked off web page) MP4 due Friday (not Tuesday) Midterm Next Tuesday,
Using Process Monitor
Using Process Monitor Process Monitor Tutorial This information was adapted from the help file for the program. Process Monitor is an advanced monitoring tool for Windows that shows real time file system,
JProfiler: Code Coverage Analysis Tool for OMP Project
CMU 17-654 & 17-754 Analysis of Software Artifacts Spring 2006 Individual Project: Tool Analysis May 18, 2006 Eun-young Cho [email protected] JProfiler: Code Coverage Analysis Tool for OMP Project Table
Software design (Cont.)
Package diagrams Architectural styles Software design (Cont.) Design modelling technique: Package Diagrams Package: A module containing any number of classes Packages can be nested arbitrarily E.g.: Java
Visualizing the Execution of Java Programs
Visualizing the Execution of Java Programs Wim De Pauw, Erik Jensen, Nick Mitchell, Gary Sevitsky, John Vlissides, Jeaha Yang IBM T.J. Watson Research Center 30 Saw Mill River Road, Route 9A Hawthorne,
Comparison of Request Admission Based Performance Isolation Approaches in Multi-tenant SaaS Applications
Comparison of Request Admission Based Performance Isolation Approaches in Multi-tenant SaaS Applications Rouven Kreb 1 and Manuel Loesch 2 1 SAP AG, Walldorf, Germany 2 FZI Research Center for Information
Apache Thrift and Ruby
Apache Thrift and Ruby By Randy Abernethy In this article, excerpted from The Programmer s Guide to Apache Thrift, we will install Apache Thrift support for Ruby and build a simple Ruby RPC client and
Wait-Time Analysis Method: New Best Practice for Performance Management
WHITE PAPER Wait-Time Analysis Method: New Best Practice for Performance Management September 2006 Confio Software www.confio.com +1-303-938-8282 SUMMARY: Wait-Time analysis allows IT to ALWAYS find the
JReport Server Deployment Scenarios
JReport Server Deployment Scenarios Contents Introduction... 3 JReport Architecture... 4 JReport Server Integrated with a Web Application... 5 Scenario 1: Single Java EE Server with a Single Instance of
Chapter 2: OS Overview
Chapter 2: OS Overview CmSc 335 Operating Systems 1. Operating system objectives and functions Operating systems control and support the usage of computer systems. a. usage users of a computer system:
A Thread Monitoring System for Multithreaded Java Programs
A Thread Monitoring System for Multithreaded Java Programs Sewon Moon and Byeong-Mo Chang Department of Computer Science Sookmyung Women s University, Seoul 140-742, Korea [email protected], [email protected]
Holly Cummins IBM Hursley Labs. Java performance not so scary after all
Holly Cummins IBM Hursley Labs Java performance not so scary after all So... You have a performance problem. What next? Goals After this talk you will: Not feel abject terror when confronted with a performance
Eclipse Visualization and Performance Monitoring
Eclipse Visualization and Performance Monitoring Chris Laffra IBM Ottawa Labs http://eclipsefaq.org/chris Chris Laffra Eclipse Visualization and Performance Monitoring Page 1 Roadmap Introduction Introspection
Advanced Computer Architecture-CS501. Computer Systems Design and Architecture 2.1, 2.2, 3.2
Lecture Handout Computer Architecture Lecture No. 2 Reading Material Vincent P. Heuring&Harry F. Jordan Chapter 2,Chapter3 Computer Systems Design and Architecture 2.1, 2.2, 3.2 Summary 1) A taxonomy of
PIE. Internal Structure
PIE Internal Structure PIE Composition PIE (Processware Integration Environment) is a set of programs for integration of heterogeneous applications. The final set depends on the purposes of a solution
gprof: a Call Graph Execution Profiler 1
gprof A Call Graph Execution Profiler PSD:18-1 gprof: a Call Graph Execution Profiler 1 by Susan L. Graham Peter B. Kessler Marshall K. McKusick Computer Science Division Electrical Engineering and Computer
UI Performance Monitoring
UI Performance Monitoring SWT API to Monitor UI Delays Terry Parker, Google Contents 1. 2. 3. 4. 5. 6. 7. Definition Motivation The new API Monitoring UI Delays Diagnosing UI Delays Problems Found! Next
FileNet System Manager Dashboard Help
FileNet System Manager Dashboard Help Release 3.5.0 June 2005 FileNet is a registered trademark of FileNet Corporation. All other products and brand names are trademarks or registered trademarks of their
Web Server Software Architectures
Web Server Software Architectures Author: Daniel A. Menascé Presenter: Noshaba Bakht Web Site performance and scalability 1.workload characteristics. 2.security mechanisms. 3. Web cluster architectures.
SuperViz: An Interactive Visualization of Super-Peer P2P Network
SuperViz: An Interactive Visualization of Super-Peer P2P Network Anthony (Peiqun) Yu [email protected] Abstract: The Efficient Clustered Super-Peer P2P network is a novel P2P architecture, which overcomes
Checking Access to Protected Members in the Java Virtual Machine
Checking Access to Protected Members in the Java Virtual Machine Alessandro Coglio Kestrel Institute 3260 Hillview Avenue, Palo Alto, CA 94304, USA Ph. +1-650-493-6871 Fax +1-650-424-1807 http://www.kestrel.edu/
Object Instance Profiling
Object Instance Profiling Lubomír Bulej 1,2, Lukáš Marek 1, Petr Tůma 1 Technical report No. 2009/7, November 2009 Version 1.0, November 2009 1 Distributed Systems Research Group, Department of Software
PART IV Performance oriented design, Performance testing, Performance tuning & Performance solutions. Outline. Performance oriented design
PART IV Performance oriented design, Performance testing, Performance tuning & Performance solutions Slide 1 Outline Principles for performance oriented design Performance testing Performance tuning General
16. Recursion. COMP 110 Prasun Dewan 1. Developing a Recursive Solution
16. Recursion COMP 110 Prasun Dewan 1 Loops are one mechanism for making a program execute a statement a variable number of times. Recursion offers an alternative mechanism, considered by many to be more
CS10110 Introduction to personal computer equipment
CS10110 Introduction to personal computer equipment PRACTICAL 4 : Process, Task and Application Management In this practical you will: Use Unix shell commands to find out about the processes the operating
2 SYSTEM DESCRIPTION TECHNIQUES
2 SYSTEM DESCRIPTION TECHNIQUES 2.1 INTRODUCTION Graphical representation of any process is always better and more meaningful than its representation in words. Moreover, it is very difficult to arrange
Understanding the Performance of the Java Operating System JX using Visualization Techniques
Understanding the Performance of the Java Operating System JX using Visualization Techniques Michael Golm, Christian Wawersich, Jörg Baumann, Meik Felser, Jürgen Kleinöder Dept. of Computer Science University
A Meeting Room Scheduling Problem
A Scheduling Problem Objective Engineering, Inc. 699 Windsong Trail Austin, Texas 78746 512-328-9658 FAX: 512-328-9661 [email protected] http://www.oeng.com Objective Engineering, Inc., 1999-2007. Photocopying,
Oracle JRockit Mission Control Overview
Oracle JRockit Mission Control Overview An Oracle White Paper June 2008 JROCKIT Oracle JRockit Mission Control Overview Oracle JRockit Mission Control Overview...3 Introduction...3 Non-intrusive profiling
Comparing Methods to Identify Defect Reports in a Change Management Database
Comparing Methods to Identify Defect Reports in a Change Management Database Elaine J. Weyuker, Thomas J. Ostrand AT&T Labs - Research 180 Park Avenue Florham Park, NJ 07932 (weyuker,ostrand)@research.att.com
Helping you avoid stack overflow crashes!
Helping you avoid stack overflow crashes! One of the toughest (and unfortunately common) problems in embedded systems is stack overflows and the collateral corruption that it can cause. As a result, we
Quotes from Object-Oriented Software Construction
Quotes from Object-Oriented Software Construction Bertrand Meyer Prentice-Hall, 1988 Preface, p. xiv We study the object-oriented approach as a set of principles, methods and tools which can be instrumental
Departamento de Investigación. LaST: Language Study Tool. Nº 143 Edgard Lindner y Enrique Molinari Coordinación: Graciela Matich
Departamento de Investigación LaST: Language Study Tool Nº 143 Edgard Lindner y Enrique Molinari Coordinación: Graciela Matich Noviembre 2005 Para citar este documento: Lindner, Edgard; Enrique Molinari,
Garbage Collection in NonStop Server for Java
Garbage Collection in NonStop Server for Java Technical white paper Table of contents 1. Introduction... 2 2. Garbage Collection Concepts... 2 3. Garbage Collection in NSJ... 3 4. NSJ Garbage Collection
Introduction to Web Services
Department of Computer Science Imperial College London CERN School of Computing (icsc), 2005 Geneva, Switzerland 1 Fundamental Concepts Architectures & escience example 2 Distributed Computing Technologies
Basics of VTune Performance Analyzer. Intel Software College. Objectives. VTune Performance Analyzer. Agenda
Objectives At the completion of this module, you will be able to: Understand the intended purpose and usage models supported by the VTune Performance Analyzer. Identify hotspots by drilling down through
Performance Measurement of Dynamically Compiled Java Executions
Performance Measurement of Dynamically Compiled Java Executions Tia Newhall and Barton P. Miller University of Wisconsin Madison Madison, WI 53706-1685 USA +1 (608) 262-1204 {newhall,bart}@cs.wisc.edu
Johannes Sametinger. C. Doppler Laboratory for Software Engineering Johannes Kepler University of Linz A-4040 Linz, Austria
OBJECT-ORIENTED DOCUMENTATION C. Doppler Laboratory for Software Engineering Johannes Kepler University of Linz A-4040 Linz, Austria Abstract Object-oriented programming improves the reusability of software
Have both hardware and software. Want to hide the details from the programmer (user).
Input/Output Devices Chapter 5 of Tanenbaum. Have both hardware and software. Want to hide the details from the programmer (user). Ideally have the same interface to all devices (device independence).
Integrating TAU With Eclipse: A Performance Analysis System in an Integrated Development Environment
Integrating TAU With Eclipse: A Performance Analysis System in an Integrated Development Environment Wyatt Spear, Allen Malony, Alan Morris, Sameer Shende {wspear, malony, amorris, sameer}@cs.uoregon.edu
Performance Testing Web 2.0
Performance Testing Web 2.0 David Chadwick Rational Testing Evangelist [email protected] Dawn Peters Systems Engineer, IBM Rational [email protected] 2009 IBM Corporation WEB 2.0 What is it? 2 Web
Using Use Cases for requirements capture. Pete McBreen. 1998 McBreen.Consulting
Using Use Cases for requirements capture Pete McBreen 1998 McBreen.Consulting [email protected] All rights reserved. You have permission to copy and distribute the document as long as you make no changes
Test Automation Architectures: Planning for Test Automation
Test Automation Architectures: Planning for Test Automation Douglas Hoffman Software Quality Methods, LLC. 24646 Heather Heights Place Saratoga, California 95070-9710 Phone 408-741-4830 Fax 408-867-4550
Chapter 1 Computer System Overview
Operating Systems: Internals and Design Principles Chapter 1 Computer System Overview Eighth Edition By William Stallings Operating System Exploits the hardware resources of one or more processors Provides
Understanding Software Static and Dynamic Aspects
Understanding Software Static and Dynamic Aspects Welf Löwe IPD, Universität Karlsruhe PF 6980, 76128 Karlsruhe Germany [email protected] Andreas Ludwig IPD, Universität Karlsruhe PF 6980, 76128 Karlsruhe
Glossary of Object Oriented Terms
Appendix E Glossary of Object Oriented Terms abstract class: A class primarily intended to define an instance, but can not be instantiated without additional methods. abstract data type: An abstraction
Tool - 1: Health Center
Tool - 1: Health Center Joseph Amrith Raj http://facebook.com/webspherelibrary 2 Tool - 1: Health Center Table of Contents WebSphere Application Server Troubleshooting... Error! Bookmark not defined. About
It is the thinnest layer in the OSI model. At the time the model was formulated, it was not clear that a session layer was needed.
Session Layer The session layer resides above the transport layer, and provides value added services to the underlying transport layer services. The session layer (along with the presentation layer) add
Going Interactive: Combining Ad-Hoc and Regression Testing
Going Interactive: Combining Ad-Hoc and Regression Testing Michael Kölling 1, Andrew Patterson 2 1 Mærsk Mc-Kinney Møller Institute, University of Southern Denmark, Denmark [email protected] 2 Deakin University,
GSiB: PSE Infrastructure for Dynamic Service-oriented Grid Applications
GSiB: PSE Infrastructure for Dynamic Service-oriented Grid Applications Yan Huang Department of Computer Science Cardiff University PO Box 916 Cardiff CF24 3XF United Kingdom [email protected]
Symbol Tables. Introduction
Symbol Tables Introduction A compiler needs to collect and use information about the names appearing in the source program. This information is entered into a data structure called a symbol table. The
Comp 411 Principles of Programming Languages Lecture 34 Semantics of OO Languages. Corky Cartwright Swarat Chaudhuri November 30, 20111
Comp 411 Principles of Programming Languages Lecture 34 Semantics of OO Languages Corky Cartwright Swarat Chaudhuri November 30, 20111 Overview I In OO languages, data values (except for designated non-oo
UNLOCK YOUR IEC 61850 TESTING EXCELLENCE
IMPROVE EFFICIENCY TEST WITH CONFIDENCE OF KNOW-HOW LEARN AND EXPAND YOUR IEC 61850 SKILLS MASTER YOUR NETWORK KNOWLEDGE GENERATE TEST RESULTS UNLOCK YOUR IEC 61850 TESTING EXCELLENCE Connect To & Read
INTRUSION PREVENTION AND EXPERT SYSTEMS
INTRUSION PREVENTION AND EXPERT SYSTEMS By Avi Chesla [email protected] Introduction Over the past few years, the market has developed new expectations from the security industry, especially from the intrusion
A Comparative Study on Vega-HTTP & Popular Open-source Web-servers
A Comparative Study on Vega-HTTP & Popular Open-source Web-servers Happiest People. Happiest Customers Contents Abstract... 3 Introduction... 3 Performance Comparison... 4 Architecture... 5 Diagram...
Ready Time Observations
VMWARE PERFORMANCE STUDY VMware ESX Server 3 Ready Time Observations VMware ESX Server is a thin software layer designed to multiplex hardware resources efficiently among virtual machines running unmodified
Compiling Object Oriented Languages. What is an Object-Oriented Programming Language? Implementation: Dynamic Binding
Compiling Object Oriented Languages What is an Object-Oriented Programming Language? Last time Dynamic compilation Today Introduction to compiling object oriented languages What are the issues? Objects
The full setup includes the server itself, the server control panel, Firebird Database Server, and three sample applications with source code.
Content Introduction... 2 Data Access Server Control Panel... 2 Running the Sample Client Applications... 4 Sample Applications Code... 7 Server Side Objects... 8 Sample Usage of Server Side Objects...
Memory Management Outline. Background Swapping Contiguous Memory Allocation Paging Segmentation Segmented Paging
Memory Management Outline Background Swapping Contiguous Memory Allocation Paging Segmentation Segmented Paging 1 Background Memory is a large array of bytes memory and registers are only storage CPU can
Data Discovery, Analytics, and the Enterprise Data Hub
Data Discovery, Analytics, and the Enterprise Data Hub Version: 101 Table of Contents Summary 3 Used Data and Limitations of Legacy Analytic Architecture 3 The Meaning of Data Discovery & Analytics 4 Machine
DIABLO VALLEY COLLEGE CATALOG 2014-2015
COMPUTER SCIENCE COMSC The computer science department offers courses in three general areas, each targeted to serve students with specific needs: 1. General education students seeking a computer literacy
Bitrix Site Manager 4.0. Quick Start Guide to Newsletters and Subscriptions
Bitrix Site Manager 4.0 Quick Start Guide to Newsletters and Subscriptions Contents PREFACE...3 CONFIGURING THE MODULE...4 SETTING UP FOR MANUAL SENDING E-MAIL MESSAGES...6 Creating a newsletter...6 Providing
Lesson 4 Web Service Interface Definition (Part I)
Lesson 4 Web Service Interface Definition (Part I) Service Oriented Architectures Module 1 - Basic technologies Unit 3 WSDL Ernesto Damiani Università di Milano Interface Definition Languages (1) IDLs
CHAPTER 14 Understanding an App s Architecture
CHAPTER 14 Understanding an App s Architecture Figure 14-1. This chapter examines the structure of an app from a programmer s perspective. It begins with the traditional analogy that an app is like a recipe
Using jvmstat and visualgc to Solve Memory Management Problems
Using jvmstat and visualgc to Solve Memory Management Problems java.sun.com/javaone/sf 1 Wally Wedel Sun Software Services Brian Doherty Sun Microsystems, Inc. Analyze JVM Machine Memory Management Problems
Rational Application Developer Performance Tips Introduction
Rational Application Developer Performance Tips Introduction This article contains a series of hints and tips that you can use to improve the performance of the Rational Application Developer. This article
Chapter 3 Operating-System Structures
Contents 1. Introduction 2. Computer-System Structures 3. Operating-System Structures 4. Processes 5. Threads 6. CPU Scheduling 7. Process Synchronization 8. Deadlocks 9. Memory Management 10. Virtual
REMOTE DEVELOPMENT OPTION
Leading the Evolution DATA SHEET MICRO FOCUS SERVER EXPRESS TM REMOTE DEVELOPMENT OPTION Executive Overview HIGH PRODUCTIVITY DEVELOPMENT FOR LINUX AND UNIX DEVELOPERS Micro Focus Server Express is the
A Sample OFBiz application implementing remote access via RMI and SOAP Table of contents
A Sample OFBiz application implementing remote access via RMI and SOAP Table of contents 1 About this document... 2 2 Introduction... 2 3 Defining the data model... 2 4 Populating the database tables with
Optimizing service availability in VoIP signaling networks, by decoupling query handling in an asynchronous RPC manner
Optimizing service availability in VoIP signaling networks, by decoupling query handling in an asynchronous RPC manner Voichiţa Almăşan and Iosif Ignat Technical University of Cluj-Napoca Computer Science
STUDY AND SIMULATION OF A DISTRIBUTED REAL-TIME FAULT-TOLERANCE WEB MONITORING SYSTEM
STUDY AND SIMULATION OF A DISTRIBUTED REAL-TIME FAULT-TOLERANCE WEB MONITORING SYSTEM Albert M. K. Cheng, Shaohong Fang Department of Computer Science University of Houston Houston, TX, 77204, USA http://www.cs.uh.edu
Unit 4 i5/os Work Management
Introduction to IBM System i Unit 4 i5/os Work Management Copyright IBM Corporation, 2006. All Rights Reserved. This publication may refer to products that are not currently available in your country.
JOURNAL OF OBJECT TECHNOLOGY
JOURNAL OF OBJECT TECHNOLOGY Online at http://www.jot.fm. Published by ETH Zurich, Chair of Software Engineering JOT, 2006 Vol. 5, No. 6, July - August 2006 On Assuring Software Quality and Curbing Software
Linux Process Scheduling Policy
Lecture Overview Introduction to Linux process scheduling Policy versus algorithm Linux overall process scheduling objectives Timesharing Dynamic priority Favor I/O-bound process Linux scheduling algorithm
Garbage Collection in the Java HotSpot Virtual Machine
http://www.devx.com Printed from http://www.devx.com/java/article/21977/1954 Garbage Collection in the Java HotSpot Virtual Machine Gain a better understanding of how garbage collection in the Java HotSpot
vmprof Documentation Release 0.1 Maciej Fijalkowski, Antonio Cuni, Sebastian Pawlus
vmprof Documentation Release 0.1 Maciej Fijalkowski, Antonio Cuni, Sebastian Pawlus January 23, 2016 Contents 1 Introduction 1 1.1 Requirements............................................... 1 1.2 Installation................................................
Processor Capacity Reserves: An Abstraction for Managing Processor Usage
Processor Capacity Reserves: An Abstraction for Managing Processor Usage Clifford W. Mercer, Stefan Savage, and Hideyuki Tokuda School of Computer Science Carnegie Mellon University Pittsburgh, Pennsylvania
Automatic Logging of Operating System Effects to Guide Application-Level Architecture Simulation
Automatic Logging of Operating System Effects to Guide Application-Level Architecture Simulation Satish Narayanasamy, Cristiano Pereira, Harish Patil, Robert Cohn, and Brad Calder Computer Science and
Using Power to Improve C Programming Education
Using Power to Improve C Programming Education Jonas Skeppstedt Department of Computer Science Lund University Lund, Sweden [email protected] jonasskeppstedt.net jonasskeppstedt.net [email protected]
Model Simulation in Rational Software Architect: Business Process Simulation
Model Simulation in Rational Software Architect: Business Process Simulation Mattias Mohlin Senior Software Architect IBM The BPMN (Business Process Model and Notation) is the industry standard notation
