Server threads in instrumentation output

The server program divides its operations into threads. In instrumentation output, the names of the threads identify the operations.

Only some of the threads in the instrumentation output are useful for diagnosing performance problems. The most important threads are for reclamation of storage pool volumes, migration of data from random-access storage pools, and backup of storage pools.

Reclamation of storage pool volumes

The main thread for a reclamation operation for a storage pool volume is called AfRclmVolumeThread. The main thread starts one or two child threads. Each child thread controls a thread that is called AgentThread. Data movement operations start with an AgentThread that reads an object from a volume that is being reclaimed. See Figure 1.
Figure 1. Threads for reclamation of storage pool volumes
The thread that is called AfRclmVolumeThread controls what objects are reclaimed on each volume. The main thread starts one or two child threads: SsAuxSrcThread, which controls the read operations, and SsSWThread, which controls the write operations. Each of these child threads controls a separate child thread that is called AgentThread, which reads or writes the data.

A typical data movement operation starts with an AgentThread that reads an object from a volume that is being reclaimed. That data is processed through the SsAuxSrcThread, AfRclmVolumeThread, and SsSWThread threads. Data movement ends when the data is written on the target volume by the AgentThread thread that writes the data.

Migration of data from random-access storage pools

The main thread for a migration operation for a random-access storage pool is DfMigrationThread. The child threads to complete the migration operation differ by operating system.
AIX® and Linux®
The main thread, DfMigrationThread, does the work of selecting the data for migration and the volumes that are read from and written to. The thread starts two child threads: SsAuxSrcThread, which controls the read operations, and SsSWThread, which controls the write operations. See Figure 2.
Figure 2. Threads for storage pool migration on AIX and Linux systems
See the text that precedes and follows the figure for a description of the image.

To read the data, the SsAuxSrcThread thread uses a DiskServerThread thread for each volume that must be read. The SsAuxThread thread uses multiple DiskServerThread threads if the data that is being migrated is on more than one volume.

DiskServerThread threads are independent of the SsAuxSrcThread thread. For each volume in a random-access storage pool, a DiskServerThread runs constantly to read and write from that particular volume. For example, if the storage pool has 10 disk volumes, then 10 DiskServerThread threads are always running. Because the SsAuxThread is not a parent for the DiskServerThread threads, you cannot use the ID of the SsAuxThread thread to find a DiskServerThread that is being used.

To write the data, the SsSWThread thread controls a child thread that is called AgentThread, which writes the data to the target volume.

Data movement starts with the DiskServerThread that reads the data from the volume that has the data to be migrated. That data is processed through the SsAuxSrcThread, DfMigrationThread, and SsSWThread threads. Data movement ends when the data is written on the target volume by the AgentThread thread that writes the data.

Windows
The main thread, DfMigrationThread, does the work of selecting the data for migration and the volumes that are read from and written to. The thread starts two child threads: SsAuxSrcThread, which controls the read operations, and SsSWThread, which controls the write operations. The SsAuxSrcThread thread reads data directly from the disks, without using other threads. For writing the data, the SsSWThread thread controls a separate child thread that is called AgentThread, which writes the data to the target volume.

See Figure 3.

Figure 3. Threads for storage pool migration on Windows systems
See the text that precedes and follows the figure for a description of the image.

Data movement starts with the SsAuxSrcThread that reads the data from the volume that has the data to be migrated. That data is processed through the DfMigrationThread and SsSWThread threads. Data movement ends when the data is written on the target volume by the AgentThread thread that writes the data.

Backups for random-access storage pools

The main thread for a backup operation for a random-access storage pool is DfBackupPoolThread. The threads for reading from the random-access storage pool differ by operating system.
AIX and Linux
The main thread, DfBackupPoolThread, controls the work for the backup operation, including selection of volumes and reading and writing the data. The thread starts two child threads: SsAuxSrcThread, which controls the read operations, and SsSWThread, which controls the write operations. See Figure 4.
Figure 4. Threads for backup of random-access storage pools on AIX and Linux systems
See the text that precedes the figure for a description of the image.

To read the data, the SsAuxSrcThread thread uses a DiskServerThread thread for each volume that must be read. The SsAuxThread thread uses multiple DiskServerThread threads if the data that is being migrated is on more than one volume.

DiskServerThread threads are independent of the SsAuxSrcThread thread. For each volume in a random-access storage pool, a DiskServerThread runs constantly to read and write from that particular volume. For example, if the storage pool has 10 disk volumes, then 10 DiskServerThread threads are always running. Because the SsAuxThread is not a parent for the DiskServerThread threads, you cannot use the ID of the SsAuxThread thread to find a DiskServerThread that is being used.

To write the data, the SsSWThread thread controls a child thread that is called AgentThread, which writes the data to the target volume.

Data movement starts with the DiskServerThread that reads the data from the volume that has the data to be backed up. That data is processed through the SsAuxSrcThread, DfBackupPoolThread, and SsSWThread threads. Data movement ends when the data is written on the target volume by the AgentThread thread that writes the data.

Windows
The main thread, DfBackupPoolThread, controls the work for the backup operation, including selection of volumes and reading and writing the data. The thread starts two child threads: SsAuxSrcThread, which controls the reading of data, and SsSWThread, which controls the writing of data. The SsAuxSrcThread thread reads the data directly from the disks, without using other threads. For writing the data, the SsSWThread thread controls a separate child thread that is called AgentThread, which writes the data to the target volume. See Figure 5.
Figure 5. Threads for backup of random-access storage pools on Windows systems
See the text that precedes and follows the figure for a description of the image.

Data movement starts with the SsAuxSrcThread that reads the data from the volume that has the data to be backed up. That data is processed through the DfBackupPoolThread and SsSWThread threads. Data movement ends when the data is written on the target volume by the AgentThread thread that writes the data.

Backups for sequential-access storage pools

The main thread for a backup operation for a sequential-access storage pool is AfBackupPoolThread. This thread controls the work for the backup operation, including selection of volumes and reading and writing the data. The main thread starts two child threads: SsAuxSrcThread, which controls the read operations, and SsSWThread, which controls the write operations. Each of these child threads controls a separate child thread that is called AgentThread, which either reads or writes the data. See Figure 6.
Figure 6. Threads for backup of sequential-access storage pools
See the text that precedes and follows the figure for a description of the image.

Data movement starts with the AgentThread that reads the data from the volume that is being backed up. That data is processed through the SsAuxSrcThread, AfBackupPoolThread, and SsSWThread threads. Data movement ends when the data is written on the target volume by the AgentThread thread that writes the data.

Copying active data for storage pool volumes

The main thread for a copy operation for a storage pool volume is called DfCopyActiveDataThread. The main thread starts one or two child threads. Each child thread controls a thread that is called AgentThread. See Figure 7.
Figure 7. Threads for copying active data for storage pools
See the text that precedes and follows the figure for a description of the image.

A typical data movement operation starts with an AgentThread that reads an object from a volume that is being copied. That data is processed through the SsAuxSrcThread, DfCopyActiveDataThread, and SsSWThread threads. Data movement ends when the data is written on the target volume by the AgentThread thread that writes the data.

Replicating data from a source replication server

The main threads for replicating data from a source replication server to a target replication server are NrReplicateFilespace. This thread determines the data that must be replicated, which is a database heavy task and it is expected that database activities are dominant. NrReplicateBatch threads then send the data to the target replication server over the network. To read the data, the NrReplicateBatch threads start a child thread, SsAuxSrcThread, which controls the read operations. The NrReplicateBatch thread sends the data that is identified by the NrReplicateFilespace threads to the target replication server. See Figure 8.

Figure 8. Threads for replicating data from a source replication server
See the text that precedes and follows the figure for a description of the image.
Time spent in "Thread Wait" by the NrReplicateBatch threads can be spent in one of the following ways:
  • Waiting for the NrReplicateFilespace thread to provide lists of files to replicate
  • Waiting for the SsAuxSrcThread to read the source data from storage
The NrReplicateBatch threads control the network messages that are sent to the target replication server and the database.

Expire inventory

The main thread for expire inventory is ExpirationProcessThread. Expire inventory does not move data and is a database intensive operation. It is expected that database operations are dominant in this thread. There might be several of these threads active, depending on the RESOURCE option that is used. See Figure 9.
Figure 9. Threads for expire inventory
See the text that precedes the figure for a description of the image.