Visão geral e teste comparativo do PC "Elbrus 401 - PC". Adição - Perguntas e Respostas

Talvez o principal resultado da publicação desta revisão , além de familiarizar o público com as primeiras impressões independentes do novo computador, tenha sido o desejo da própria empresa MCST de revelar mais detalhes, eliminar os mal-entendidos e responder às perguntas levantadas no artigo e nos comentários a ele. Algumas dessas questões são tão fundamentais que merecem um artigo separado e, portanto, requerem um estudo sério. Agora, veremos as que melhor se encaixam no formato da entrevista.

401-PC   100 %



Conteúdo




Pontos gerais


Para entender corretamente a posição da empresa de ICST nas perguntas abaixo, é necessário imaginar seu passado, presente e planos para o futuro - além desse contexto, alguns fatos podem parecer estranhos.

,   .   ,  ,  , .         ,   .  —     ,       (  ,    ).   « »,   .

Agora, o MCST realmente quer entrar no mercado civil - primeiro no setor corporativo, que está mais próximo da experiência atual e depois no segmento de consumidores, ou seja, nas massas mais amplas. É claro que, se os clientes empresariais estão de alguma forma prontos para arcar com os custos adicionais (mas não é claro o que os clientes tradicionais do MCST estão prontos para arcar), especialmente quando as vantagens de escolher um exclusivo caro são claras, a pessoa comum vota com uma carteira o mais acessível produtos, concordando com um produto de menor qualidade e, às vezes, com uma completa falta de suporte do fabricante. E mesmo as pessoas comuns desejam coisas novas - dê a elas o dobro do número de transistores a cada ano e meio, a versão mais recente do kernel, bibliotecas de sistemas e programas de aplicativos; e não é tão importantequantos erros antigos foram eliminados lá e quantos novos apareceram, quanto o software ficou mais pesado e como agora fica mais lento nas máquinas da geração anterior.

      , —    ,      ,    ,   ,   ,   ,  .    ,   , , , , —   ,  Intel  Microsoft,   .   ,   ,   , —   .  , , : , ,     , — , .

Também existe um entendimento de que os produtos de consumo devem ser tão abertos, é possível e aconselhável: por exemplo, que documentação, distribuições de instalação de software e atualizações oportunas para ele, os códigos-fonte desses programas estejam disponíveis gratuitamente, que uma plataforma para consulta pública e troca de experiências, literatura educacional para iniciantes e especialistas. Mas isso também não aparece sozinho da noite para o dia, e a empresa ainda está no começo do caminho para conquistar os corações e as mentes dos clientes em potencial.

Como é difícil abandonar velhos hábitos, especialmente quando ainda não há prática de fazer negócios em um ambiente completamente diferente, é necessário fazer um desconto no fato de que, quando os funcionários da empresa respondem a perguntas mais detalhadas no texto, dizendo "usuário", eles ainda costumam ter o tipo de seu cliente clássico com quem há um contato pessoal e um contrato direto, e muitas vezes também um contrato adicional de não divulgação, esse cliente não está interessado em publicidade e sabe que pode contar com qualquer capricho pelo seu dinheiro. Mas, como pode ser visto em muitas respostas, esse modelo não é mais considerado o único. Aqui também tudo se desenvolverá gradualmente, passo a passo.

Produção e Promoção


Em qual planta a CPU e o KPI são produzidos? Em quais volumes? É verdade que a produção é reduzida (suspensa) por dois anos?

Não há segredo aqui: novos microcircuitos agora são produzidos apenas na Ásia. E se pretendemos competir seriamente no mercado livre, ainda não há alternativa. Outra coisa é que, então, a questão natural da segurança da informação surge em aplicações críticas, mas para uma categoria especial de clientes, é possível organizar a produção nas instalações locais em quantidades limitadas - com um nível de preço apropriado. O primeiro (e bem-sucedido) projeto desse tipo é o processador Elbrus-2SM: seus cristais são produzidos na fábrica da Micron em Zelenograd.

A liberação de microcircuitos não para - além disso, eles estão sendo constantemente ajustados. Simplesmente, pelos padrões modernos, volumes de menos de mil cristais por ano são considerados produção em pequena escala, e o pedido é feito apenas ocasionalmente, um transportador 24 horas por dia não é necessário aqui.

Muitos processadores, nesta fase, atendem às necessidades domésticas, mundanas e experimentais. Por exemplo, um complexo de computação foi montado recentemente com 32 módulos 1U com quatro processadores Elbrus-4C cada - um total de 512 núcleos. Qualquer pessoa que tenha tarefas interessantes para esse sistema pode solicitar um tempo de máquina. (Resumidamente, quais classes de programas são executadas com mais eficiência na arquitetura E2K e como otimizar seu código-fonte serão descritas abaixo e está planejado para abordar esse tópico com mais detalhes em uma publicação separada.)

Em que volumes de produção será possível reduzir o custo do kit "placa-mãe + processador" para um nível aceitável para uma ampla gama de clientes? Em quanto tempo a indústria eletrônica russa poderá fornecer esses volumes?

Para atingir um nível de cerca de US $ 1.000, é necessário produzir pelo menos 10 mil produtos acabados anualmente, e avançar ainda mais em direção ao comprador é possível apenas com um fluxo de cerca de 100 mil produtos por ano. Obviamente, toda a produção deve se concentrar na China, ou as fábricas domésticas devem funcionar muito bem para reduzir o custo da logística e os custos de produção. Agora todas as placas-mãe fabricadas pelo MCST são montadas em fábricas russas.

Em que volumes de produção será justificado o lançamento de uma versão simplificada do processador para sistemas de 1 soquete - sem blocos de interação entre processadores e acesso à memória remota?

Mesmo 10 mil cristais por ano não justificam uma mudança na topologia. Em vez disso, faria sentido livrar-se das conclusões não utilizadas, o que reduzirá a área do substrato, mas, no futuro próximo, mesmo isso não se justificará.

Quanto custará a licença do sistema operacional se as vendas de componentes começarem separadamente?

Até agora, esse esquema de vendas não foi executado, mas provavelmente a experiência dos colegas do Alt Linux será adotada - para uso pessoal, o preço definitivamente não será pesado.

Quando esperar sistemas prontos com base no Elbrus-8C? As características dos futuros processadores estão definidas? O próximo modelo terá 16 núcleos e uma frequência de clock de 2 GHz, por exemplo?

Modelos de pré-produção de máquinas de processador único baseadas no G8 podem ser vistos neste verão. O próximo passo é um ligeiro aumento na frequência (até 1,5 Hz) e uma duplicação do número de unidades de computação de ponto flutuante que são a principal força motriz desta plataforma - esse processador já está sendo desenvolvido com o nome de trabalho "Elbrus-8SV". Um processador com 16 núcleos está planejado para ser lançado em 2020.

Por que o sistema de nomes de hardware e software é tão confuso?

Quando você tem apenas alguns produtos básicos em seu ativo, não é difícil entender a nomenclatura, especialmente para um profissional. Agora, quando o espectro de hardware e software está se expandindo, quando há uma orientação para o usuário médio, o sistema de nomes está gradualmente sendo levado a um formato compreensível para um leigo.

Esclarecimentos importantes.É errado mencionar a designação "Elbrus 2000", bem como a abreviatura "E2K" no contexto de produtos modernos: o nome oficial dessa arquitetura de microprocessador é "Elbrus", sem sufixos. O nome "Elbrus-2000" foi escolhido para a arquitetura, que eles planejavam implementar em conjunto com empresas ocidentais em 2000. No início de 1999, um artigo descrevendo a arquitetura do microprocessador "Elbrus-2000" foi impresso na revista Microprocessor Report, publicada em inglês. como "Elbrus-2000" e em forma abreviada - "E2k". A arquitetura atual da Elbrus foi substancialmente refinada com relação à arquitetura E2k, esta é a terceira versão, portanto, o uso da notação antiga não está totalmente correto. Tambéma abreviatura E2K (com a letra maiúscula "K") pode ser interpretada pelos técnicos ortodoxos em 2048, o que é absolutamente inútil.

Suporte ao usuário


Existe documentação eletrônica? Você está planejando colocar a documentação em domínio público para download gratuito para quem quiser (independentemente do fato da compra do equipamento)?

A documentação pode ser baixada agora, mas até agora apenas um link foi enviado mediante solicitação. No entanto, nos próximos meses, está planejado o lançamento de um site de comunidade e suporte técnico, onde todas as informações serão de domínio público. Como estamos falando de dezenas de documentos, levará algum tempo.

Você planeja abrir o bugsilla para exibição pública? Crie uma FAQ, organize um fórum - site para uma troca aberta de experiências?

Você não pode simplesmente pegar e abrir um bugsilla, onde muitos tickets contêm informações "altamente sensíveis". Provavelmente, um bugzilla separado será criado para as massas, disponível para visualização e reposição por todos os participantes. E a experiência acumulada anteriormente nas perguntas mais frequentes será processada na FAQ, que também será publicada no novo site de suporte. Também haverá um fórum, provavelmente.

Que tal publicar o código fonte do software adaptado e enviar patches para o upstream de um projeto? Você está planejando aceitar patches de usuários? E quanto a recompensas por vulnerabilidades encontradas?

Os códigos-fonte não foram definidos para acesso público simplesmente porque os próprios clientes não eram públicos, e a demanda entre eles pelos códigos-fonte era pequena, e quem realmente precisava disso por curiosidade - ele enviou uma solicitação e recebeu tudo o que era necessário em particular. Está previsto que, para o consumidor em massa, em um futuro previsível, seja criado um repositório público, onde todo o código emprestado irá. A empresa não planeja abrir seus próprios desenvolvimentos, como o compilador LCC, - no final, o compilador Intel C ++ (ou seja, o MCST considera seu principal rival em termos de otimizações) também está fechado e se sente bem ao mesmo tempo.

Patches de usuários já são aceitos, até agora, também em particular, é claro. Será difícil imaginar como isso será ao expandir a base de clientes e uma onda de atenção dos entusiastas.

Enviar suas alterações para os autores dos projetos originais é sem dúvida uma coisa boa, mas alguém precisa fazer isso, você precisa conhecer a abordagem de cada projeto, para entender as características da cultura da comunidade. Uma tarefa mais viável é simplesmente compartilhar todo o código em domínio público: se houver um "embaixador da boa vontade" que esteja pronto para interagir com um ou outro rio acima, isso é ótimo. Até agora, o ICST não tem essa experiência.

Hardware


Como usar o adaptador de vídeo integrado em um ambiente gráfico? Quão confortável é o desempenho esperado para o trabalho em 2D?

Iniciar uma reconfiguração da tabela gráfica seria mais fácil executando o utilitário xorg-server.postinst . Os recursos de aceleração 3D do adaptador integrado estão completamente ausentes, mas o uso normal de aplicativos de desktop não deve causar nenhum inconveniente - certamente não é o mesmo que em computadores mais antigos. Provavelmente, será necessário gravar isso em vídeo e colocar um pequeno vídeo - em vez de mil palavras.

Quais placas gráficas discretas, além da Radeon HD 6450 / R5 230, são suportadas pelo sistema operacional? Quais funções de aceleração de hardware estão disponíveis para os aplicativos através do driver disponível no sistema?

Ele suporta toda a linha moderna da Radeon, compatível com o driver aberto para Linux. Como a nVidia é muito triste a esse respeito, seus produtos não têm suporte no sistema operacional Elbrus no momento.

O que pode explicar as velocidades anormalmente baixas de leitura e gravação de uma unidade de estado sólido, que nem sequer atingem a largura de banda nominal da interface SATA-2 através da qual está conectada?

Essa é uma limitação conhecida do chip 1991VG1YA, que implementa um controlador de interface periférica (KPI). Uma versão otimizada do controlador (KPI-2), na qual esse problema foi resolvido, será instalada nos sistemas com os novos processadores Elbrus-8C e Elbrus-1C +.

Por que o computador Elbrus 401 - PC possui um disco rígido de 1 TB se ele nem está configurado no sistema operacional, e o disco principal já oferece muito espaço livre?

O objetivo óbvio do disco rígido é armazenar grandes quantidades de dados, demandados pelo atual contingente de usuários. O fato de o disco não estar montado no sistema é uma falha, mas não significativa: alguns usuários também reformatam o cartão flash para atender às suas necessidades em vez da tradução binária, não é possível agradar a todos de uma vez.

Qual é o objetivo de pintar a fixação por parafuso de uma unidade de estado sólido, como uma vedação de garantia ou para impedir o auto-desaperto?

De fato, a tinta é principalmente uma rolha. O inversor pode ser desaparafusado - não anula a garantia, mas se algo quebrar, os engenheiros de serviço terão perguntas naturais para o usuário em relação às ações tomadas.

De onde vêm os identificadores de dispositivo PCI - por que muitos dispositivos de bordo têm o mesmo código de desenvolvedor (ID do fornecedor) da Intel?

O motivo é completamente prosaico - porque o sistema operacional Windows no modo binário é mais fácil de se sentir em casa. No entanto, devido à sua ligação paranóica dos códigos de ativação ao equipamento usado, esse sistema “mais amigável” ainda às vezes começa a agir.

Onde posso encontrar a descrição do módulo de firmware de inicialização confiável Echelon-E?

Há um mal-entendido: este produto é puramente software e é apenas um caso especial do MDZ "Echelon" usual, desenvolvido pela associação científica e de produção de mesmo nome. Essa ferramenta fornece inicialização confiável do computador, controle de integridade, identificação e autenticação do usuário antes de transferir o controle para o sistema operacional.

O módulo de controle remoto IPMI oferecido como uma opção para os servidores Elbrus-4.4 é um desenvolvimento independente ou é um produto final de fabricação estrangeira?

Obviamente, esse é um desenvolvimento independente, mas ainda não é um produto acabado - o módulo está no estágio de depuração.

Sistema operacional


Qual sistema de designação de versão é usado para o Elbrus OS?

A resposta correta já foi dada no artigo: o número da versão está escrito no arquivo / etc / mcst_version . Essa versão 2.2, que foi equipada com computadores do primeiro lote, na verdade não é mais relevante - agora é estável 2.3 e, no estágio de lançamento, é 3.0 (com o kernel 3.14).

Você planeja lançar atualizações regulares que seriam instaladas automaticamente a partir do repositório público? Por que todo o software instalado no sistema não está empacotado?

Sim, uma atualização automática está planejada, embora agora esse processo ainda seja manual mediante solicitação. Obviamente, para isso, todo o software deve ser gerenciado pelo gerenciador de pacotes; se agora algo está errado, é apenas devido à depuração do processo de compilação.

Não é mais fácil portar diretamente uma das distribuições populares do Linux - por exemplo, o mesmo Debian?

É exatamente isso que uma das equipes está fazendo atualmente. De fato, o Debian oferece talvez a infraestrutura mais conveniente para criar distribuições derivadas. Além disso, o Debian agora possui a maior variedade de arquiteturas suportadas, pelo menos entre a família Linux, portanto, a criação de novas portas é mais lógica nesta base. No entanto, o procedimento de portabilidade para este kit de distribuição não é o mais suave e sistemático, portanto, você deve trabalhar duro. Mas quando o processo é depurado e automatizado, a sincronização com a linha principal se torna [quase] imediata. Mas se será possível dar status oficial a esse porto é uma grande questão.

Mas a lista de sistemas operacionais suportados não está planejada para ser limitada a apenas uma opção. O primeiro passo é esperar a porta ALT Linux, que não precisa de introdução. Além disso, está em andamento o trabalho de adaptação do QNX: o sistema operacional em tempo real protegido por Neutrino-Elbrus já está funcionando de alguma forma; especificar detalhes em desenvolvedores no centro de competência "SVD Embedded Systems".

Quão trabalhoso é portar o kernel do Linux? Por que a versão 2.6.33 do kernel agora é usada - não a mais recente, mas ao mesmo tempo não suportada pelo LTS?

O processo de portar o kernel Linux para uma plataforma de hardware específica é realmente bastante trabalhoso, mas o problema não está em um único esforço, mas no fato de que toda vez que muita coisa precisa ser iniciada quase desde o início, à medida que tudo flui, muda e muda. Por exemplo, acabamos de mudar para o kernel 3.14 e começamos a experimentar o ramo 4.x - e tudo mudou novamente.

É improvável que, no futuro previsível, seja possível alcançar a adoção de sua porta no mainline kernel.org, quando tudo é muito rigoroso, por um lado, e caótico, por outro. Portanto, a perspectiva mais provável é fornecer seu núcleo a todos que desejam criar independentemente esse kit de distribuição, que eles mesmos desejam criar.

Quais versões do kernel ( padrão , nn , rt ) são mais usadas para quais propósitos?

Para tarefas diárias, o kernel padrão é obviamente mais adequado. O kernel "nn" é destinado a roteadores de rede - é mais barato lidar com interrupções. O núcleo "rt" pode planejar o trabalho dos processos, observando as restrições nos intervalos de tempo alocados dentro dos limites estabelecidos, o que nos permite falar sobre cálculos em tempo real - não significa "rápido", mas significa "previsível", embora com o custo da perda de desempenho; nesse caso, o sistema geralmente só precisa executar o kernel e o aplicativo de destino, bem como o conjunto mínimo necessário de serviços em segundo plano.

É possível reiniciar rapidamente o [kernel] do sistema operacional sem reinicializar o hardware? Como acelerar o lançamento do sistema operacional em particular e do computador em geral?

Não é fornecida uma reinicialização rápida do sistema operacional sem a inicialização do hardware. A inicialização do equipamento pode ser acelerada, em primeiro lugar, de maneiras óbvias: por exemplo, desativando ou diminuindo o tempo limite de pesquisa dos servidores ATA sobre Ethernet, eles são necessários apenas para o download pela rede. Em segundo lugar, também existem métodos que não são óbvios à primeira vista: por exemplo, você pode desativar a limpeza da RAM, que geralmente é realizada para fins de segurança da informação. Bem, acelerar o lançamento do sistema operacional desativando todos os serviços desnecessários não precisa de comentários.

Software de aplicação


Para que fins a versão atual do Firefox 3.6 está posicionada se muitos sites que usam tecnologias modernas da Web não são compatíveis?

A versão atual do navegador na versão atual do sistema operacional Elbrus é 23.0, muito mais avançada em termos de funcionalidade e desempenho. Por exemplo, o teste JetStream agora está concluído com êxito, com uma pontuação de 7,8 pontos - não muito abaixo do nível de 8,2 pontos alcançado pela mesma versão do Firefox no modo de tradução binária x86, que usa um compilador JIT completo para JavaScript.

A versão 31.0 também foi lançada, mas se mostrou pior, mais lenta e eles decidiram não divulgá-la ao público. A próxima versão migrada será 44.0.

O sistema possui uma implementação de algoritmos criptográficos domésticos (incluindo versões atuais) disponíveis para programas C / C ++?

Agora o OpenSSL foi substituído por sua filial - LibreSSL, onde a criptografia russa é oficialmente integrada.

Como posso explicar o baixo desempenho da máquina virtual Java, demonstrada em vários testes?

O pacote OpenJDK 1.6.0 foi, em certo sentido, “uma quebra da caneta” - o trabalho em 1.7.0 e 1.8.0 já está em pleno andamento, onde conseguimos aumentar o desempenho em 3-4 vezes, a julgar por testes como o SPECjvm2008. Mas no caso geral, é claro, ainda há muito a otimizar.

Você está planejando portar Mono ou .NET na estrutura do Elbrus OS ou outro kit de distribuição?

Dada a popularidade desta tecnologia, isso é quase inevitável. Mas, levando em conta as mudanças atuais nas relações da Microsoft com a comunidade e o futuro incerto do projeto Mono, há um desejo natural de esperar um pouco quando as perspectivas se tornarem mais claras, para não perder tempo nos ramos sem saída do desenvolvimento.

Enquanto isso, se alguém precisar executar aplicativos de pré-lançamento, ele poderá usar o modo de transmissão x86. Na verdade, esse é um dos principais objetivos da tecnologia de transmissão - garantir compatibilidade durante o período de transição, até que a base de software se torne nativa. A propósito, agora a equipe do MCST está trabalhando ativamente para aumentar a eficiência da tradução de aplicativos usando compiladores just-in-time semelhantes.

Quais são as perspectivas para a Elbrus como plataforma de jogos, já que nos jogos modernos quase toda a carga recai na placa de vídeo, e muitas vezes não é necessário um processador poderoso?

Ninguém nunca fez essa pergunta a sério. Até agora, se apenas o jogo não estiver disponível nos códigos-fonte e não for verdadeiramente portátil, a única saída é iniciar o Windows ou o Steam OS no modo de transmissão binária, mas pode haver problemas com a ativação da licença devido às peculiaridades da ligação de hardware.

Ferramentas de arquitetura e desenvolvimento


Onde e como posso obter um guia de referência detalhado para o conjunto de instruções de arquitetura e máquina?

Agora toda a documentação é enviada a pedido. Mas há uma nuance: o conjunto de instruções está aberto, mas a maneira de codificar instruções na palavra de comando é informação fechada por razões históricas. A questão da divulgação completa de detalhes arquitetônicos foi repetidamente tentada resolver positivamente, mas até agora nenhuma decisão foi tomada.

No entanto, isso não apresenta um problema prático sério, pois, de acordo com o MCST, as informações na documentação disponível são suficientes, mesmo para programação de baixo nível através de intrínsecas, e gerar código de máquina por conta própria ou até mesmo escrever no E2K assembler é inútil em quase todos os casos. , exceto por um círculo muito, muito estreito de procedimentos do sistema de baixo nível. Somente o compilador é capaz de levar em consideração o tempo de execução das instruções e executar a otimização complexa necessária para o uso eficiente dos recursos dessa arquitetura.

Quais tipos de programas (algoritmos) podem ser implementados com mais eficiência no E2K, inclusive em comparação com outras arquiteturas que fornecem paralelismo implícito?

Inicialmente, o Elbrus-2000 foi projetado como uma plataforma de alto desempenho para computação de ponto flutuante, e não há plano de se afastar desse conceito - pelo contrário: como já mencionado, o próximo passo após o 8C será dobrar o número de unidades de computação de um tipo real. Nesse sentido, o caminho principal são programas matemáticos, cálculos científicos e de produção. Especialmente para essas tarefas, a biblioteca de algoritmos EML (Elbrus math library) é desenvolvida e otimizada, e o compilador LCC possui habilidades especiais em transformar alguns modelos de código fonte em chamadas para essa biblioteca.

Outro ponto forte é a presença de um grande arquivo de registro - até 256 registros estão disponíveis para o programa a qualquer momento, incluindo a possibilidade de renomear automaticamente. Isso abre caminho para otimizações em grande escala. Por exemplo, em uma famosa revisão da CNews , o teste gostcrypt foi apresentado.(esta é uma implementação privada de um dos clientes MTsST), na qual o Elbrus-4C quase duplicou o Core i7-2600 em uma frequência mais baixa - não há fraudes, mas foi incorretamente concluído que o motivo disso era a origem doméstica do algoritmo GOST 28147-89. De fato, o segredo do sucesso está na combinação bem-sucedida da estrutura desse algoritmo com as características quantitativas da arquitetura E2K e os recursos qualitativos do compilador LCC para otimização profunda. O compilador conseguiu implantar todo o ciclo de conversão de um único bloco e ramificá-lo no menor conjunto possível de palavras de comando, fornecendo trabalho com todos os blocos inteiros disponíveis, e esse foi um resultado impressionante.

Como escrever programas E2K eficazes em C / C ++ e Fortran? Existe um tutorial sobre este assunto?

Já foi feita uma tentativa de criar um guia de arquitetura, mas os autores se aprofundaram na descrição do hardware, acreditando que qualquer leitor poderia tirar conclusões óbvias desse material - acabou sendo aproximadamente o mesmo que publicado no famoso livro "Microprocessadores e complexos de computação da família Elbrus" . Quanto às instruções para programadores aplicados, infelizmente, até agora todo o conhecimento sagrado é armazenado apenas nos chefes da equipe envolvida no desenvolvimento do compilador; às vezes, compartilham suas revelações em palestras no Instituto de Física e Tecnologia de Moscou, mas ainda não amadureceram para compilar anotações em um livro. Enquanto isso, é recomendável ler as recomendações do Itanium como ponto de partida - conceitualmente, essa arquitetura é muito semelhante ao E2K.

Resumidamente, as principais técnicas podem ser formuladas da seguinte maneira.
  •   :   (inline),       , —    «». , ,    4  , , ,     .
  • :   likely  unlikely,   pragma loop count,  , .
  • : for, while,    break.
  •     , —     ,    . (   ,       .)
  • : ,    , —  ,   ,  x86. ,  , .
  • Use recursos otimizados sempre que possível, como a biblioteca EML mencionada acima. Como já mencionado, o compilador em si é capaz de substituir chamadas de funções comuns por otimizadas, mas não é onipotente e é melhor fazer tudo explicitamente.

Mais detalhadamente e com exemplos, esses métodos e outras sutilezas estão planejados para serem abordados em um artigo separado. O MCST está bem ciente da importância de espalhar “técnicas secretas” para extrair a produtividade máxima da Elbrus entre os programadores e planeja começar a transmitir a luz do conhecimento assim que a comunidade e sua infraestrutura forem formadas.

Existe um conjunto pronto de exemplos de código-fonte em C / C ++ com erros de acesso à memória para demonstrar como a tecnologia de execução segura de programa permite capturar esses erros nos estágios de compilação e execução?

Obviamente, existe esse conjunto de programas - como parte das ferramentas de teste de regressão, que são realizadas todas as noites. Você também pode usar exemplos da coleção SAMATE do American NIST Institute. No entanto, para maior clareza (é planejado escrever um artigo separado sobre este tópico), provavelmente será mais fácil escrever “arquivos de linha única” que ilustrem com precisão cada erro separadamente.

Você está pensando em escrever um back-end E2K para o compilador LLVM como uma alternativa ao LCC que procura ser como o GCC?

Investigações nessa direção foram realizadas, é claro, mas o veredicto até agora foi bastante negativo: a arquitetura do Elbrus-2000 é difícil de descrever usando o LLVM da maneira ideal. Ou seja, um compilador alternativo poderia ser lançado, mas o código de máquina gerado geraria perda de LCC em termos de velocidade. Mas a direção não é considerada um beco sem saída - é possível que, com o tempo, o back-end para o LLVM seja realizado.

O LCC pode exibir erros e avisos no formato aceito pelo GCC para que essas mensagens sejam reconhecidas no ambiente de desenvolvimento (por exemplo, Qt Creator) de acordo?

No momento, isso não é fornecido, mas um ticket já foi iniciado no bugsilla.

Onde posso obter o kit de ferramentas de compilação cruzada para o E2K no espaço de trabalho x86? Existe um processo inverso - gerando código x86 a partir do ambiente Elbrus e, em caso afirmativo, usando uma versão especial do LCC ou GCC regular?

As ferramentas de compilação cruzada para E2K (ou seja, o compilador LCC em execução no x86 Linux) estão disponíveis mediante solicitação. O processo inverso não é fornecido explicitamente: se isso for necessário, você pode executar algum sistema x86 no Elbrus no modo de conversão binária e usar o compilador disponível lá.

Quais tecnologias de virtualização são suportadas na plataforma Elbrus?

Não há suporte no momento. No entanto, em breve será possível usar contêineres.

Além disso, este ano o trabalho de criação de um kernel paravirtualizado do sistema operacional e o mecanismo de suporte para o hipervisor KVM deve ser concluído e esta é a principal reserva na parte dependente da arquitetura para a implantação de uma infraestrutura de nuvem completa, como o OpenStack. Enquanto outras arquiteturas, ao trabalhar no ambiente Qemu / KVM, contam com virtualização de hardware completa, opcionalmente usando drivers virtio paravirtuais para E / S e interceptação de instruções privilegiadas suportadas pelo próprio processador, a parte dependente da arquitetura do KVM está sendo desenvolvida para a Elbrus fornecer a para-virtual modo operacional quando o sistema convidado trabalha em estreita colaboração com o hipervisor e, em vez de executar instruções privilegiadas, chama as funções da API hypercall.

É sabido que a Intel está constantemente aprimorando sua arquitetura e microarquitetura, enquanto aumenta a produtividade. Como a arquitetura da Elbrus está se desenvolvendo nesta parte?

O desenvolvimento se move em várias direções.
  • O foco está em melhorar o desempenho do núcleo do processador para acelerar aplicativos de thread único. Isso é alcançado aumentando o número de operações executadas simultaneamente (implementadas na próxima quarta versão do sistema de comandos), usando registros mais amplos para operações em dados vetoriais (implementados na 5ª versão) e melhorando a hierarquia do subsistema de memória. Ao mesmo tempo, a compatibilidade com versões anteriores da arquitetura é mantida.
  • A segunda direção é a melhoria do microprocessador como um sistema em um chip. Com o desenvolvimento de tecnologias mais finas de nanômetros nos microprocessadores, o número de núcleos do processador aumenta, o número de canais de acesso à memória aumenta para manter o equilíbrio do microprocessador, em alguns casos são adicionados núcleos gráficos especializados e controladores adicionais para interação com dispositivos periféricos.

Finalmente, o aprimoramento do compilador de otimização desempenha um papel significativo, com a ajuda da qual é possível extrair o paralelismo do programa e transformar o código em recursos paralelos da arquitetura - como foi enfatizado repetidamente, o compilador é realmente parte da arquitetura. A reserva de capacidade do compilador está longe de esgotar-se; o MCST vê aqui um campo muito amplo de esforços.

Tradução binária X86


Quais recursos e limitações a tradução binária possui?

Este tópico merece consideração em um artigo separado, mas brevemente a imagem é a seguinte. A transmissão pode ser de dois tipos - no nível do sistema e no nível do aplicativo. No primeiro caso, o sistema operacional convidado fornece acesso a todo o ambiente de hardware do computador e, no segundo, respectivamente, apenas as chamadas do sistema são transferidas do programa convidado para o kernel do sistema host Linux. Isso pode ser comparado com os emuladores qemu-system-x86_64qemu-i386portanto, o compilador não emula o processador convidado, mas recompila imediatamente o código da máquina convidada nas instruções nativas de sua arquitetura. Além disso, a conversão é realizada várias vezes, aumentando gradualmente o grau de otimização para as seções mais comuns do código, e os resultados são armazenados em um cache de longo prazo.

O tradutor no nível do sistema (não oficialmente chamado de "lintel" - "el-intel") suporta os conjuntos de comandos x86 e x86-64, e o tradutor no nível do aplicativo ("rtc", ou seja, compilador de tempo de execução) é compatível até agora apenas com programas de 32 bits, - A versão de 64 bits está em teste. No entanto, compatibilidade com a arquitetura AMD64 / EM64T não significa suporte automático para todos os novos conjuntos de instruções que podem ser encontrados em vários processadores Intel / AMD, como as versões mais recentes do SSE, AVX, AES-NI - os sinalizadores correspondentes nas informações do CPUID estarão ausentes.

Como usar um tradutor no nível do sistema?

Muito simples: ao iniciar o computador, você precisa especificar um cartão flash como um disco de inicialização. Se o cartão estiver vazio ou o próprio usuário tiver apagado o sistema de transmissão de lá, você poderá gravá-lo novamente a qualquer momento, copiando a imagem com o  comando dd .

O tradutor no nível do sistema possui um BIOS com o design original e, após a inicialização, a sequência POST usual aparece na tela, durante a qual você pode ir para o menu de configurações. A maioria dessas configurações é a mais comum, mas também há configurações específicas. Por exemplo, você pode controlar com flexibilidade a identificação do processador pelo CPUID, alterando não apenas o número da família e o modelo ou os sinalizadores de capacidade individual, mas também o nome do texto - isso é necessário para combater o comportamento anticompetitivo dos programas compilados usando o compilador Intel C ++. Outra opção específica é a conversão transparente do controlador SATA em PATA para garantir a compatibilidade com uma ampla gama de sistemas operacionais. Mas, apesar da presença dessas “varinhas mágicas”, a operação dos sistemas operacionais instalados em uma máquina x86 real não é garantida,- Isso é especialmente verdade no Windows, com a vinculação de uma licença ao hardware e uma atitude reverente em relação ao driver de disco do sistema.

Como usar o tradutor no nível do aplicativo?

Ainda mais simples: iniciando o programa de conversão, passando o caminho para o aplicativo convidado e o caminho para o diretório raiz do ambiente recriado. A questão toda é como obter uma imagem desse ambiente. Até o momento, apenas o ambiente da versão x86 do sistema Elbrus é fornecido de maneira padrão; no entanto, outros também são permitidos. Se o cliente achar difícil formar a imagem do sistema desejado de forma independente, os especialistas do MCST poderão fornecer a assistência necessária.

Sob um aplicativo convidado em execução (por exemplo, um intérprete de comando), um usuário pode iniciar outros programas convidados - de forma totalmente transparente. Em um determinado momento, várias instâncias do tradutor podem ser iniciadas ao mesmo tempo e cada instância pode funcionar em seu próprio ambiente; portanto, por exemplo, você pode tentar a mesma versão do navegador em diferentes distribuições ou, inversamente, versões diferentes do navegador no mesmo sistema (um exemplo exagerado, é claro, mas revela a essência).

Pode-se afirmar que, no modo de conversão binária, alguns benchmarks começam a funcionar ainda mais rápido do que os originalmente montados para o E2K. Para quais classes de programas e sob quais condições isso é possível?

Isso é realmente possível, por exemplo, quando a versão nativa do mecanismo JVM ou JS pode apenas interpretar o código do usuário, e a versão x86 comparada a ele possui um compilador JIT completo. Ao mesmo tempo, mesmo que haja várias transmissões, o código de bytes selecionado para otimização é primeiro compilado na linguagem de máquina x86 e, depois de algum tempo, é recompilado no E2K (além disso, três vezes, uma vez para cada nível otimizações), - de qualquer forma, o ganho final da compilação supera.

Quanto aos programas C / C ++ nativos, também há uma explicação lógica, até duas. Em primeiro lugar, embora o compilador LCC faça um trabalho titânico de otimização do código gerado, ninguém pode garantir que qualquer compilador para x86, especialmente o comercial, não funcione melhor em um caso específico. Em segundo lugar, é mais provável que um programa bem otimizado para x86 tenha sido simplesmente compilado levando em consideração a criação de perfil preliminar, enquanto o código-fonte simples foi alimentado para o compilador LCC sem avisos. Mas ceteris paribus, é claro, os programas nativos devem funcionar pelo menos não mais lentamente que os transmitidos - se esse não for o caso, um relatório de bug deve ser enviado aos desenvolvedores do LCC.

Medição de desempenho


Segundo especialistas do ICST, alguns benchmarks anteriormente populares não podem revelar o potencial de nenhuma das plataformas existentes. Pegue o mesmo UnixBench - com todo o respeito à sua idade venerável, está desatualizado e é igualmente inadequado para qualquer processador e sistema operacional modernos. Ambos os testes específicos do processador, Whetstone e Dhrystone, praticamente não são paralelizados e não podem ser executados em nenhuma execução não programada significativa - mesmo em arquiteturas com paralelismo explícito, embora implícito. E o restante dos testes geralmente é "sobre nada"; em vez deles, é melhor usar algo mais específico. A única vantagem do UnixBench é sua natureza de plataforma cruzada, razão pela qual ainda é usada hoje.

Você também não deve perder de vista o poderoso poder da criação de perfil. Por exemplo, os resultados do teste 7-Zip, que pareciam suspeitosamente altos na revisão do CNews, não são uma farsa, mas uma consequência de uma compilação de duas passagens. Outra questão é quanto essa otimização é útil no caso geral, ou seja, nos dados de entrada arbitrários. Por esse motivo, dificilmente faz sentido analisar todos os componentes do teste Pgbench, porque o desempenho do Postgresql pode se mostrar completamente diferente em dados reais. Mas, no caso específico do 7-Zip, é muito fácil verificar duas vezes: você precisa realizar outro teste enviando uma coleção de vários arquivos para a entrada. O único problema é que, se os arquivos não forem padronizados, a repetição do teste da mesma maneira não funcionará para quem o desejar e haverá ainda menos confiança nos resultados publicados.

Você deve estar ciente de que os benchmarks sintéticos geralmente são escritos tendo em vista uma arquitetura específica (inclusive porque seus autores estão acostumados a pensar dessa maneira) ou são personalizados para uma combinação específica de hardware e compilador. Por exemplo, o conhecido teste SPECcpu declara objetividade e imparcialidade; no entanto, nos códigos-fonte da versão 2006, é possível encontrar comentários de que essa ou aquela muleta foi adicionada especificamente ao compilador Intel C ++. E como não suspeitar da influência de um grande fornecedor quando 90% dos registros representam 36,6 mil resultados publicados?

Aplicações reais também nem sempre são um indicador, porque as seções mais críticas podem ser completamente escritas no assembler x86 ou conter muitas inserções e chamadas do assembler e funções especiais (intrínsecas), para as quais o OpenSSL é um bom exemplo. Acontece que o código de máquina lambido para brilhar é comparado com uma implementação de linguagem de alto nível, cujo objetivo principal é ser uma referência e não ideal.

Portanto, uma oferta aos leitores: vamos pensar juntos que testes - artificiais ou próximos da vida - podem ser feitos para ver quão forte a Elbrus é em suas tarefas relevantes. Não é necessário que sejam programas prontos, especialmente no que diz respeito a cálculos matemáticos, porque, digamos, multiplicação de matrizes - também é multiplicação de matrizes na África: a complexidade da tarefa é a mesma, seja ela executada por bibliotecas EML, BLAS / LAPACK otimizadas ou por uma função auto-escrita. Deixe suas idéias nos comentários.

O autor agradece à equipe do ICST por uma explicação detalhada e interessante.

Source: https://habr.com/ru/post/pt391259/


All Articles