sql >> Base de Datos >  >> RDS >> PostgreSQL

Puntos de referencia de fusión de PostgreSQL

Hace un par de semanas se revelaron dos vulnerabilidades de seguridad graves (nombre en código Meltdown y Spectre). Las pruebas iniciales sugirieron que el impacto en el rendimiento de las mitigaciones (agregadas en el kernel) podría ser de hasta ~30 % para algunas cargas de trabajo, según la tasa de llamadas al sistema.

Esas primeras estimaciones tenían que hacerse rápidamente y, por lo tanto, se basaron en cantidades limitadas de pruebas. Además, las correcciones en el kernel evolucionaron y mejoraron con el tiempo, y ahora también tenemos retpoline que debería abordar Spectre v2. Esta publicación presenta datos de pruebas más exhaustivas y, con suerte, brinda estimaciones más confiables para las cargas de trabajo típicas de PostgreSQL.

En comparación con la evaluación inicial de las correcciones de Meltdown que Simon publicó el 10 de enero, los datos presentados en esta publicación son más detallados, pero en general, los resultados de las coincidencias se presentan en esa publicación.

Esta publicación se centra en las cargas de trabajo de PostgreSQL y, si bien puede ser útil para otros sistemas con altas tasas de cambio de contexto/llamadas al sistema, ciertamente no es de alguna manera universalmente aplicable. Si está interesado en una explicación más general de las vulnerabilidades y la evaluación del impacto, Brendan Gregg publicó hace un par de días un excelente artículo de KPTI/KAISER Meltdown Initial Performance Regressions. De hecho, podría ser útil leerlo primero y luego continuar con esta publicación.

Nota: Esta publicación no pretende disuadirlo de instalar las correcciones, sino darle una idea de cuál puede ser el impacto en el rendimiento. Debe instalar todas las correcciones para que su entorno sea seguro y usar esta publicación para decidir si necesita actualizar el hardware, etc.

¿Qué pruebas haremos?

Veremos dos tipos de carga de trabajo básicos habituales:OLTP (transacciones pequeñas y simples) y OLAP (consultas complejas que procesan grandes cantidades de datos). La mayoría de los sistemas PostgreSQL se pueden modelar como una combinación de estos dos tipos de cargas de trabajo.

Para OLTP usamos pgbench, una conocida herramienta de evaluación comparativa proporcionada con PostgreSQL. Probamos ambos en solo lectura (-S ) y lectura-escritura (-N ), con tres escalas diferentes:encajar en shared_buffers, en RAM y más grande que RAM.

Para el caso de OLAP, usamos el punto de referencia dbt-3, que está bastante cerca de TPC-H, con dos tamaños de datos diferentes:10 GB que cabe en la RAM y 50 GB que es más grande que la RAM (teniendo en cuenta los índices, etc.).

Todos los números presentados provienen de un servidor con 2x Xeon E5-2620v4, 64GB de RAM e Intel SSD 750 (400GB). El sistema estaba ejecutando Gentoo con kernel 4.15.3, compilado con GCC 7.3 (necesario para habilitar el retpoline completo arreglar). Las mismas pruebas también se realizaron en un sistema más antiguo/más pequeño con CPU i5-2500k, 8 GB de RAM y 6 SSD Intel S3700 (en RAID-0). Pero el comportamiento y las conclusiones son más o menos las mismas, por lo que no presentaremos los datos aquí.

Como de costumbre, los scripts/resultados completos para ambos sistemas están disponibles en github.

Esta publicación trata sobre el impacto en el rendimiento de la mitigación, así que no nos centremos en números absolutos y, en su lugar, observemos el rendimiento en relación con el sistema sin parches (sin las mitigaciones del kernel). Todos los gráficos de la sección OLTP muestran

(throughput with patches) / (throughput without patches)

Esperamos números entre 0 % y 100 %, siendo mejores los valores más altos (menor impacto de las mitigaciones), 100 % significa "sin impacto".

Nota: El eje Y comienza en el 75 %, para que las diferencias sean más visibles.

OLTP / solo lectura

Primero, veamos los resultados para pgbench de solo lectura, ejecutado por este comando

pgbench -n -c 16 -j 16 -S -T 1800 test

e ilustrado por el siguiente cuadro:

Como puede ver, el impacto en el rendimiento de pti para las escalas que caben en la memoria es aproximadamente del 10 al 12 % y casi no se puede medir cuando la carga de trabajo se limita a E/S. Además, la regresión se reduce significativamente (o desaparece por completo) cuando pcid está habilitado. Esto es consistente con la afirmación de que PCID ahora es una característica crítica de rendimiento/seguridad en x86. El impacto de retpoline es mucho menor:menos del 4 % en el peor de los casos, lo que puede deberse fácilmente al ruido.

OLTP/lectura-escritura

Las pruebas de lectura y escritura fueron realizadas por un pgbench comando similar a este:

pgbench -n -c 16 -j 16 -N -T 3600 test

La duración fue lo suficientemente larga para cubrir varios puntos de control y -N se utilizó para eliminar la contención de bloqueo en las filas de la (pequeña) tabla de ramas. El rendimiento relativo se ilustra en este gráfico:

Las regresiones son un poco más pequeñas que en el caso de solo lectura:menos del 8 % sin pcid y menos del 3% con pcid activado. Esta es una consecuencia natural de pasar más tiempo realizando E/S mientras se escriben datos en WAL, se vacían los búferes modificados durante el punto de control, etc.

Sin embargo, hay dos partes extrañas. En primer lugar, el impacto de retpoline es inesperadamente grande (cerca del 20 %) para la escala 100, y lo mismo sucedió para retpoline+pti en la escala 1000. Las razones no están del todo claras y requerirán una investigación adicional.

OLAP

La carga de trabajo de análisis fue modelada por el punto de referencia dbt-3. Primero, veamos los resultados de la escala de 10 GB, que encaja completamente en la RAM (incluidos todos los índices, etc.). De manera similar a OLTP, no estamos realmente interesados ​​en números absolutos, que en este caso serían la duración de las consultas individuales. En su lugar, veremos la desaceleración en comparación con nopti/noretpoline , es decir:

(duration without patches) / (duration with patches)

Suponiendo que las mitigaciones resulten en una desaceleración, obtendremos valores entre 0 % y 100 %, donde 100 % significa “sin impacto”. Los resultados se ven así:

Es decir, sin el pcid la regresión generalmente está en el rango de 10-20%, según la consulta. Y con pcid la regresión cae a menos del 5% (y generalmente cerca del 0%). Una vez más, esto confirma la importancia de pcid función.

Para el conjunto de datos de 50 GB (que es de aproximadamente 120 GB con todos los índices, etc.), el impacto se ve así:

Entonces, al igual que en el caso de 10 GB, las regresiones están por debajo del 20 % y pcid los reduce significativamente, cerca del 0 % en la mayoría de los casos.

Los gráficos anteriores están un poco desordenados:hay 22 consultas y 5 series de datos, lo que es demasiado para un solo gráfico. Así que aquí hay un gráfico que muestra el impacto solo para las tres funciones (pti , pcid y retpoline ), para ambos tamaños de conjuntos de datos.

Conclusión

Para resumir brevemente los resultados:

  • retpoline tiene muy poco impacto en el rendimiento
  • OLTP:la regresión es aproximadamente del 10 al 15 % sin el pcid , y alrededor del 1-5 % con pcid .
  • OLAP:la regresión es de hasta un 20 % sin el pcid , y alrededor del 1-5 % con pcid .
  • Para cargas de trabajo vinculadas a E/S (por ejemplo, OLTP con el conjunto de datos más grande), Meltdown tiene un impacto insignificante.

El impacto parece ser mucho menor de lo que sugieren las estimaciones iniciales (30 %), al menos para las cargas de trabajo probadas. Muchos sistemas funcionan con un 70-80 % de la CPU en los períodos pico, y el 30 % saturaría por completo la capacidad de la CPU. Pero en la práctica el impacto parece estar por debajo del 5%, al menos cuando el pcid se utiliza la opción.

No me malinterpreten, la caída del 5% sigue siendo una regresión grave. Ciertamente es algo que nos importaría durante el desarrollo de PostgreSQL, p. al evaluar el impacto de los parches propuestos. Pero es algo que los sistemas existentes deberían manejar bien:si un aumento del 5 % en la utilización de la CPU lleva a su sistema al límite, tendrá problemas incluso sin Meltdown/Spectre.

Claramente, este no es el final de las correcciones de Meltdown/Spectre. Los desarrolladores del kernel todavía están trabajando para mejorar las protecciones y agregar otras nuevas, e Intel y otros fabricantes de CPU están trabajando en las actualizaciones de microcódigos. Y no es que conozcamos todas las variantes posibles de las vulnerabilidades, ya que los investigadores lograron encontrar nuevas variantes de los ataques.

Así que hay más por venir y será interesante ver cuál será el impacto en el rendimiento.