The x-kernel provides two different facilities for tracing protocol execution. The first, which is described in this section, supports the conditional printing, in printf format, of statements taking from zero to six variables. Every protocol should make use of the trace facililty described in this section. The second, which is described in the next section, supports the collection of fine-grain trace data, and the storage of this data to files, where it can later be analyzed. Protocols use this more advanced facility only when they are being instrumented for detailed performance analysis.