¿Cómo afectará una partición / archivo de intercambio al sistema?

20

Algunos amigos me dijeron que sus teléfonos Android tienen muy poca (<100 MB) de memoria disponible para las aplicaciones normales, porque el sistema operativo y algunos servicios que no se pueden matar ocupan la mayor parte de la RAM. Por ejemplo, un teléfono con 512 MB solo muestra 90 MB de memoria disponible, por lo que solo se pueden ejecutar 2-3 aplicaciones al mismo tiempo.

Me pregunto si crear una partición / archivo de intercambio ayudará, pero vi opiniones encontradas en toda la web y no estoy seguro de qué hacer. Aquí están mis preguntas:

(1) ¿Habrá muchas páginas de memoria que no se usan con frecuencia para intercambiar, especialmente en el sistema operativo y los servicios que no se pueden matar?

(2) ¿Cómo el intercambio de páginas de memoria pequeñas afectará la vida útil de la memoria flash? ¿El flash (o la tarjeta SD) se nivela automáticamente?

(3) ¿El intercambio realmente ayudará al rendimiento al ejecutar múltiples aplicaciones? Supongo que si la respuesta a (1) es sí, lo hará.

(4) ¿Escribir en flash será demasiado lento y, por lo tanto, afectará la capacidad de respuesta cuando se produzca el intercambio?

(5) ¿Es cierto que Android mantiene el mecanismo de intercambio del kernel de Linux, por lo tanto, siempre que haya una partición / archivo de intercambio, hará el intercambio sin configuración adicional?

Gracias por leer.

hojas perennes
fuente

Respuestas:

8

No creo que haya mucho beneficio con el intercambio de Android, ya que el Ciclo de vida de la aplicación de Android es una forma mucho más avanzada de intercambio.

(1) ¿Habrá muchas páginas de memoria que no se usan con frecuencia para intercambiar, especialmente en el sistema operativo y los servicios que no se pueden matar?

No puede intercambiar el kernel del sistema operativo incluso en Desktop Linux y Android ya mata los servicios cuando necesita más RAM. Si el proveedor de su dispositivo persiste en que debe tener servicios inútiles ejecutándose todo el tiempo, rootee su dispositivo.

(2) ¿Cómo el intercambio de páginas de memoria pequeñas afectará la vida útil de la memoria flash? ¿El flash (o la tarjeta SD) se nivela automáticamente?

Incluso si la tarjeta SD nivela el desgaste, el intercambio le dolerá bastante.

(3) ¿El intercambio realmente ayudará al rendimiento al ejecutar múltiples aplicaciones? Supongo que si la respuesta a (1) es sí, lo hará.

No en el contexto de Android. A diferencia del sistema operativo tradicional que seguirá tratando de interrumpir los procesos tal como lo solicitó, Android forzará a matar procesos antiguos y no utilizados y recuperará su memoria; este asesinato es rápido ya que las aplicaciones ya guardarán su estado cuando cambies de tarea.

(4) ¿Escribir en flash será demasiado lento y, por lo tanto, afectará la capacidad de respuesta cuando se produzca el intercambio?

Probablemente, probablemente no. Necesitaré puntos de referencia para eso.

(5) ¿Es cierto que Android mantiene el mecanismo de intercambio del kernel de Linux, por lo tanto, siempre que haya una partición / archivo de intercambio, hará el intercambio sin configuración adicional?

No sé si Android mantiene el mecanismo de intercambio, pero incluso si lo hace (o si compila su propio núcleo), aún necesitará algunas configuraciones. Por lo general, solo tiene un fstabarchivo que apunta al archivo de intercambio y lo está haciendo swapon -a.

De hecho, tengo razones por las que el intercambio en realidad puede afectar el rendimiento: impide que Application Life Cycle, el esquema de administración de memoria de Android, funcione correctamente.

Lie Ryan
fuente
Gracias por la respuesta. Sin embargo, todavía tengo preguntas. En un Samsung Fascinate, 10 servicios no eliminables ocupan aproximadamente 110 millones de memoria. Hay otros 22 servicios eliminables en ejecución, pero "Aplicación en ejecución" no muestra ninguna aplicación en ejecución. Es el teléfono de mi amiga y no sabía qué hacía exactamente antes, pero parece que es muy posible que muchos servicios / aplicaciones puedan ejecutarse al mismo tiempo. No creo que todos estos servicios / aplicaciones en segundo plano usen todas las páginas que necesitaban cuando comenzaron. Además, guardar el estado de la aplicación + recargar y reiniciar la aplicación + restaurar el estado también sería lento.
perenne
Otra forma de pensar en este problema es la siguiente: suponga que la vida útil del flash no es un problema, ¿debería Android intercambiar? Si no, ¿cuál es la diferencia clave entre las aplicaciones de Android y las aplicaciones de escritorio que hace que el intercambio no sea útil en Android? No creo que Android Life Cycle funcione para aplicaciones de escritorio / servidor.
perenne
@evergreen: el estado de la aplicación se guarda cuando la aplicación pasa a segundo plano (por ejemplo, cuando el usuario presiona inicio para cambiar de tarea). Más tarde, cuando alguna otra aplicación necesita memoria, las aplicaciones más antiguas o los servicios en segundo plano se eliminarán por la fuerza (FK prácticamente no requiere tiempo). Esto significa que la eliminación de tareas es inmediata, ya que el estado de la aplicación ya se guardó hace mucho tiempo. Cuando vuelve a cargar una aplicación que ya está en la memoria, obtendrá el tiempo de recarga más rápido; pero si la aplicación ya está descargada, entonces la aplicación debe realizar una recarga completa (que es la misma situación con el intercambio)
Lie Ryan
@evergreen: si usa un asesino de tareas, obligará a las aplicaciones a descargarse y siempre tendrá que realizar una recarga completa, en lugar de la recarga rápida cuando la aplicación permanezca en la memoria. Si usa un archivo / partición de intercambio, las aplicaciones (más antiguas) se intercambiarán y la restauración requerirá casi la misma cantidad de trabajo que la recarga completa. Excepto: con la recarga completa, el desarrollador de la aplicación ha separado los datos persistentes con los datos temporales, y puede optimizar qué guardar y qué no mejorar el almacenamiento. Mientras restaura el intercambio, deja al desarrollador de la aplicación sin decir nada, e intercambia todo.
Lie Ryan
@evergreen: incluso si se supone que la duración de la memoria flash no es un problema, Android no debería intercambiar, porque el ciclo de vida de la aplicación funciona mejor. Android Life Cycle está diseñado para entornos con limitaciones de memoria, en entornos de escritorio y servidor, tiene una cantidad gigantesca de memoria y los usuarios realizan muchas más tareas a la vez, y no esperan que el sistema operativo elimine los programas en segundo plano. La debilidad de Android Life Cycle es que requiere soporte de aplicaciones. La aplicación debe estar lista para ser eliminada en cualquier momento y debe guardar el estado en puntos predefinidos. Tal complejidad es extraña para las aplicaciones de escritorio.
Lie Ryan
5

Definitivamente hay un beneficio en el intercambio, a pesar de lo que todos los demás en Internet le dirán. Pruébalo y compruébalo por ti mismo. Empíricamente, en un G1 u otro teléfono con poca memoria, el intercambio hace que el teléfono funcione mejor y más rápido.

Sí, Android tiene incorporada la "gestión de tareas" del ciclo de vida, pero no es muy buena. Se mata rutinariamente procesos cuando se agota la memoria, y se espera que las aplicaciones para guardar su estado mediante " paquetes " de modo que cuando los reinicie, se reinician en el mismo estado que tenían en el pasado.

Una vez que Android determina que necesita eliminar un proceso, lo hace brutalmente, simplemente matándolo a la fuerza. El kernel puede reclamar inmediatamente todos los recursos necesarios para el proceso, sin depender de que la aplicación esté bien escrita y responda a una solicitud cortés de salir. Permitir que el kernel reclame de inmediato los recursos de la aplicación hace que sea mucho más fácil evitar situaciones graves de falta de memoria.

Esto sería genial si realmente funcionara, y sería mejor que el intercambio indiscriminado. Pero las aplicaciones realmente no guardan su estado; solo guardan la mínima cantidad de información para volver a ese estado. (Y algunas aplicaciones ni siquiera se molestan en hacer esto). Volver a ese estado lleva tiempo. Dado que el intercambio realmente guarda todo el estado de la aplicación, que solo tiene que volver a cargarse, hace que el cambio entre aplicaciones sea mucho más rápido.

Si cambia a otra aplicación desde el navegador, por ejemplo, el navegador casi siempre se mata, y luego tiene que volver a cargar toda la página de Internet cuando vuelve a acceder. Esto lleva mucho más tiempo que recargar el estado del intercambio, desperdicia su dinero si tiene un plan de datos y causa problemas de estado cuando la página web es dinámica.

Muchas aplicaciones tardan mucho más en iniciarse de lo que deberían, o en realidad no vuelven al mismo estado cuando se reinician, por lo que cambiarlas funciona mejor.

Supongo que las personas que están contentas con el sistema de valores usan sus teléfonos de manera diferente.

¿Debo usar una partición de intercambio con Cyanogenmod?

endolito
fuente
Si lo deja al Ciclo de vida, será decisión de la aplicación almacenar en caché datos adicionales para mejorar el rendimiento (por ejemplo, páginas web cargadas). Si usa el intercambio, es decisión del sistema operativo, pero el sistema operativo no está en la mejor posición para determinar qué guardar y qué no guardar para optimizar mejor el rendimiento, por lo que debe guardar y restaurar todo. El navegador no vuelve a descargar páginas de Internet si cambia de tarea, a menudo abro el navegador, cambio a un montón de juegos pesados ​​y otras actividades, y vuelvo al navegador con mi última página con todo en su lugar cargado al instante.
Lie Ryan
Correcto. Ninguno de los sistemas es óptimo, pero el intercambio es mejor para la mayoría de las aplicaciones. El navegador solo vuelve a cargar la página si se elimina antes de volver a abrirla. En un teléfono con poca memoria, casi siempre será asesinado.
endolito
@LieRyan - "volver al navegador con mi última página con todo en su lugar cargado al instante" ¿restaura su navegador la posición de desplazamiento en las páginas abiertas después de la recarga? Eso es lo que Chrome no hace (aunque me gusta mucho este navegador), lo cual es muy desafortunado cuando dejaste de leer en medio de alguna página web antes de cambiar a, digamos, atender una llamada ...
kerim
2

Tengo un Spice mi-435 (solo vendido en India) que tiene una RAM de solo 340M. Demonios, los archivos de intercambio ayudan mucho. Mi teléfono ejecuta ICS con tan poca RAM y definitivamente entró en muchos estados sin memoria y allí el archivo de intercambio ayuda mucho. Todos los estados de la aplicación se transfieren para intercambiar cuando no están en uso activo. Esto le da a mi sala de teléfono para que más aplicaciones y aplicaciones con hambre de RAM funcionen sin problemas con mucho mucho menos retraso que antes. Aunque surge un problema cuando abro la aplicación que he estado usando antes. Lleva tiempo cargar su estado, ya que la SD es mucho más lenta que la RAM de alta velocidad a bordo. Pero, la opción de intercambio es mejor por menos RAM. Recomendaría cambiar la partición por RAM de menos de 512M pero no por más de 512M.

Espero que sea útil.

ruta sambit
fuente
1

El archivo de intercambio ayuda incluso en sistemas con mayor RAM. Mi tableta quad core de 1 gb ram de 7 pulgadas recibe un gran impulso multitarea al tirar en un intercambio de 2 gb, en la tarjeta micro sd uhs-1. Y, por supuesto, el precio de la memoria baja rápidamente, e incluso con una escritura constante, se supone que nand flash durará años.

Básicamente, soy de la opinión, porque la diferencia de rendimiento es tan radical, que probablemente cualquier persona con menos de una gran cantidad de RAM debería estar haciendo esto. De hecho, probablemente debería venir como una opción estándar en Android (junto con cachés de aplicaciones más grandes y un caché de Internet de tamaño adecuado).

Me refiero a que tienes un micro sd de 64-128 gb (uhs-1), o incluso el uhs-2 que salió este año, además de un nand interno de 16-64 gb, a menudo "rápido", que es una especie de ssd primitivo o incluso SSD, como se usan en las pizarras de Windows: no estás llenando exactamente todo ese espacio de alta velocidad con mucho. La velocidad solo entra en juego con el video o al cargar aplicaciones en la memoria, que es exactamente el uso aquí.

Por supuesto, idealmente, los fabricantes se centrarían más en la RAM que en la resolución o los núcleos adicionales, porque claramente la velocidad del sistema se beneficia mucho de una memoria RAM más alta, y probablemente también deberían aumentar la velocidad del almacenamiento interno (como cambiar a sistemas de tipo ssd completo) , o como mínimo "rápido", pero mientras tanto, mientras que las altas resoluciones tienden a causar una especie de déficit de RAM en todos los dispositivos, un archivo de intercambio y el almacenamiento en caché a un SD externo razonablemente ágil tiene mucho sentido.

De hecho, sería bueno ver que algunos navegadores también mantienen el almacenamiento en caché más completo, la mayoría de los navegadores son lentos o de baja funcionalidad, rara vez rápidos y con todas las funciones, y eso es en parte porque el espacio para el caché de la aplicación en el disco interno es pequeño. Están diseñados para operar en un entorno de poca memoria y almacenamiento, y toda la historia está cambiando. Incluso si el carnero no está listo para cortar tanto como debería, el almacenamiento ciertamente lo es, y puede ser bastante rápido en los estándares UHS-1 (o el uhs-2 lanzado este año), incluso si no es así " rápido "o ssd.

Y el costo de la memoria externa, es de maní realmente, incluso para una mayor capacidad uhs-1. Al menos un uhs-1 de 64 gb es perfectamente asequible (50 dólares donde estoy, pero sería menos USD), mucho más barato que el dispositivo, y 32 gb y menos es básicamente un par de monedas.

En realidad, hay muchas lecciones que aprender del escritorio, especialmente ahora que las especificaciones son cada vez más altas: el enlace de rendimiento más lento se está cargando desde el almacenamiento a la memoria RAM. Cuanto más puedas hacer para mitigar eso, mejor.

Jamie
fuente