Revision history   OpenPOWER Library

 4.3. Scheduled Processes Area

 In the virtualization programming models, the PSL reads process elements from a structure located in system memory called the scheduled processes area (SPA). The SPA contains a list of processes to be serviced by the AFUs. The process elements contain the address context and other state information for the processes scheduled to run on the AFUs assigned to service the SPA structure. The SPA structure consists of two sections: a linked list maintained by system software and a circular queue maintained by the PSL. The circular queue section is only used for programming models where the context swaps are managed by the PSL. For all other programming models, the circular queue section is not used. Figure 4.3, “Structure for Scheduled Processes” shows the structure that contains the processes scheduled for the AFUs.

 

Figure 4.3. Structure for Scheduled Processes


 Table 4.1, “Structure of Scheduled Processes Area” defines the various fields and areas within the scheduled processes structure. The starting address of the area (SPA_Base) is defined by the PSL Scheduled Processes Area Pointer Register (PSL_SPAP_An). The size of the area (PSL_SPAP_An[size]) determines the number of process elements supported by the structure and the amount of storage that must be allocated. The storage must be contiguous in the real address space and naturally aligned to the size of the scheduled processes area.

 Note: The structure for the scheduled processes in Figure 4.3, “Structure for Scheduled Processes” contains an implementation-dependent system software area. This area is used to maintain the linked list pointers for maintaining the list of active process elements and the free list of process elements. How these pointers are maintained is implementation specific and outside the scope of the CAIA.

  

 

Table 4.1. Structure of Scheduled Processes Area

Mnemonic

Address (Byte)

Description

  start_of_SPA_area

 SPA_Base

 This is the start of the area in system storage used by system software to store the linked list of process elements scheduled for the acceleration function units (AFUs).

  •  Note: The process elements in this area must never be cached by the PSL in a modified state.

  end_of_linked_list_area

 SPA_Base + (n × 128) - 1;

where n = maximum number of process elements supported.

 This is the end of the area in system storage used by system software to store the linked list of process elements scheduled for the AFUs.

 Reserved

 SPA_Base + ((N+1) × 128)

 SPA_Base + ((N+2) × 128);

 where n = maximum number of process elements supported.

 Reserved area.

  sw_command_status

 SPA_Base + ((n+3) × 128);

 where n = maximum number of process elements supported.

 Software command for the first PSL assigned to service the process element. The last PSL assigned to service the process elements returns the status.

  •  Note: This location must never be cached by the PSL in a modified state.

 Note: Storage in the SPA above this address must not be read by system software.

  start_of_psl_queue_ area

 SPA_Base + ((n+4) × 128);

 where n = maximum number of process elements supported.

 This is the start of the area in system storage used by the PSLs for the queue of process elements waiting to run.

  end_of_psl_queue_ area

 SPA_Base + ((n+4) × 128) + (n × 8) - 1;

where n = maximum number of process elements supported.

 This is the end of the area in system storage used by the PSLs for the queue of process elements waiting to run.

  head_pointer

 SPA_Base + ((n+4) × 128) +

 (( ((n × 8) + 127) >> 7) × 128);

where n = maximum number of process elements supported.

 Pointer to the next location to insert a preempted process element.

 The head pointer value is an index from the start address of the PSL queue area.

  •  Note: This location is aligned to the next cache line offset following the end of the PSL queue. If the number of cache lines needed for the PSL queue area is even, this location is the next cache line plus 1.

  tail_pointer

 SPA_Base + ((n+4) × 128) +

 (( ((n × 8) + 127) >> 7) × 128) + 8;

where n = maximum number of process elements supported.

 Pointer to next process element to resume.

 The tail pointer value is an index from the start address of the PSL queue area.

  psl_chained_command

 SPA_Base + ((n+4) × 128) +

 (( ((n × 8) + 127) >> 7) × 128) + 128;

where n = maximum number of process elements supported.

 Command for next PSL assigned to service the process elements.

  end_of_SPA_area

 SPA_Base + ((n+4) × 128) +

 (( ((n × 8) + 127) >> 7) × 128) + 255;

where n = maximum number of process elements supported.

 End of the scheduled processes area.



loading table of contents...