2012-04-19 12 views
9

Tengo una aplicación que periódicamente (después de cada 1 o 2 segundos) toma los puntos de control al bifurcarse. Por lo tanto, el punto de control es una bifurcación del proceso original que simplemente permanece inactiva hasta que se le pide que comience cuando ocurre algún error en el proceso original.Costo de una página falla trampa

Ahora mi pregunta es qué tan costoso es el mecanismo de copiado de la horquilla. ¿Cuánto es el costo de una captura de fallas de página que ocurrirá cada vez que el proceso original escribe en una página de memoria (la primera vez después de tomar un punto de control), ya que el mecanismo de copia-escritura garantizará que proporcione un proceso original diferente página física que el punto de control.

En mi opinión, la sobrecarga de la falla de página puede ser bastante alta cuando se produce una interrupción, aterrizamos desde la tierra del espacio de usuario hasta la tierra del núcleo y luego desde el kernel al espacio del usuario. ¿Cuántos ciclos de CPU puedo perder de una trampa de fallas de página? Supongamos que la memoria RAM es lo suficientemente grande y que nunca necesitamos cambiar al disco duro.

Bueno, sé que es difícil imaginar un esquema de punto de control más eficiente que esto y por lo tanto podría decir por qué me preocupa la sobrecarga de página, pero solo tengo una idea de cuánto será el costo allí para este esquema.

+0

Depende en gran medida de los patrones de acceso a los datos de su aplicación. Intente comparar tiempos de ejecución con y sin puntos de control para ver cómo los puntos de control afectan el tiempo de ejecución. –

+1

No puedo ver la utilidad de este punto de control. Después del tenedor(), padre e hijo son idénticos. Después del padre exit() s, probablemente el niño esté haciendo referencia exactamente a las mismas páginas físicas, ya que el padre abandonó sus referencias (el estado COW para las páginas puede volverse "adjunto" para el proceso hijo, ya que un estado COW con solo el proceso de referencia no tiene sentido) – wildplasser

+0

wildplasser, la necesidad del punto de control es evitar reiniciar la aplicación. Se puede reanudar desde un estado previamente guardado a.k. un punto de control. – pythonic

Respuesta

10

Puede hacer las matemáticas aproximadas para una adivinanza usted mismo. Suponiendo que no hay acceso al disco (~ 10 mil millones de ciclos), usted tiene que dar cuenta de

  • 160 ciclos para la trampa y volver (aproximadamente, sobre x86_64)
  • comprobaciones de validez, las partes, cuentas y otras cosas (desconocidos, probablemente unos pocos cientos a miles de ciclos)
  • alineados memcpy de 4096 bytes, algo alrededor de 500-800 ciclos
  • TLB invalidación (10-100 ciclos añade en primer acceso)
  • ya sea desalojo de otros datos en caché o una caché garantizada (80-400 ciclos) dependiendo de la implementación del memcpy. Importa mucho en su patrón de acceso si uno u otro es mejor.

Así que, en general, estamos hablando de algo de alrededor de 2000 ciclos, con algunos de los efectos (por ejemplo, TLB y efectos de caché) extendidos y no visibles inmediatamente. Omondi y Sedukhin informaron 1700 ciclos en P-III en 2003, lo que es consistente con esta estimación.

Tenga en cuenta que si la página nunca se ha escrito antes, las cosas son ligeramente diferentes según un comentario de L. Torvalds en 2000. Un error de copia en escritura en una página cero extrae otra página cero del grupo y no copia ceros. Sin embargo, eso es prácticamente una caché garantizada.

+0

Muy informativo. ¡Gracias! – pythonic

Cuestiones relacionadas