Sé que esto es viejo, pero salió sin respuesta.
Esencialmente:
- El sistema operativo utiliza un espacio de direcciones separadas para cada proceso.
- Recuperando información de cualquier otro espacio de direcciones requiere una llamada al sistema o un error de página. ** (vea a continuación)
- El DBMS es un proceso con su propio espacio de direcciones.
- El grupo de búferes OS que Stonebraker describe está en el espacio de direcciones del kernel.
Entonces ... para obtener datos del espacio de direcciones del kernel en el espacio de direcciones del DBMS, una llamada al sistema o un error de página es inevitable.
Tiene razón en que el acceso a los datos del administrador del grupo de búfer del sistema operativo no es más caro que una llamada de lectura normal(). (De hecho, es hecho con una lectura normal). Sin embargo, Stonebraker no está hablando de eso. Habla específicamente de las necesidades de almacenamiento en caché de DBMSes, después de, los datos se han leído del disco y están presentes en la memoria RAM.
Básicamente, él está diciendo que la memoria caché del grupo de búferes del sistema operativo es demasiado lenta para que el DBMS la use porque está almacenada en un espacio de direcciones diferente. Está sugiriendo usando un caché local en el mismo proceso (y por lo tanto el mismo espacio de direcciones), lo que puede darle una aceleración significativa para aplicaciones como DBMSes que golpean mucho el caché, porque eliminará esa sobrecarga de syscall.
Aquí está el punto exacto en el que se explica el uso de una caché local en el mismo proceso:
Sin embargo, muchos DBMS incluyendo INGRES [20] y el Sistema R [4] optar por poner un DBMS búfer administrados grupo en el espacio de usuario para reducir la sobrecarga. Por lo tanto, cada uno de estos sistemas ha ido al problema de construir su propio administrador de grupo de búfer para mejorar el rendimiento de .
También menciona los problemas de múltiples núcleos en el extracto se cita anteriormente. Aquí se aplican efectos similares, porque si puede tener solo un caché por núcleo, puede puede ser capaz de evitar las ralentizaciones de los caché de la CPU cuando varias CPU están leyendo y escribiendo los mismos datos.
** Por cierto, creo que el artículo de Stonebraker de 1981 es en realidad pre-mmap. Él lo menciona como un trabajo futuro. "La tendencia a proporcionar el sistema de archivos como parte de la memoria virtual compartida (por ejemplo, Pilot [16]) puede proporcionar una solución a este problema".
Solo para aclarar, "¿Cuál es el movimiento de núcleo a núcleo del que está hablando?" es tu pregunta aquí, ¿sí? –