Mejore el rendimiento del emulador de Android en Windows 7 x64

9

Estoy ejecutando Eclipse Helios en Windows 7 x64. Tengo un Core 2 Duo 2.0 Ghz con 4.0 GB que creo que debería ser suficiente, ya que nunca he tenido problemas de rendimiento con otras herramientas de desarrollo.

Cuando ejecuté mi primera aplicación en el emulador de Android (2.3.3 y 3.0), tardé al menos 5 minutos en cargar el sistema operativo y al principio ni siquiera ejecutó la aplicación HelloAndroid. Incluso cuando logré ejecutar la aplicación, el rendimiento era insoportable.

He intentado varias cosas para mejorar el rendimiento, pero no se muestran mejoras importantes. Creo que me estoy perdiendo algo.

Cosas que he probado:

En AVD Manager

  1. Tamaño de RAM del dispositivo a 512.
  2. Resolución de 640 x 480.
  3. Instantánea habilitada.

En Preferencias del proyecto \ Android

  1. \ Launch \ -cpu-delay 0 -no-boot-anim -cache ./cache -avd Android3

Cosas que no puedo probar: - Implementación en un dispositivo (no tiene ninguna).

Por cierto, he tenido el mismo problema en un MAC Mini 2.66 GHz 2 GB pero esta configuración marcó la diferencia.

¿Alguien puede dar algún consejo para mejorar este rendimiento pobre?

mikywan
fuente
Obtenga un quad-core con hyperthreading @ 2.8 GHz y una tarjeta de video loca. Je Pero en serio, el emulador es lento. En términos generales, la emulación siempre es lenta a menos que su hardware sea un orden de magnitud más potente. No creo que lo haga funcionar mucho mejor de lo que ya lo ha hecho.
Matthew leyó el
66
En realidad, el emulador no admite múltiples núcleos (todavía). Así que la velocidad del reloj realmente importa. Incluso en mi nueva máquina de desarrollo, tengo problemas de rendimiento, especialmente con el nido de abeja. Estoy hablando del último i7 quad core, memoria de 8 gb y un disco duro de estado sólido.
Bryan Denny
Ja, ¿entonces mi antiguo Pentium 4 de 3.0 GHz debería funcionar mejor (sin nada más importante en segundo plano)? Loco.
Mateo leyó el
@Bryan Denny Aunque el emulador no tiene subprocesos múltiples, darle múltiples núcleos ayuda a cambiar la carga de trabajo a núcleos menos utilizados, pero esto disminuye la estabilidad, lo que resulta en fallas periódicas. Entonces es una compensación de velocidad / estabilidad, pero prefiero usar todos los núcleos para la velocidad.
onik

Respuestas:

6

El emulador es lento porque es un qemu que emula una arquitectura de CPU completamente diferente a la utilizada por las PC de consumo: ARM (vs.x86 (_64) en su PC)

Esto significa que cada instrucción de CPU en la CPU ARM del emulador tiene que ser emulada, lo cual es per se lento . Además, el emulador es AFAIK de un solo subproceso. Esto significa que la aceleración solo se puede lograr con núcleos de CPU rápidos (los núcleos múltiples no ayudarán aquí) y una cantidad razonable de RAM.

Fluir
fuente
Emular una CPU tiende a ser lento, pero el emulador del teléfono también está emulando ARM y es mucho más rápido. Es más que solo los conjuntos de instrucciones. Honeycomb parece ser mucho más complejo (y probablemente requiere un procesador ARM más potente). Google TV es 86, así que me pregunto lo que su rendimiento será como emulador ... (Ya sea que emulan x86 o correr como un proceso nativo.)
idbrii
3

Podría intentar utilizar un emulador de terceros que, según mi experiencia, funciona muy bien. No voy a decirte que no se retrasará de vez en cuando, pero toma la versión de prueba y verás cuánto mejor funciona este emulador.

No es una aplicación gratuita, pero tampoco es costosa. Puedes encontrarlo en el emulador de Android YouWave . Pruébalo y vuelve a contactarnos;)

Hallaghan
fuente
0

Honeycomb (3.0) es notoriamente lento en el emulador. Primero, puede intentar que la mayor parte de su funcionalidad funcione para el teléfono, para minimizar el uso de Honeycomb.

Hay algunas configuraciones de BIOS para habilitar el soporte de virtualización en su CPU. Creo que activarlos puede acelerar el emulador, pero no estoy seguro. (No sé los nombres exactos de su sistema, pero tendrán "virtualización" o "vt-x" o algo en el nombre.

También podría intentar dedicar un procesador al emulador. Puede cambiar la "afinidad del procesador" para los procesos en Windows utilizando el administrador de tareas. Si lo cambia para que su emulador prefiera un procesador y sus otras tareas principales (como eclipse) eviten ese procesador, puede ver algunas ganancias. Si su procesador es hiperprocesado, asegúrese de tratar los dos núcleos virtuales como un núcleo y asigne el emulador para que prefiera ambos núcleos virtuales.

(Encontrar los procesos puede ser más fácil con ProcessExplorer porque puede hacer clic en el botón de destino y luego hacer clic en una ventana y le muestra el proceso para esa ventana).


Actualización: consulte la sección Uso de la aceleración de hardware en los documentos de Android para ver cómo usar su GPU y el soporte de virtualización en su CPU para acelerar el emulador.

idbrii
fuente
Los conjuntos de instrucciones de CPU mejorados no ayudarán a acelerar el emulador, porque básicamente es qemu que emula una CPU ARM.
Flujo
A menos que ayuden a qemu a procesar las instrucciones ARM a un ritmo más rápido. (Por lo tanto, puede coincidir con la velocidad del BRAZO). Tenga en cuenta que Honeycomb funciona más lentamente en el emulador que en un dispositivo real. Digamos que ARM tenía instrucciones SIMD, pero x86 no y en su lugar las emuló como operaciones en serie. Habilitar una extensión de CPU SIMD en x86 resolvería ese problema. Dicho esto, no sé qué hace el soporte de virtualización, excepto que está destinado a mejorar el rendimiento al simular CPU.
idbrii
La virtualización y la emulación no son lo mismo.
Lie Ryan
@Lie: Cierto, pero eso no viene al caso: el soporte de virtualización de Intel / AMD (en teoría) hace que el emulador de Android sea más rápido. Alguien probablemente sea impreciso con su nombre. (Supongo que el soporte de la CPU funciona tanto para la virtualización como para la emulación de la CPU, por lo que los proveedores de CPU no están realmente fuera de lugar). De hecho, el hecho de que no sean lo mismo no significa que no se puedan combinar en un sistema: "QEMU es un emulador y virtualizador de máquina genérico y de código abierto" .
idbrii el