2012-05-14 13 views
10

Estamos trabajando en una solución SSD respaldados clave-valor con las siguientes propiedades:de baja latencia de valor-clave Tienda para SSD

  • Rendimiento: 10000 TPS; 50/50 puts/gets;
  • Latencia: 1 ms promedio, percentil 99.9 10ms
  • Volumen de datos: ~ 1 mil millones de valores, ~ 150 bytes cada uno; Claves de 64 bits; de acceso aleatorio, el 20% de los datos se ajusta a la RAM

Tratamos KyotoCabinet, LevelDB y RethinkDB en los SSD de las materias primas, con diferentes sistemas de archivos ext3, planificadores/XFS Linux IO; realizó una serie de pruebas usando Rebench; y encontró que en todos los casos:

  • de sólo lectura rendimiento/latencia son muy buenos
  • escritura/actualización sólo a lo largo es moderado, pero hay muchos valores atípicos de alta latencia
  • lectura mixta/carga de trabajo escribir provoca la oscilación catastrófico en el rendimiento/latencia incluso en caso de acceso directo al dispositivo de bloques (sin pasar por el sistema de archivos)

el cuadro siguiente ilustra este comportamiento para KyotoCabinet (eje horizontal es el tiempo, período de tres s son claramente visibles: solo lectura, mezcla, solo actualización).

La pregunta es: ¿es posible lograr una baja latencia para los SLA descritos utilizando SSD y qué tiendas de valores clave se recomiendan?

enter image description here

+2

Esta es una buena pregunta, pero está fuera de tema para SO, ya que es realmente un hilo de discusión (que está fuera del alcance de SO). No está directamente relacionado con la programación, y no estoy seguro de dónde es apropiado. –

+0

Entiendo esto, pero la pregunta principal es bastante simple: ¿existe una tienda de valores clave que logre una latencia de lectura/escritura <1ms en SSD de productos básicos? – user1128016

+2

Como dije, buena pregunta pero no directamente relacionada con la programación. Puede obtener una mejor tracción en [sf] o posiblemente [dba.se] –

Respuesta

0

Esto es un poco de una idea descabellada, pero que podría funcionar. Supongamos que su SSD es de 128 GB.

  1. Crear una partición de intercambio de 128 GB en el SSD
  2. configurar el equipo para utilizar ese como swap
  3. Configuración memcached en la máquina y fijar un límite de memoria de 128 GB
  4. Benchmark

Will ¿El kernel puede entrar y salir de la página lo suficientemente rápido? No hay forma de saberlo Eso depende más de su hardware que el kernel.

Poul-Henning Kamp hace algo muy parecido a esto en Varnish haciendo que el kernel haga un seguimiento de las cosas (memoria virtual vs física) para Varnish en lugar de hacer que Varnish lo haga. https://www.varnish-cache.org/trac/wiki/ArchitectNotes

3

Latencia de escritura altamente variante es un atributo común de las SSD (especialmente los modelos de consumo). Hay una buena explicación de por qué en este AnandTech review.

El resumen es que el rendimiento de escritura del SSD empeora a medida que aumenta la sobrecarga de nivelación del desgaste. A medida que disminuye el número de páginas libres en el disco, el controlador NAND debe comenzar a desfragmentar las páginas, lo que contribuye a la latencia. El NAND también debe construir un LBA para bloquear el mapa y rastrear la distribución aleatoria de datos a través de varios bloques NAND. A medida que este mapa crezca, las operaciones en el mapa (inserciones, eliminaciones) serán más lentas.

No va a poder resolver un problema de HW de bajo nivel con un enfoque de SW, tendrá que pasar a un SSD de nivel empresarial o relajar sus requisitos de latencia.

1

Aerospike es una tienda más nueva de clave/valor (fila) que puede ejecutarse completamente fuera de SSD con < 1ms de latencia para lectura/escritura y muy alto TPS (llegando a millones).

Las SSD tienen un gran acceso de lectura aleatorio, pero la clave para reducir la varianza en las escrituras es usar IO secuencial (esto es similar a los discos duros normales). También reduce en gran medida la nivelación del desgaste y el desvanecimiento que pueden ocurrir con muchas escrituras en las SSD.

Si está construyendo su propio sistema de valores-clave, use un enfoque de estructura de registro (como Aerospike) para que las escrituras estén a granel y anexadas/escritas en grandes porciones. Un índice en memoria puede mantener las ubicaciones de datos correctas para los valores, mientras que un proceso en segundo plano limpia los datos obsoletos/eliminados del disco y defrags de archivos.

Cuestiones relacionadas