DMTCP
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
DMTCP Documentation

(NOTE: The end of this page has advice on using this doxygen interface to browse the code.)

There are several ways to begin learning about DMTCP.

  1. You could read the Related Pages.
  2. You could read the parts of the DMTCP FAQ that interest you.
  3. You could dig into the code by looking at the "start points".
    1. The "main" routines for the DMTCP-related executables:
          main routines
    2. A second important "start point" is the constructor, dmtcp::DmtcpWorker::DmtcpWorker(), for the dmtcp::DmtcpWorker class.
      • That constructor dmtcp::DmtcpWorker::DmtcpWorker() is invoked by declaring a global class variable, theInstance. See: DmtcpWorker DmtcpWorker::theInstance; in dmtcpworker.cpp.
      • Note that the constructor call happens in the file dmtcpworker.cpp, and that file is part of the library libdmtcp.so.
      • Note also that the library libdmtcp.so is preloaded into the user's application, and executes before the user's main function. I.e., "dmtcp_launch a.out" calls execve, which execs into a process that is launched as if from the following command line:
            LD_PRELOAD=FULL_PATH/libdmtcp.so a.out
      • So, any constructors of libdmtcp.so are invoked before the main function of a.out. Hence, dmtcp::DmtcpWorker::DmtcpWorker() executes before the user's main function in a.out.
  4. There is also a document on DMTCP internals:
        The Architecture of DMTCP
  5. Eventually, you should look at plugins, an extensible architecture that allows DMTCP to interact directly with the rest of the world. There is a web page dedicated to describing this: DMTCP Plugins. After trying the examples from that page, take a look at the tutorial:
        Tutorial for DMTCP Plugins

HELP on using the doxygen interface to browse the code.

(UNIX xv6 uses only C code. Ignore any references to classes and methods in the help items, below.)

  1. Note the search box in the upper right. Try writing the name of any function, method, or global variable, and then select the specific symbol that you want to see.
  2. Given an occurrence of a function or a method, click on it to to see a web page with links to the declaration of the function/method, as well as lines of code that call it. However, that web page will not show you the definition of the function/method. If you want to see its definition, then use the search box, as described above.
  3. You can use the method above, to work your way up the call graph, by choosing a call to a function, and then scrolling up to to see what function called the original function. You can even follow this method recursively to find the top-level caller, which is likely to be main().
  4. An alternate way to search for function, method, or global variable name is to search for it in an alphabetized index. Doxygen provides two such alphabetized indexes.
    1. If you are searching for a method, select the "Classes" tab, followed by the "Class Members" tab underneath. By default, the "All" tab will now be selected, and the "_" tab below that. The "_" tab refers to all symbols beginning with the character "_". So, you will usually need to select a different letter. For example, for a method called "foo", you'll need to select the "f" tab.
    2. If you are searching for a function, select the "Files" tab, followed by the "File Members" tab. Intuitively, doxygen views a file as another type of class. Hence, a function is a file member (member of a "class" denoted by that file).
  5. When you click on a link to a line number or function definition, doxygen tries to scroll the target web page to place the desired information near the top of the web browser window. This may not happen if the line number or function definition is at the end of a file.