- Herramienta de búsqueda de cadenas ultrarrápida escrita en C para aplicaciones donde el rendimiento es crítico
- Selecciona dinámicamente el algoritmo óptimo según las características del patrón y el hardware
- Aprovecha hardware como SSE4.2/AVX2 para ofrecer el máximo rendimiento
- Divide los archivos en chunks para admitir grandes volúmenes y realiza procesamiento paralelo multihilo
- Usa el algoritmo de búsqueda más adecuado según el patrón
- Boyer-Moore-Horspool: adecuado para coincidencia de patrones en general
- Algoritmo Knuth-Morris-Pratt (KMP): optimizado para patrones cortos
- Rabin-Karp: eficaz para patrones largos
- Aceleración SIMD: mejora de rendimiento en hardware compatible con SSE4.2 y AVX2
- Usa I/O de archivos con mapeo de memoria para minimizar llamadas al sistema y maximizar el rendimiento
- Opciones de búsqueda flexibles
- Búsqueda sensible e insensible a mayúsculas/minúsculas
- Además de buscar en archivos, permite buscar directamente en cadenas
- Incluye un modo para mostrar solo la cantidad de coincidencias
Uso
krep [OPTIONS] PATTERN [FILE]
- Buscar “error” en un archivo de logs:
krep "error" system.log
- Buscar sin distinguir mayúsculas/minúsculas usando 8 hilos:
krep -i -t 8 "ERROR" large_logfile.log
- Mostrar la cantidad de coincidencias (sin imprimir las líneas encontradas):
krep -c "TODO" *.c
- Buscar directamente en una cadena en lugar de un archivo:
krep -s "Hello" "Hello world"
Opciones de línea de comandos
- -i : buscar sin distinguir mayúsculas/minúsculas
- -c : mostrar solo la cantidad de coincidencias, sin imprimir las líneas encontradas
- -t NUM : usar NUM hilos (valor predeterminado: 4)
- -s STRING : buscar en una cadena en lugar de un archivo
- -v : mostrar información de versión
- -h : mostrar ayuda
Benchmarks
- El rendimiento de
krep es sobresaliente en comparación con herramientas comunes de búsqueda de cadenas.
- krep tardó 0.78 segundos en buscar un patrón común en un archivo de texto de 1GB, lo que equivale a 1,282MB por segundo
- grep tardó 2.95 segundos en la misma tarea, con una velocidad de 339MB por segundo
- ripgrep tardó 1.48 segundos, mostrando una velocidad de 676MB por segundo
- →
krep es aproximadamente 3.8 veces más rápido que grep y 1.9 veces más rápido que ripgrep (el rendimiento puede variar según el hardware y las características del archivo)
Origen del nombre
- “krep” proviene del islandés “kreppan”
- Significa “agarrar rápidamente”
- Simboliza el reconocimiento eficiente de patrones
- Es un comando corto y conciso, fácil de escribir
2 comentarios
Si al abandonar el soporte para expresiones regulares solo logra ser el doble de rápido que ripgrep, la utilidad sí queda un poco limitada.
Creo que yo simplemente seguiré usando ripgrep, que sí soporta expresiones regulares.
Comentarios en Hacker News
Las funciones de CPU (por ejemplo, AVX2) deben detectarse en tiempo de ejecución
ifdefsolo detecta en tiempo de compilación si el compilador lo soportaPresentación de una publicación de blog sobre el proyecto krep
madvise(), y hace falta agregar-D_GNU_SOURCEaCFLAGSdel MakefileImportancia de los casos de prueba
Resultados del benchmark tras resolver el problema de compilación
Intento de benchmark con alta frecuencia de coincidencias
Intentos adicionales de benchmark
Algoritmo de ripgrep y uso de memoria mapeada
Dudas sobre los resultados del benchmark
Opiniones sobre el nombre krep