新しい投稿

Pesquisar

質問
· 2024年10月4日

Why is the XML export different when executed through various methods (VS Code, Studio, and the console)?

I have three different methods for exporting classes and projects as XML files, but each one produces slightly different output:

  1. Studio (what I currently use for exporting): I export as a project (with the 'only project' option disabled). This generates all classes and the project in a single XML file.
  2. VS Code: This method only exports the classes, and it doesn't include the project in the XML file.
  3. Console export using %SYSTEM.OBJ.Export: I used the following command to attempt the same export as Studio: do ##class(%SYSTEM.OBJ).Export("MyProject.Prj, MyProject.*.cls", "TempDir/MyProject.xml", "/exportselectivity=0", "", "utf-8") This exports both the project and the classes, but with a slight difference. The order of the project and class entries is different compared to Studio.

In Studio, the project is positioned between class definitions, like this:

<Class name=MyProject.M...> ... </Class>
<Project name="MyProject">...</Project>
<Class name="MyProject.Pendenz">...</Class>
<Class name="MyProject.Protokoll">...</Class>

However, when exporting via the console, the project appears in a different place:

<Class name=MyProject.M...> ... </Class> 
<Class name="MyProject.Pendenz">...</Class>
<Project name="MyProject">...</Project>
<Class name="MyProject.Protokoll">...</Class>

It seems the console export orders items alphabetically, which results in this difference."

1 Comment
ディスカッション (1)2
続けるにはログインするか新規登録を行ってください
ディスカッション (0)2
続けるにはログインするか新規登録を行ってください
記事
· 2024年10月4日 4m read

eBPF: Parca - Criação de perfil contínua para IRIS Workloads

 

Então, se você está acompanhando do post anterior ou entrando agora, vamos passar para o mundo dos aplicativos eBPF e dar uma olhada no Parca, que se baseia em nossa breve investigação de gargalos de desempenho usando eBPF, mas coloca um aplicativo incrível no topo do seu cluster para monitorar todas as suas cargas de trabalho iris, continuamente, em todo o cluster!

Perfilamento Contínuo com Parca, Cargas de Trabalho IRIS em Todo o Cluster

Parca

Parca é nomeado pelo Programa para Avaliação Regional do Clima Ártico (PARCA) e a prática de perfilamento de núcleos de gelo que tem sido feita como parte dele para estudar a mudança climática. Este projeto eBPF de código aberto visa reduzir algumas emissões de carbono produzidas pelo uso desnecessário de recursos de data centers, podemos usá-lo para obter "mais por menos" com consumo de recursos e otimizar nossas cargas de trabalho nativas da nuvem executando IRIS.

Parca é um projeto de perfilamento contínuo. Perfilamento contínuo é o ato de selecionar perfis (como CPU, memória, E/S e muito mais) de programas de forma sistemática. A Parca coleta, armazena e torna os perfis disponíveis para serem consultados ao longo do tempo e, devido à sua baixa sobrecarga usando eBPF, pode fazer isso sem prejudicar as cargas de trabalho alvo.

Onde

Se você achou que monitorar um kernel que executa vários namespaces de kernel Linux era legal no último post, Parca consegue reunir tudo isso em um só lugar, com um único painel de vidro em todos os nós (kernels) em um cluster.


 

Parca tem dois componentes principais:

  • Parca: O servidor que armazena dados e permite que sejam consultados e analisados ao longo do tempo
  • Parca Agent: Um perfilamento sistema completo baseado em eBPF que roda nos nós.

Para pular direto no "Parca aplicado", eu configurei Parca no meu cluster com o seguinte:
 

 kubectl create namespace parca
 kubectl apply -f https://github.com/parca-dev/parca/releases/download/v0.21.0/kubernetes-manifest.yaml
 kubectl apply -f https://github.com/parca-dev/parca-agent/releases/download/v0.31.1/kubernetes-manifest.yaml

Resulta em um daemonset, executando o agente em todos os 10 nós, com cerca de 3-4 cargas de trabalho iris espalhadas pelo cluster.

Observação: Parca também funciona de forma autônoma, não é necessário k8s reqd!

Vamos Perfilar

Agora, sei que tenho algumas cargas de trabalho neste cluster de interesse, uma delas é uma carga de trabalho fhir que está atendendo a um GET no endpoint /metadata para 3 pods em um intervalo para amigos que estou tentando impressionar em uma festa eBPF, a outra é uma carga de trabalho 2024.2 pura executando o seguinte como um JOB:

Class EBPF.ParcaIRISPythonProfiling Extends %RegisteredObject
{

/// Do ##class(EBPF.ParcaIRISPythonProfiling).Run()
ClassMethod Run()
{
    While 1 {
            HANG 10
            Do ..TerribleCode()
            Do ..WorserCode()
            Do ..OkCode()
            zn "%SYS"
            do ##class(%SYS.System).WriteToConsoleLog("Parca Demo Fired")
            zn "PARCA"
    }
}

ClassMethod TerribleCode() [ Language = python ]
{

    import time
    def terrible_code():
        time.sleep(30)
        print("TerribleCode Fired...")
    terrible_code()
}

ClassMethod WorserCode() [ Language = python ]
{
    import time
    def worser_code():
        time.sleep(60)
        print("WorserCode Fired...")
    worser_code()
}

ClassMethod OkCode() [ Language = python ]
{

    import time
    def ok_code():
        time.sleep(1)
        print("OkCode Fired....")
    ok_code()
}

}

Agora, eu coloquei um serviço metallb no serviço parca e mergulhei direto no console, vamos dar uma olhada no que podemos observar nas duas cargas de trabalho.

Execução Python

Então eu não consegui o que eu queria dos resultados aqui, mas eu consegui algumas dicas sobre como o IRIS está fazendo toda a integração python.

No Parca, eu restringi ao pod particular, somei ele pela mesma coisa e selecionei um intervalo sensato:

E aqui foi o perfil resultante:

Consigo ver o irisdb executando o Python, rastreios com o ISCAgent e, à direita, basicamente coisas de inicialização do IRIS dentro do container. Para ser honesto, esperava ver os métodos Python, então preciso investigar mais a fundo. Porém, aprendi que o pythoninit.so é a estrela do show quando se trata de chamadas Python.


FHIR Thinger

Agora este aqui mostra alguns rastreios de uma perspectiva de kernel relevante para uma carga de trabalho FHIR. À esquerda, você pode ver as threads apache para o servidor web levantando a api, e você também pode ver nos rastreios irisdb o desempacotamento de JSON.

Tudo gerado a partir de uma thread por uma festa conhecida como zu210fun!

Agora, vamos dar uma olhada na mesma carga de trabalho no Grafana, enquanto o Parca exporta para observabilidade:


Não é revolucionário, eu sei, mas o objetivo é o perfil distribuído de um aplicativo IRIS com um eBPF, de forma leve, em todo um cluster... com o único objetivo de nunca mais ter que pedir a um cliente um relatório pButtons!

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
お知らせ
· 2024年10月4日

Since VS Code 1.94 the Explorer's Find widget (Ctrl+Alt+F) on server-side (isfs) folders requires v2.12.9-beta.4 or later with proposed APIs enabled

This is a consequence of work being done by the VS Code team to improve Find in Explorer.

Symptoms without proposed APIs:

Note the continual clock badge and progress bar.

With proposed APIs enabled you will require v2.12.9-beta.4 or later, otherwise the find runs but returns no results.

See https://github.com/intersystems-community/vscode-objectscript/issues/1443 for more information.

1 Comment
ディスカッション (1)1
続けるにはログインするか新規登録を行ってください
記事
· 2024年10月4日 3m read

Embedded Python を利用する時の注意点

IRISはPythonの豊富なライブラリや既存のPythonプログラムをそのまま利用する事も、COS内でネイティブにコーディングする事も可能となりました。
しかし開発において、いくつかの問題点があります。

1. Pythonのバージョン

Pythonを使ったプロジェクトを構築していると、バージョンの問題にあたる時があります。
古いバージョンで開発していたところに、使いたいライブラリが対応していなかった等です。
しかし、IRISのEmbedded Pythonを利用する場合には、Pythonランタイムのバージョンに影響される為、プロジェクトで使用するバージョンは、プロジェクト単位はなく、IRISのバージョン単位で決まってしまいます。
また、現時点ではこのPythonランタイムをアップグレードする事はできません。

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください