4.3 Arquitetura do Sistema
4.6.3 Monitoramento para Coleta da Proveniˆ encia
A etapa de monitoramento est´a relacionada com o m´odulo monitor da Figura 4.2. Esse m´odulo captura as informa¸c˜oes dos sistemas de computadores usados pelo workflow, processos invocados para a execu¸c˜ao dos programas associados com as atividades e o conjunto de arquivos de dados de entrada e sa´ıda, ou seja, usados e gerados. O monitoramento ocorre em n´ıvel de sistema por meio do monitoramento de arquivos do sistema operacional Linux (kernel a partir da vers˜ao 2.6) e chamadas de processos. O sistema de monitoramento de arquivos recebe um parˆametro contendo o diret´orio raiz do SGWfC como o diret´orio inicial no qual o sistema dever´a identificar as modifica¸c˜oes no gerenciamento dos arquivos. Ele monitora todos os diret´orios recursivamente, tanto os j´a existentes quanto os que ser˜ao posteriormente criados. O monitoramento do sistema de arquivos ´e baseado nos eventos de acesso, cria¸c˜ao e movimenta¸c˜ao. O processo de acesso ´e caracterizado pela leitura de um arquivo. A cria¸c˜ao ´e o resultado da gera¸c˜ao de um novo arquivo dentro de um diret´orio. A movimenta¸c˜ao trata a transferˆencia do arquivo de um diret´orio de origem para um diret´orio de destino.
Quando uma atividade do workflow acessa um arquivo, o monitor identifica que essa atividade est´a usando essa entidade do tipo arquivo. Quando um diret´orio ´e modificado atrav´es da cria¸c˜ao de um novo arquivo, o monitor identifica que essa a¸c˜ao trata-se de uma gera¸c˜ao de uma entidade arquivo por uma atividade. Quando um workflow copia um arquivo de um diret´orio para o outro, o monitor identifica essa a¸c˜ao como um processo de deriva¸c˜ao, onde a c´opia foi derivada do arquivo original. A Figura 4.8 mostra o exemplo de dois eventos capturados pelo monitor Strace referente a abertura (open), denominado uso (used) no W3C PROV, e renomea¸c˜ao (renament ) de arquivos de dados.
Figura 4.8: Eventos de abertura e renomea¸c˜ao de arquivos realizada pelos monitores Foram desenvolvidas duas implementa¸c˜oes do monitor de arquivos, a primeira utilizando a ferramenta Strace1, que ´e uma implementa¸c˜ao do mecanismo de mo- nitoramento de sistema Ptrace e, a segunda denominada Repromonitor, que utiliza um conjunto de bibliotecas nativa do sistema operacional Linux, denominada ino- tify. O inotify ´e um subsistema do kernel do Linux que monitora eventos executados
sob os arquivos do sistema operacional. O Repromonitor aproveita essa capacidade do inotify para identificar as opera¸c˜oes executadas sob o diret´orio do workflow. A segunda implementa¸c˜ao tamb´em utilizou mecanismos de intercepta¸c˜ao da fun¸c˜ao de acesso aos arquivos para discriminar o tipo de opera¸c˜ao realizada. A Figura 4.9 apresenta as duas estrat´egias de implementa¸c˜ao do monitor de arquivos.
Figura 4.9: Estrat´egias de monitoramento de arquivos Strace (dir.) e inotify (esq.). O monitor representado `a esquerda na Figura 4.9 ´e invocado (1) para acom- panhar a execu¸c˜ao do workflow. Diante disto, ele solicita a execu¸c˜ao do workflow (2) e a medida que as atividades s˜ao executadas (3) ´e feita captura dos diret´orios de arquivos de dados associados com a atividade em execu¸c˜ao etapa (4). Todas as chamadas para o sistema operacional (5) s˜ao armazenadas em um reposit´orio consumido pela ferramenta inotify. O monitor, aqui denominado Repromonitor (ou Repro), consome as informa¸c˜oes obtidas pelo inotify sem interferir na execu¸c˜ao (7) e registra os eventos sob os arquivos.
J´a o monitor representado `a direita ´e invocado (1) da mesma forma para o acompanhamento da execu¸c˜ao do workflow. Esse monitor ´e baseado nos componen- tes Strace/Ptrace para fazer a captura de chamadas de sistema. Ele faz a devida chamada para a execu¸c˜ao do workflow (2) e a medida que as atividades s˜ao execu- tadas (3) ´e feita uma captura do comando de chamada de sistema por um cliente do Ptrace denominado tracee (4). A chamada de sistema capturada ´e enviada para o Strace (5), por meio do Tracer (6), que registra a chamada de sistema capturada, para em seguida, passar o comando para o sistema operacional (7). Esse monitor interfere diretamente na execu¸c˜ao do workflow inserindo uma sobrecarga para fazer o monitoramento.
Existem trˆes opera¸c˜oes b´asicas sob arquivos que s˜ao capturadas pelos monito- res: cria¸c˜ao, movimenta¸c˜ao e as c´opias de arquivos. Fazendo uma analogia com o padr˜ao W3C PROV, a cria¸c˜ao dos arquivos representa a opera¸c˜ao de gera¸c˜ao de uma nova entidade por um processo ligado a uma determinada atividade. As demais opera¸c˜oes, movimenta¸c˜ao e c´opia, representam a opera¸c˜ao de uso das en-
tidades por uma atividade. O monitor de arquivo constr´oi uma representa¸c˜ao de proveniˆencia associando os processos de computador com as atividades, os arquivos com as entidades e monta o relacionamento de gera¸c˜ao e uso entre as entidade e as atividades, tra¸cando o hist´orico de deriva¸c˜ao de um resultado. Durante a execu¸c˜ao das atividades ´e necess´ario movimentar um arquivo de um local para outro. Essa movimenta¸c˜ao acontece na troca de informa¸c˜oes de uma atividade antecessora para uma atividade sucessora. Essa opera¸c˜ao exige a identifica¸c˜ao e intercepta¸c˜ao da fun¸c˜ao de abertura do arquivo do programa de c´opia de arquivos.
Os dois monitores desempenham o mesmo papel, ou seja, ambos fazem o monito- ramento das opera¸c˜oes efetuadas sobre os arquivos durante a execu¸c˜ao do workflow cient´ıfico. Entretanto, o Strace funciona como um mecanismo de depura¸c˜ao captu- rando todas as interrup¸c˜oes e chamadas ao sistema operacional, e o repromonitor ´e ativado somente quando ocorre um evento relacionado aos arquivos ligados ao diret´orio de trabalho do workflow.
Ambos os monitores foram implementados para acompanhar a gera¸c˜ao e a uti- liza¸c˜ao dos arquivos manipulados nos sistemas de arquivos dos computadores remo- tos utilizados para a execu¸c˜ao de um workflow. No caso espec´ıfico do repromonitor, cada computador remoto recebe uma instˆancia cliente dos monitores, e a medida que o sistema de arquivo sofre modifica¸c˜oes, os clientes enviam as informa¸c˜oes sobre essas modifica¸c˜oes para o monitor servidor. As informa¸c˜oes s˜ao referentes a deno- mina¸c˜ao do diret´orio e s˜ao comunicadas para todos os outros clientes para que eles tenham conhecimento desse novo diret´orio, e possam, consequentemente, passar a monitor´a-lo. Portanto, o repromonitor utiliza um canal de comunica¸c˜ao exclusivo para informar essas cria¸c˜oes de diret´orios.
No caso do Strace n˜ao ´e necess´ario efetuar o compartilhamento de informa¸c˜oes sobre novos diret´orios, pois, como o Strace faz a intercepta¸c˜ao de chamadas de sistema e interrup¸c˜oes, ele tem conhecimento sobre todos os eventos e informa¸c˜oes sobre um determinado arquivo. Para manter a associa¸c˜ao dos arquivos com as atividades ´e necess´ario instrumentar o workflow de forma que sejam criadas pastas relativas a cada atividade e, consequentemente, todos os arquivos vinculados a essa atividade devem ser criados ou movidos para essa pasta.
O sistema de monitoramento de chamadas de processo recebe os comandos ne- cess´arios para a execu¸c˜ao do workflow no SGWfC. Ele executa o comando e obt´em o n´umero de identifica¸c˜ao do processo (process identificator - PID). O monitor usa o valor do PID para obter todas as informa¸c˜oes sobre as execu¸c˜oes dos programas derivados do processo vinculado a esse PID. S˜ao obtidas as informa¸c˜oes do nome dos programas, os parˆametros usados na chamada da execu¸c˜ao e o diret´orio de trabalho. O monitor cria uma ´arvore de dependˆencia que mostra a hierarquia de chamadas dos processos. A medida que o workflow ´e executado todas as informa¸c˜oes sobre
os processos s˜ao vinculadas `a ´arvore de execu¸c˜ao, tornando poss´ıvel identificar os programas e bibliotecas necess´arios para a posterior reprodu¸c˜ao.
O algoritmo 4.6.3 apresenta os passos usados na implementa¸c˜ao do Strace para identificar os softwares e bibliotecas invocados durante a execu¸c˜ao do workflow. Ini- cialmente, s˜ao declaradas 2 vari´aveis respons´aveis por listar: (1) os arquivos abertos e (2) os arquivos criados pelo workflow. Essas listas s˜ao definidas de forma que n˜ao sejam aceitos elementos repetidos. Tamb´em ser´a declarada uma vari´avel para a identifica¸c˜ao do evento de abertura ou cria¸c˜ao. A fun¸c˜ao recebe 2 parˆametros, o primeiro para identificar o programa que ser´a monitorado, ou seja, todos os pro- gramas derivados por ele (processos vinculados em uma ´arvore de execu¸c˜ao), e o segundo para informar o diret´orio do pacote reprodut´ıvel (local onde os arquivos monitorados ser˜ao armazenados).
O algoritmo faz verifica¸c˜ao da ocorrˆencia dos eventos de abertura e cria¸c˜ao de arquivos. O algoritmo fica aguardando uma dessas ocorrˆencias. Quando o algoritmo identifica um evento, e verifica o tipo de ocorrˆencia e discrimina o caminho do arquivo manipulado. Quando um evento ´e do tipo “cria¸c˜ao”, os dados do arquivo identificado s˜ao adicionados `a lista de arquivos criados, caso contr´ario, s˜ao armazenados na lista de arquivos abertos. Programas e bibliotecas s˜ao arquivos como outro qualquer que s˜ao lidos durante a execu¸c˜ao de um processo, portanto, s˜ao os arquivos envolvidos nesse evento que precisam ser armazenados no pacote reprodut´ıvel. Diante disto, o algoritmo cria uma nova lista contendo apenas os arquivos que existiam antes da execu¸c˜ao do workflow, ou seja, ele desconsidera os arquivos armazenados sob o evento de “cria¸c˜ao” e mant´em apenas aqueles identificados no evento de “abertura”. O algoritmo cria um novo arquivo para receber todos os arquivos contidos na lista de arquivos final que foram resultado do processo de remo¸c˜ao executado no passo anterior. A partir desse ponto ´e feita uma leitura nessa lista de arquivos para incluir cada arquivo identificado ao pacote de pesquisa reprodut´ıvel. Para cada arquivo informado na lista ´e verificada a sua existˆencia no sistema de arquivos para que ele possa ser adicionado ao pacote. ´E importante observar que o (Strace) n˜ao ´e a ´unica fonte de dados usada para identificar os arquivos e bibliotecas de um programa. S˜ao usados os arquivos que est˜ao listados em “/proc/PID/maps” do sistema operacional Linux. O arquivo maps lista as regi˜oes de mem´oria e arquivos que um dado programa tem acesso.