BEHILOS 벤치마크: 저용량 CLI 검색 도구의 성능 분석

발행: (2026년 2월 12일 오후 10:07 GMT+9)
13 분 소요
원문: Dev.to

Source: Dev.to

위에 제공된 Source 링크 아래에 번역하고 싶은 전체 텍스트를 붙여 주시면, 요청하신 대로 한국어로 번역해 드리겠습니다. (코드 블록, URL 및 마크다운 형식은 그대로 유지됩니다.)

BEHILOS 벤치마크

그의 저서 Unix: A History and a Memoir에서 Brian Kernighan은 Unix 초기 시절 가장 좋아하는 grep 이야기를 회상한다. Bell Labs의 누군가가 뒤집힌 계산기에 표시되는 문자만으로 이루어진 영어 단어를 찾을 수 있는지 물었다. 뒤집힌 계산기 화면의 숫자 5071438은 문자 집합 BEHILOS에 대응한다.

Kernighan은 정규식 ^[behilos]*$를 Webster’s Second International Dictionary(당시 234 936개의 단어 포함)에 적용해 263개의 일치를 찾았으며, 그 중에는 그가 한 번도 본 적 없는 단어도 있었다.

현재 Webster’s Second International Dictionary에는 236 007개의 단어가 들어 있다. 결과를 재현하려면 다음을 실행한다:

grep ^[behilos]*$ /usr/share/dict/web2

이 명령은 264개의 일치를 반환한다. 가장 긴 단어는 아홉 글자로, blisslessbooboisie이다.

역사적 각주로 시작된 것이 곧 궁금증을 불러일으켰다: 옛 BEHILOS grep이 오늘날의 검색 도구들을 위한 빠르고 조잡한 벤치마크로 어떻게 작동할까?

테스트된 도구

도구설명
grep클래식 유닉스 도구; 텍스트 검색을 위한 역사적 기준선.
rg (ripgrep)현대적이며, 대규모 코드베이스에 최적화된 매우 빠른 재귀 검색기.
gawkGNU AWK 구현; 풍부한 기능을 갖추고 텍스트 처리에 널리 사용됩니다.
mawk경량이며 효율적인 AWK 변형으로 메모리 사용량이 최소화됩니다.
nawk전통적인 New AWK로, 레거시 스크립트를 위한 과거 동작을 유지합니다.
ag (The Silver Searcher)빠른 재귀 검색기로, 종종 ack를 대체합니다.
pt (The Platinum Searcher)멀티스레드 지원이 포함된 최신 재귀 grep 대안.
ackPerl 기반 소스‑트리 검색기로, 코드 패턴에 맞게 유지 및 최적화되었습니다.
ugrep확장된 정규식 지원과 성능 튜닝을 갖춘 풍부한 기능의 현대 grep 클론.
sift대형 디렉터리를 위한 재귀 검색 도구로, 개발자 워크플로에 최적화되었습니다.

벤치마킹 방법론

  • 검색 엔진의 성능을 평가하기 위해 벤치마크는 두 가지 핵심 지표인 런타임최대 메모리 사용량에 초점을 맞추었으며, 이는 전체 자원 사용량을 나타냅니다.
  • 자원 추적은 **cgmemtime**을 사용하여 수행했으며, 이는 프로세스 그룹의 최대 메모리 사용량을 캡처하는 이상적인 도구입니다.
  • 벤치마킹 과정은 benchgab.awk(버전 2026.02.10)를 통해 자동화되었으며, 이 맞춤 실행기는 워밍업, 다중 테스트 실행을 처리하고 통계 지표와 비교 분석을 위한 정규화 파라미터를 계산합니다.
  • 각 벤치마크 시퀀스는 초기 워밍업 실행 1회100회의 기록된 실행을 포함했습니다.
  • 전체 방법론, 테스트 환경, 원시 데이터, 통계 분석 및 정규화된 성능 지표는 Awklab.com에 공개되었습니다.

정규화 지표

SymbolMeaning
RT정규화된 중앙값 런타임 – 가장 빠른 구현에 대한 실행 시간(베이스라인 = 1.0)
PM정규화된 중앙값 그룹 최대 메모리 – 가장 적은 메모리 사용량을 보인 구현에 대한 최대 메모리(베이스라인 = 1.0)
F자원 발자국 – RT × PM 로 계산. 값이 낮을수록 동일 작업을 수행하는 데 시스템 자원을 더 효율적으로 사용함을 의미합니다.

정규화된 BEHILOS 벤치마크는 Pareto‑frontier 분석을 사용하여 평가되었습니다(이전 AWK 벤치마킹 연구에서 적용한 바와 동일). 검색 엔진 성능을 시각화하기 위해 정규화된 값들을 2차원 좌표계에 플롯했습니다:

  • x‑축: 정규화된 런타임 (RT)
  • y‑축: 정규화된 최대 메모리 사용량 (PM)

이상적인 점은 **(1, 1)**이며, 이는 가장 빠르면서 동시에 가장 메모리 효율적인 구현을 의미합니다. 로그 스케일을 적용하여 이상점 근처에 군집된 구현들의 가시성을 높였습니다.

Graph: BEHILOS 벤치마크에서 테스트된 검색 도구들의 Pareto 프론티어로, 실행 속도와 메모리 발자국 사이의 최적 트레이드‑오프를 시각화합니다.

Source:

결과 개요

정규화된 BEHILOS 결과는 런타임과 피크 메모리 사용량을 동시에 고려했을 때 테스트된 도구들을 명확히 구분된 성능 계층으로 나눕니다.

전체 승자

  • grep 은 BEHILOS 벤치마크의 전체 승자입니다.
    • 가장 빠른 구현 (RT = 1.00)
    • 최소에 가까운 메모리 기준선 (PM = 1.18)
    • 최소 자원 발자국 (F = 1.18)

grepmawk 가 파레토 프론티어를 정의합니다.

파레토 프론티어

ToolRTPMF
grep1.001.181.18
mawk1.831.001.83
  • grep 은 최소 메모리 기준선에 매우 가깝게 유지하면서 가장 빠릅니다.
  • mawk 은 약간의 런타임 페널티만으로 가장 낮은 피크 메모리 사용량을 달성합니다. 두 도구 모두 한 차원을 개선하면 다른 차원이 악화되므로 파레토 프론티어에 위치하며, 이 워크로드에 대한 최적의 트레이드‑오프 영역을 나타냅니다.

프론티어 근접 도구

ToolRTPMF
rg1.121.311.47
ugrep1.201.381.66
ag1.451.552.25
gawk1.581.622.56

이 도구들은 프론티어에 비해 열위에 있지만 여전히 비교적 가깝습니다. 정규화된 거리와 F 값이 이 특정 작업에 최적은 아니지만, 성능 특성은 여전히 경쟁력이 있음을 보여줍니다. 이는 풍부한 기능 세트, 더 넓은 파일 처리, 혹은 보다 일반적인 워크로드를 선호하는 설계 선택을 반영합니다.

이상치

ToolRTPMF
pt2.302.104.83
sift3.102.457.60
ack4.202.8011.76
nawk8.001.3610.88

이 도구들은 파레토 프론티어에서 크게 벗어나 있습니다. 높은 정규화 런타임과 피크 메모리 사용량으로 인해 F 값이 매우 커, 이 좁게 정의된 벤치마크에 대해 효율성이 낮음을 나타냅니다. BEHILOS 검색의 단순성에 비해 상당한 오버헤드가 발생합니다.

nawk 상세

nawk 은 낮은 피크 메모리 발자국 (PM = 1.36) 을 보이지만, 느린 런타임 (RT = 8.00) 으로 인해 효율적인 영역 밖에 위치합니다. 또한 테스트된 모든 도구 중 가장 높은 피크 메모리 지터를 보여 전체 성능을 더욱 저하시켰습니다.

요약

BEHILOS 벤치마크는 최신의 기능이 풍부한 검색 도구들이 많이 등장했음에도 불구하고, 고전적인 Unix grep이 문자 클래스만을 이용한 단순 검색에서는 가장 효율적인 솔루션임을 보여줍니다. 속도와 적당한 메모리 사용량을 겸비한 grep은 전체적인 자원 발자국이 가장 낮아, 잘 설계되고 집중된 유틸리티의 영원한 가치를 재확인시켜 줍니다.

결론

Pareto 분석을 통해 최소주의와 예측 가능성을 최적화한 도구들이 이 벤치마크에서 우위를 차지하고, 기능이 풍부한 검색기들은 실행 시간과 메모리 양에서 눈에 띄는 비용을 지불한다는 점이 강조됩니다.

BEHILOS grep은 Unix 초창기의 역사적 일화에서 시작되었지만, 효과적인 마이크로‑벤치마크로 입증되었습니다. 그 단순함은 정규식 매칭, 프로세스 시작, 메모리 할당이라는 핵심 비용을 파일 시스템 탐색이나 복잡한 I/O 패턴과 같은 혼란 요인 없이 분리합니다.

이 벤치마크는 낮은 발자국의 텍스트 검색에 있어 수십 년 된 설계 원칙이 여전히 중요함을 보여줍니다. grep과 같은 고전 Unix 도구와 mawk와 같은 경량 구현은 효율성이 주요 목표일 때 여전히 뛰어난 경쟁력을 유지합니다. 현대 검색 엔진은 실제 워크로드에 대해 강력한 기능과 뛰어난 성능을 제공하지만, 그 이점은 대가가 따릅니다.

BEHILOS 벤치마크는 보편적인 “최고” 검색 도구를 선정하려는 목적이 없습니다. 대신, 최소한의, 잘 선택된 워크로드가 속도, 메모리 사용량, 안정성 사이의 근본적인 트레이드‑오프를 어떻게 드러내는지, 그리고 작은 역사적 각주조차도 오늘날 성능에 대해 의미 있는 교훈을 줄 수 있는지를 보여줍니다.

0 조회
Back to Blog

관련 글

더 보기 »

PQP 언어

개요 이름: PQP Language 설명: 언어를 구축하는 과정이 어떻게 작동하는지를 보여주기 위해 만든 미니 프로그래밍 언어입니다. !pichttps://med...