2 votos

El rendimiento del emulador de Android es extremadamente inestable

En primer lugar, espero que éste sea el lugar adecuado para plantear este tipo de preguntas; si no lo es, hágamelo saber.

Tengo un PC relativamente nuevo con 16 GB de RAM, Core i3 de 10ª generación, 4 núcleos físicos y 4 virtuales (hyperthreading), no tengo SSD. Se ejecuta Linux Mint y utiliza el KVM.

El primer año, más o menos, después de comprarme el ordenador, el emulador funcionaba de maravilla: era rápido y me lo pasaba en grande trabajando en mis aplicaciones.

Hace un par de semanas, me di cuenta de que el emulador se volvía ocasionalmente más lento (alrededor del 50-60 por ciento, para ser exactos) durante un minuto o dos, antes de volverse muy rápido durante 1-3 minutos.

Es muy extraño, es así:

  • Arrancar el emulador
  • Empieza rapidísimo
  • 2 minutos más tarde, de repente cae alrededor de 50-60 por ciento en la velocidad de alrededor de 1-2 minutos
  • Vuelve a ser rapidísimo durante algún tiempo

Aquí están mis estadísticas de configuración del emulador:

enter image description here enter image description here

(A veces utilizo emuladores AOSP, pero en este caso me limitaré a poner como ejemplo el emulador de la API de Google).

Esto es increíblemente frustrante - uso el emulador tantas veces, y tengo un PC relativamente nuevo.

Información para PC:

Architecture:            x86_64
  CPU op-mode(s):        32-bit, 64-bit
  Address sizes:         39 bits physical, 48 bits virtual
  Byte Order:            Little Endian
CPU(s):                  8
  On-line CPU(s) list:   0-7
Vendor ID:               GenuineIntel
  Model name:            Intel(R) Core(TM) i3-10105 CPU @ 3.70GHz
    CPU family:          6
    Model:               165
    Thread(s) per core:  2
    Core(s) per socket:  4
    Socket(s):           1
    Stepping:            3
    CPU max MHz:         4400.0000
    CPU min MHz:         800.0000
    BogoMIPS:            7399.70
    Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mc
                         a cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss 
                         ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art
                          arch_perfmon pebs bts rep_good nopl xtopology nonstop_
                         tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cp
                         l vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1
                          sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsav
                         e avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault
                          epb invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced 
                         tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase t
                         sc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed a
                         dx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsa
                         ves dtherm ida arat pln pts hwp hwp_notify hwp_act_wind
                         ow hwp_epp md_clear flush_l1d arch_capabilities
Virtualization features: 
  Virtualization:        VT-x
Caches (sum of all):     
  L1d:                   128 KiB (4 instances)
  L1i:                   128 KiB (4 instances)
  L2:                    1 MiB (4 instances)
  L3:                    6 MiB (1 instance)
NUMA:                    
  NUMA node(s):          1
  NUMA node0 CPU(s):     0-7
Vulnerabilities:         
  Itlb multihit:         KVM: Mitigation: Split huge pages
  L1tf:                  Not affected
  Mds:                   Not affected
  Meltdown:              Not affected
  Mmio stale data:       Mitigation; Clear CPU buffers; SMT vulnerable
  Spec store bypass:     Mitigation; Speculative Store Bypass disabled via prctl
                          and seccomp
  Spectre v1:            Mitigation; usercopy/swapgs barriers and __user pointer
                          sanitization
  Spectre v2:            Mitigation; Enhanced IBRS, IBPB conditional, RSB fillin
                         g
  Srbds:                 Mitigation; Microcode
  Tsx async abort:       Not affected

Cosas que he probado:

  • asignar más RAM a la emu (5 GB y 8 GB) en realidad se sentía más lento y más incosistent con más ram
  • desactivar otros programas
  • diferentes ajustes (ninguno de los cuales funcionó)

Estoy buscando ayuda en cuanto a cómo puedo mejorar la velocidad del emulador, ya que se siente como si se necesita algún tipo de ordenador de la NASA o 32 GB de RAM Core i9 12 ª generación con una RTX 3090 en estos días para conseguir realmente coherente Rendimiento de QEMU: ¡muy frustrante!

Agradecería cualquier ayuda -- el único fallo que se me ocurre en mi PC es que estoy usando un HDD, que puede o no ser la causa principal de este problema.

0voto

Battani Puntos 2196

Está buscando un cuello de botella. Así que primero tienes que entender tu software y lo que hace. En los juegos, por ejemplo, comprobarías si hay cuellos de botella en la GPU o la CPU.

Tu i3 sólo tiene 4 núcleos, que sea nuevo no significa que sea bueno. Para un desarrollo decente, esto es demasiado poco. Esto será un cuello de botella. Un HD en 2022 para desarrollar es un desastre. Un AVD puede llegar a tener 15 gigas con el tiempo. Tu pobre viejo HD tiene que leer y copiar todo eso a ram, parcialmente. Actualiza a SSD.

Haz lo siguiente:

  • Comprueba tres veces que has actualizado el emulador desde AS
  • crear un nuevo dispositivo, no modifique ninguna configuración, por lo general están bien.
  • abre dos consolas y ejecuta "atop" en una (detección de cuellos de botella cpu + almacenamiento) y "htop" (multi threading cpu , memory overview) en la otra. Familiarízate con estas herramientas.
  • Ahora inicie el nuevo dispositivo emulador de AS y espere hasta que esté completamente arrancado y haya hecho sus comprobaciones de actualización de software (la imagen de Google intentará actualizar todas sus aplicaciones internas una vez que esté en línea).
  • monitoriza htop + atop durante todo esto y también una vez que ejecutes tu aplicación.

Si el HD es el cuello de botella (atop lo muestra en rojo) intenta desactivar la hibernación / snapshots dentro de los ajustes del AVD. El emulador almacena instantáneas constantemente de forma predeterminada. Esto está bien para SSD rápido, pero podría ser más lento con hd. (Adivinando).

Si tu cpu es el cuello de botella, no hay casi nada que puedas hacer. La mejor solución entonces sería conectar un dispositivo Android de hardware a través de USB y utilizar el ordenador sólo para Android studio. En resumen no ejecutar el emulador en absoluto. Así es como lo hago en mi portátil de reserva (también un débil Intel i3). He actualizado mi principal a un AMD Ryzen 9 5900X. Que tiene 12 núcleos, 24 hilos. Solo para que te hagas una idea de lo que usa la gente para desarrollar. Buena suerte

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X