iostadd Serviço do kernel
Propósito
Registra uma estrutura de estatísticas de E/S que é usada para atualização de estatísticas de E/S reportada pela subroutine iostat .
Sintaxe
Descrição
O serviço kernel iostadd é usado para registrar a estrutura de estatísticas de E/S que é necessária para manter estatísticas em um dispositivo. O serviço iostadd é tipicamente chamado por um driver de dispositivo de tty, disco ou CD-ROM para fornecer as informações estatísticas que são usadas pela subroutine iostat . A subroutine iostat exibe informações estatisticas para dispositivos de tty e disco no sistema. O serviço iostadd deve ser usado uma vez para cada dispositivo configurado.
O serviço kernel iostadd e a estrutura dkstat suportam Multi-Path I/O (MPIO). Para um dispositivo MPIO, a âncora é a estrutura do disco dkstat . Esta âncora deve ser a primeira estrutura dkstat que é registrada usando o serviço kernel iostadd . Quaisquer estruturas de caminho dkstat que são registradas posteriormente devem referencia o endereço da estrutura de âncora dkstat (disco) no campo dkstat.dk_mpio_anchor .
Para dispositivos tty, o parâmetro devtype tem um valor de DD_tty. Nesse caso, o serviço iostadd usa o parâmetro devstatp para retornar um ponteiro para uma estrutura ttystat .
Para dispositivos de disco ou CD-ROM com um valor devtype de DD_DISCO ou DD_CD-ROM, o chamador deve fornecer uma estrutura dkstat pintada e inicializada como parâmetro de entrada. Essa estrutura é apontada pelo parâmetro devstatp na entrada para o serviço kernel iostadd .
Se o suporte ao driver de dispositivo para um dispositivo for finalizado, a estrutura dkstat ou ttystat que é registrada com o serviço kernel iostadd deve ser desregulamentado chamando o serviço kernel iostdel .
Estruturas De Estatísticas De E/S
O serviço kernel iostadd usa duas estruturas que são localizadas no arquivo usr/include/sys/iostat.h : a estrutura ttystat e a estrutura dkstat .
A estrutura ttystat contém os seguintes campos:
| autorização | Descrição |
|---|---|
| rawinch | Contagem de caracteres brutos que são recebidos pelo dispositivo tty |
| caninch | Contagem de caracteres canônicos que são gerados a partir do processamento canônico |
| outch | Conte com a saída de caracteres para um dispositivo tty |
A segunda estrutura que é utilizada pelo serviço kernel iostadd é a estrutura dkstat , que contém informações sobre dispositivos de disco. Esta estrutura contém os seguintes campos:
| autorização | Descrição |
|---|---|
| diskname | 32-nome da cadeia de caracteres para o dispositivo lógico do disco |
| dknextp | Ponteiro para a próxima estrutura dkstat na cadeia |
| dk_status | Bandeiras de entrada de disco-status |
| dk_time | Tempo em que o disco está ativo |
| dk_bsize | Número de bytes em um bloco |
| dk_xfers | Número de transferências para ou a partir do disco |
| dk_rblks | Número de blocos que são lidos a partir do disco |
| dk_wblks | Número de blocos que são gravados no disco |
| dk_seeks | Número de operações de busca para discos |
| dk_version | Versão da estrutura dkstat |
| dk_q_depth | Profundidade da Fila |
| dk_mpio_anchor | Ponteiro para as âncoras de dados do caminho (disco) |
| dk_mpio_next_path | Ponteiro para o próximo caminho dkstat estrutura na cadeia |
| dk_mpio_path_id | ID do caminho |
tty Device Driver Suporte
Os comandosrawinchcampo na estrutura ttystat deve ser incrementado com o número de caracteres que são recebidos pelo dispositivo tty. Os comandoscaninchcampo na estrutura ttystat deve ser incrementado pelo número de caracteres de entrada que são gerados a partir do processamento canônico. Os comandosoutchcampo é aumentado pelo número de caracteres saída para dispositivos tty. Esses campos devem ser incrementados pelo driver do dispositivo, mas nunca sejam limpos.
Suporte ao Driver de Dispositivos
Um driver de dispositivo de disco deve executar estas quatro tarefas:
- Alocar e fixar uma estrutura dkstat durante a inicialização do dispositivo.
- Atualizar odkstat.disknamecampo com o nome lógico do dispositivo.
- Atualizar odkstat.dk_bsizecampo com o número de bytes em um bloco no dispositivo.
- Configure todos os outros campos da estrutura para 0.
- Alocar e fixar uma estrutura dkstat durante a inicialização do dispositivo.
- Atualize o campo
dkstat.disknamecom o nome lógico do dispositivo. - Atualize o campo
dkstat.dk_bsizecom o número de bytes em um bloco no dispositivo. - Configure o valor de
dkstat.dk_versionpara dk_qd_mpio_magic. - Configure o valor de
dkstat.dk_mpio_anchorpara 0 se a estrutura adicionada dkstat for o disco. - Configure o valor de
dkstat.dk_mpio_anchorpara o endereço da estrutura âncora (disco) do caminho (disco) dkstat , e configuredkstat.dk_mpio_path_idpara o ID do caminho se a estrutura adicionada dkstat for um caminho. - Configure todos os outros campos para 0.
Durante a atualização da operação da unidade, odkstat.dk_statuscampo deve mostrar o estado ocupado ou não ocupado do dispositivo. Ele pode ser feito configurando e redefinindo a sinalização IOST_DK_OCUPADO . Os comandosdkstat.dk_xferscampo deve ser incrementado para cada transferência iniciada para ou a partir do dispositivo. Os comandosdkstat.dk_xratecampo deve ser incrementado para cada transferência de leitura a partir do dispositivo. Os comandosdkstat.dk_rblksedkstat.dk_wblksos campos devem ser incrementados com o número de blocos que são lidos ou escritos.
Se o dispositivo suportar comandos de busca discreta, odkstat.dk_seekcampo deve ser incrementado com o número de comandos de busca que são enviados para o dispositivo. Se o dispositivo não suportar comandos de busca discreta, odkstat.dk_seekcampo deve ser deixado com um valor de 0.
O kernel base atualiza odkstat.dk_nextpedkstat.dk_timeCampos. Eles não devem ser modificados pelo driver do dispositivo após a inicialização. Para os dispositivos MPIO, o kernel base também atualiza o campo dkstat.dk_mpio_next_path .
- Configure o valor de
dkstat.dk_versionpara dk_qd_service2_magic. - Configure o campo
dkstat.ident.adapterpara o nome do adaptador se o driver não suportar MPIO.
- Aumente o campo
dkstat.__dk_rxferspara cada transferência de leitura. - Atualize o campo
dkstat.dk_q_depthcom o número de solicitações de E/S que estão em andamento. - Aumente o campo
dkstat.dk_q_fullquando o número de solicitações de E/S que estão em andamento atinge a profundidade máxima da fila. - Aumente o campo
dkstat.dk_rservpelo tempo de serviço que é o valor de base delta-time entre quando o serviço de kernel devstrat envia uma solicitação de leitura para o driver do adaptador e quando o serviço de kernel iodone retorna a solicitação do driver do adaptador. - Aumente o campo
dkstat.dk_rtimeoutquando o driver tentar uma solicitação de leitura falha novamente. - Aumente o campo
dkstat.dk_rfailedquando o driver retornar uma solicitação de leitura falha como um erro. - Atualize o campo
dkstat.dk_min_rservcom o tempo mínimo de serviço para uma solicitação de leitura. - Atualize o campo
dkstat.dk_max_rservcom o tempo máximo de serviço para uma solicitação de leitura. - Aumente o campo
dkstat.dk_wservpelo tempo de serviço que é o valor de base delta-time entre quando o serviço de kernel devstrat envia uma solicitação de gravação para o driver do adaptador e quando o serviço de kernel iodone retorna a solicitação do driver do adaptador. - Aumente o campo
dkstat.dk_wtimeoutquando o driver tentar uma solicitação de gravação falha novamente. - Aumente o campo
dkstat.dk_wfailedquando o driver retornar uma solicitação de gravação falha como um erro. - Atualize o campo
dkstat.dk_min_wservcom o tempo mínimo de serviço para uma solicitação de gravação. - Atualize o campo
dkstat.dk_max_wservcom o tempo máximo de serviço para uma solicitação de gravação. - Aumente e diminua o campo
dkstat.dk_wq_depthquando o driver enfilee e desfila uma solicitação de E/S. - Aumente o campo
dkstat.dk_wq_timepelo tempo de espera que é o valor da base delta-time entre quando o driver enfilia uma solicitação de E/S e quando o serviço de kernel devstrat envia a solicitação para o driver do adaptador. - Atualize o campo
dkstat.dk_wq_min_timecom o tempo mínimo de espera. - Atualize o campo
dkstat.dk_wq_max_timecom o tempo máximo de espera.
Parâmetros
| Item | Descrição |
|---|---|
| DEVTYPE | Especifica o tipo de dispositivo para o qual as estatísticas de E/S são mantidas. Os vários tipos de dispositivos são definidos no arquivo /usr/include/sys/devinfo.h . Atualmente, as estatísticas de E/S são mantidas apenas para discos, CD-ROMs e dispositivos mesquinhos. Os valores possíveis para este parâmetro são:
|
| devstatp | Aponta para uma estrutura de estatísticas de E/S para o tipo de dispositivo que é especificado pelo parâmetro devtype . Para um parâmetro devtype de DD_tty, o endereço de uma estrutura ttystat pintada é retornado. Para um parâmetro devtype de DD_DISCO ou DD_CD-ROM, o parâmetro é um parâmetro de entrada que aponta para uma estrutura dkstat alocada anteriormente pelo caller. Em uma plataforma que suporta chaves de armazenamento, o parâmetro passado em devstatp deve estar no domínio de proteção KKEY_PUBLIC ou KKEY_BLOCK_DEV . |
Ambiente de Execução
O serviço kernel iostadd pode ser chamado a partir do ambiente de processo apenas.
Valores De Retorno
| Item | Descrição |
|---|---|
| 0 | Indica que nenhum erro é detectado. |
| EINVAL | Indica que o parâmetro devtype especificou um tipo de dispositivo que não é válido. Para dispositivos MPIO, indica que uma âncora para uma estrutura de caminho dkstat não foi encontrada. |