Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

235
Views
Docker y -march nativo

Mi aplicación se beneficia enormemente de las características avanzadas de la CPU a las que gcc puede acceder cuando se ejecuta con -march native . Docker puede suavizar las diferencias en el sistema operativo, pero ¿cómo maneja las diferentes CPU? Para construir una aplicación que pueda ejecutarse en cualquier CPU, tendría que construir para amd64, perdiendo mucho rendimiento. ¿Existe una buena manera de distribuir imágenes de Docker cuando la aplicación debe compilarse por separado para cada arquitectura de CPU?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Docker no maneja la CPU en absoluto. Es solo una composición del espacio de nombres del núcleo , capas del sistema FS (por ejemplo, UnionFS ) y cotización de procesos .
Cuando ejecuta algo en un contenedor docker, es solo un ejecutable que se ejecuta en su sistema operativo , sin virtualización , tiene acceso solo a un conjunto seleccionado de objetos del kernel (por ejemplo, dispositivos) y está conectado a una jerarquía FS que resulta de la superposición de varios FS ( incluido el del contenedor docker).

Por lo tanto, Docker no maneja la CPU en absoluto, es completamente ortogonal a su problema.

Como comentó Peter, hay esencialmente dos formas de despachar CPU:

  1. Carga la biblioteca dinámica correcta (pero cada llamada de función a la biblioteca usa un puntero).
  2. Construye varias versiones del mismo binario enlazado estáticamente y ejecuta la correcta.

El problema principal es que, en ocasiones, las extensiones ISA son ortogonales y esto hace que las combinaciones (es decir, el número de bibliotecas/binarios) crezcan exponencialmente. Entonces, considerando que está tratando con la base de usuarios de Docker, puede simplificar un poco el enfoque (si las combinaciones son un problema):

  1. Haga que se requieran algunas extensiones ISA (si la ausencia de las mismas degradaría demasiado el rendimiento). Para las extensiones opcionales, puede usar uno de los enfoques de arriba.
  2. Cree solo unos pocos contenedores de referencia. Por ejemplo, uno para el amd64 genérico, uno para amd64-avx , uno para amd64-avx2-aesni-tsx y similares. La idea es crear solo unos pocos contenedores que cubran todos , la mayoría y algunos de sus usuarios.

EDITAR
Como señaló BeeOnRope en los comentarios , Dockers tiene una versión que se ejecuta en Windows. Utiliza Hyper-V para ejecutar una máquina virtual Linux con la versión Linux de docker .
Como Hyper-V es un VMM nativo, además de una capa adicional, se aplican las mismas consideraciones.
Del mismo modo, también hay una versión para macOS. Esta vez utiliza un marco de hipervisor basado en xhyve .

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!