Appel système dr_reconfig

Objectif

Détermine la nature de la demande DLPAR.

Syntaxe

#include <sys/dr.h>

int dr_reconfig (flags, dr_info)
int flags;
dr_info_t *dr_info;

Descriptif

L'appel système Config dr_reconfig est utilisé par les applications DLPAR pour ajuster leur utilisation des ressources par rapport à une demande DLPAR. Les applications sont notifiées de l'utilisation via le signal CONFIGURATION DE SIGRECONFIG , qui est généré trois fois pour chaque événement DLPAR.

La première fois est de vérifier avec la demande si l'événement DLPAR doit être poursuivi. A l'aide de l'indicateur ECHEC DE DR_EVENT_FAIL , une application peut indiquer que l'opération doit être abandonnée, si elle n'est pas en sécurité DLPAR et que son fonctionnement est considéré comme vital pour le système.

L'application est notifiée la seconde fois avant l'ajout ou la suppression de la ressource, et la troisième fois par la suite. Les applications doivent tenter de contrôler leur priorité de planification et leur politique afin de garantir la livraison en temps opportun des signaux. Le système ne garantit pas que chaque signal envoyé est livré avant de passer à l'étape suivante de l'algorithme.

L'appel système Config dr_reconfig peut également être utilisé pour avertir les applications des modifications apportées à Partition de charge qu'elles exécutent. Les applications sont informées des modifications apportées à l'unité centrale, à la capacité de mémoire et à l'ensemble de ressources.

L'interface Config dr_reconfig est sécurisée par le gestionnaire de signaux et peut être utilisée par des programmes à unités d'exécution multiples.

La structure _info est déclarée dans l'espace adresse de l'application. Le noyau remplit les données de cette structure par rapport à la demande DLPAR actuelle. L'utilisateur transmet cette structure à l'identification de la requête DLPAR en cours, en tant que paramètre du noyau lorsque l'indicateur DR_RECONFIG_DONE est utilisé. L'indicateur DR_RECONFIG_DONE est utilisé par l'application pour notifier au noyau que les actions nécessaires pour ajuster l'utilisation des ressources ont été prises en réponse au signal CONFIGURATION DE SIGRECONFIG qui leur a été envoyé. Il est prévu que le gestionnaire de signaux associé au signal CONFIGURATION DE SIGRECONFIG appelle l'interface avec l'indicateur REQUÊTE DR_QUERY pour identifier la phase de l'événement DLPAR, prenne l'action appropriée et appelle l'interface avec l'indicateur DR_RECONFIG_DONE pour indiquer au noyau que le signal a été traité. Ce type d'accusé de réception du noyau dans chacune des phases DLPAR permet à un événement DLPAR de fonctionner efficacement.

Grâce à l'ajout de nouveaux champs à la structure dr_info, les applications DR-aware peuvent prendre en charge la fonction de micro-partitionnement.

Les bits Bindproc, Ensemble de logicielset Jeu de papier ne sont définis que si la demande est de supprimer un UC. Si Bindproc est défini, le processus ou l'une de ses unités d'exécution dispose d'une pièce jointe Processeur bindprocessor , qui doit être résolue. Si le bit Ensemble de logiciels est défini, le processus dispose d'une pièce jointe Workload Manager (WLM), qui peut être modifiée en appelant l'interface WLM appropriée ou en appelant la commande WLM appropriée. Si le bit Jeu de papier est défini, l'API Pset appropriée doit être utilisée.
Remarque: The Unité bcpu and Lcpu fields identify the cpu being removed and do not necessarily indicate that the process has a dependency that must be resolved. Les bits Bindproc, Ensemble de logicielset Jeu de papier sont fournis à cette fin.

Les bits Plock et Pshm ne sont définis que si la demande consiste à supprimer de la mémoire et que le processus dispose de la mémoire Plock ou est connecté à un segment de mémoire partagée réservée. Si le bit Plock est défini, le processus appellePlock pour se démettre. Si le bit Pshm est défini, l'application a réservé des segments de mémoire partagée, qui peuvent devoir être détachés. La demande de suppression de mémoire peut réussir dans tous les cas, s'il y a suffisamment de mémoire épinglable dans le système, de sorte qu'une action dans ce cas n'est pas nécessairement requise. La zone Trames sys_pinnable_frames fournit ces informations, mais cette valeur et d'autres valeurs statistiques ne sont que des approximations. Ils reflètent l'état du système au moment de la demande. Ils ne sont pas mis à jour lors de la demande. La taille actuelle de la mémoire physique peut être déterminée en référençant la zone _system_configuration.physmem .

Pour fournir une prise en charge des opérations DR liées à la mémoire réelle virtuelle, une nouvelle zone, Opération_de_dr_op, a été ajoutée à la structure _info . La zone Opération_de_dr_op fournit des informations sur l'opération DR en cours. En outre, toutes les opérations DR futures utilisent cette zone et les bits de ressources précédemment utilisés ne seront plus étendus.

Structure dr_wlm_info

typedef struct dr_wlm_info {
		unsigned int cpu_add : 1; // cpu wlm resource add for the WPAR
		unsigned int cpu_rem : 1; // cpu wlm resource remove for the WPAR
		unsigned int mem_add : 1; // memory wlm resource add for the WPAR
		unsigned int mem_rem : 1; // memory wlm resource remove for the WPAR
		unsigned int rs_cpu  : 1; // wlm cpu rset change for the WPAR
		unsigned int rs_mem  : 1; // wlm memory rset change for the WPAR
		unsigned int pad1    : 2; // un-used 
		unsigned int cpu_cap : 8; // percentage of cpu capacity of the WPAR
		unsigned int mem_cap : 8; // percentage of the memory capacity of the WPAR
		unsigned int pad2    : 8; // un-used 
} dr_wlm_info_t;

Structure dr_info

typedef struct dr_info {
	 unsigned int add : 1;	// add request
	              rem : 1;	// remove request
	              cpu : 1;	// target resource is a cpu
	              mem : 1;	// target resource is memory
	            check : 1;	// check phase in effect
	              pre : 1;	// pre phase in effect
	             post : 1;	// post phase in effect
	        posterror : 1;	// post error phase in effect
	            force : 1;	// force option is in effect
	         bindproc : 1;	// process has bindprocessor dependency
	         softpset : 1;	// process has WLM software partition dependency
	         hardpset : 1;	// process has processor set API dependency
	            plock : 1;	// process has plock'd memory
	             pshm : 1;	// process has pinned shared memory
	          ent_cap : 1;	// target resource:entitled capacity
	          var_wgt : 1;	// target resource:variable weight
	   splpar_capable : 1;	// 1/0 partition is/not splpar capable
	    splpar_shared : 1;	// 1/0 partition shared/dedicated mode
	    splpar_capped : 1;	// 1/0 partition capped/uncapped mode
       splpar_constrained : 1;  // Set to 1 if requested capacity
	                           update is constrained by PHYP to
	                           be within partition capacity bounds.
	                        // 

    unsigned int migrate : 1;    // migration operation
    unsigned int hibernate : 1;    // hibernation operation
    unsigned int partition : 1;    // resource is partition
    unsigned int topology_update : 1;	// topology update

    // The following fields are filled out for cpu based requests
    int lcpu;			// logical cpu ID being added or removed
    int bcpu;			// bind cpu ID being added or removed

    // The following fields are filled out for memory based requests
    size64_t  req_memsz_change;     // User request size in bytes            
    size64_t  sys_memsz;            // System Memory size at time of request 
    rpn64_t   sys_free_frames;      // Number of free frames in the system
    rpn64_t   sys_pinnable_frames;  // Number of pinnable frames in system
    rpn64_t   sys_total_frames;     // Total number of frames in system 


    // SPLPAR parameters.
    uint64_t  capacity;			// partition current entitled capacity
                                           if ent_cap bit is set, partition's
                                           current variable capacity weight
                                           if var_wgt bit is set.
                                        // 

    int	  delta_cap;		   	// delta capacity added/removed to
                                           current value depending on add/rem
                                           bit flag value above
                                        // 
    dr_wlm_info_t   dr_wlm;     // DR info for the WPAR    
    ushort	    dr_op;	 // type of DR operation

    ushort	    dr_pad;     // reserved pad field
    size64_t	    mem_capacity; // partition’s entitled 
I/O memory or variable capacity.
    ssize64_t   delta_mem_capacity; // amount of I/O being added/removed

    int  reserved[2];

} dr_info_t;

Paramètres

Article Descriptif
Flags Les valeurs suivantes sont prises en charge :
REQUÊTE DR_QUERY
Identifie la demande DLPAR en cours et les actions que la demande doit prendre pour se conformer à la demande DLPAR en cours. Ces informations sont renvoyées à l'appelant dans la structure identifiée par le paramètre _info .
ECHEC DE DR_EVENT_FAIL
Echec de l'événement DLPAR en cours. L'autorité racine est requise.
DR_RECONFIG_DONE
Cet indicateur est utilisé avec l'indicateur REQUÊTE DR_QUERY . L'application informe le noyau que les actions qu'il a prises pour se conformer à la demande DLPAR actuelle sont maintenant terminées. La structure _info identifiant la demande DLPAR renvoyée est transmise en tant que paramètre d'entrée.
_info Contient l'adresse d'une structure _info , qui est déclarée avec l'espace adresse de l'application.

Valeurs renvoyées

En cas de succès, l'appel système Config dr_reconfig renvoie un zéro. Si elle échoue, elle renvoie une valeur négative et définit la variable Errno sur la valeur d'erreur appropriée.

Codes d'erreur

Article Descriptif
EINVAL Indicateurs non valides.
ENXIO Aucun événement DLPAR en cours.
EPERM Droits d'accès root requis pour DR_EVENT_FAIL.
EINPROGRESS L'annulation de l'événement DLPAR ne peut se produire qu'au cours de la phase de vérification.