1. Verbose instrumentation

To enable verbose logging, run the application with the NANOS6 environment variable.

By default it generates a lot of information. This is controlled by the NANOS6_VERBOSE environment variable, which can contain a comma separated list of areas. The areas are the following:

AddTask
Task creation
Blocking
Blocking and unblocking within a task through calls tot he blocking API
ComputePlaceManagement
Starting and stopping compute places (CPUs, GPUs, …)
DependenciesByAccess
Dependencies by their accesses
DependenciesByAccessLinks
Dependencies by the links between the accesses to the same data
DependenciesByGroup
Dependencies by groups of tasks that determine common predecessors and common successors
LeaderThread
Execution of the leader thread.
LoggingMessages
Additional logging messages
TaskExecution
Task execution
TaskStatus
Task status transitions
TaskWait
Entering and exiting taskwaits
ThreadManagement
Thread creation, activation and suspension
UserMutex
User-side mutexes (critical)

The case is ignored, and the all keyword enables all of them. Additionally, and area can have the ! prepended to it to disable it. For instance, NANOS6_VERBOSE=AddTask,TaskExecution,TaskWait is a good starting point.

The default value is all,!ComputePlaceManagement,!DependenciesByAccess,!DependenciesByAccessLinks,!DependenciesByGroup,!LeaderThread,!TaskStatus,!ThreadManagement.

By default events are recorded with their timestamp and ordered accordingly. This can be disabled by setting the NANOS6_VERBOSE_TIMESTAMPS environment variable to 0.

The output is emitted by default to standard error, but it can be sent to a file by specifying it through the NANOS6_VERBOSE_FILE environment variable. Also the NANOS6_VERBOSE_DUMP_ONLY_ON_EXIT can be set to 1 to delay the output to the end of the program to avoid getting it mixed with the output of the program.