Tamaño de bloque de velocidad de Openssl

1

Realmente no entiendo lo que significa exactamente block size en la salida de velocidad de openssl. Aquí: ¿Cómo puedo interpretar el rendimiento de openssl speed? encontré La respuesta es la longitud del mensaje de entrada. Entonces, ¿debería entender esto?

Quiero medir el rendimiento de md5 para 512 mensajes de tamaño de entrada, si lo hago así:

// assume that 'txt' has a length of 64, 
// so for char its 8 (char size) * 64 (text length) = 512 block size 
char txt = "..."; 
MD5((unsigned char*)&txt, strlen(txt), (unsigned char*)&digest);

o como esto:

char txt = "..."; // assume it has length of 512
MD5((unsigned char*)&txt, strlen(txt), (unsigned char*)&digest);

? Lo que estoy tratando de lograr aquí es poder probar algoritmos con varias longitudes de entrada, no solo para los definidos en la velocidad de openssl.

    
pregunta yak 13.07.2013 - 22:07
fuente

1 respuesta

2

Una función hash como MD5 procesa un mensaje de longitud arbitraria (hasta una longitud máxima ridículamente grande, algunos miles de millones de terabytes). El costo computacional sin procesar de MD5 se puede dividir aproximadamente en tres partes:

  • Inicialización : establece algunos valores de estado internos.
  • Procesamiento de datos : principalmente proporcional a la longitud de entrada.
  • Finalización : los "cálculos de cierre" de la función hash, que producen el resultado final (en ese paso ocurren cosas como el relleno).

OpenSSL, en sus puntos de referencia, mide la velocidad de realizar los tres pasos con mensajes de varias longitudes, de modo que usted podría inferir de alguna manera el costo del procesamiento de datos y el costo de los otros dos pasos .

Sin embargo, tales puntos de referencia no tienen sentido porque miden el rendimiento del código en condiciones poco realistas. Cuando se ejecuta OpenSSL, entra en un bucle estrecho, con un hash millones de mensajes en una fila: esto garantiza que el código de función de hash esté en el caché L1, que la predicción de rama en la CPU es completamente consciente dirección probable de cada salto condicional, y que los datos de entrada también se encuentran en la memoria caché L1 de la CPU. Nada de esto se aplica realmente a una situación práctica.

En la práctica, los costos de ancho de banda de E / S y RAM dominarán, especialmente con funciones hash "rápidas" como MD5; Además, la función hash no está sola en la ruta de datos, y otras tareas serán importantes. Por ejemplo, en su código, la llamada a strlen() no tendrá un impacto insignificante en comparación con MD5 (será más rápida, pero no hasta el punto de no aparecer en las medidas).

Lo que debes hacer es medir el rendimiento de tu sistema completo , no solo la función hash; y haga eso con algunas funciones hash seleccionadas: esto usará el contexto de ejecución real. Además, es improbable que el costo del hash representa una proporción sustancial de su CPU.

    
respondido por el Tom Leek 16.07.2013 - 17:10
fuente

Lea otras preguntas en las etiquetas