  To index the increasing volume of data, modern data indexes are typically
stored on SSDs and cached in DRAM. However, searching such an index has
resulted in significant I/O traffic due to limited access locality and
inefficient cache utilization. At the heart of index searching is the operation
of filtering through vast data spans to isolate a small, relevant subset, which
involves basic equality tests rather than the complex arithmetic provided by
modern CPUs. This paper introduces the Search-in-Memory (SiM) chip, which
demonstrates the feasibility of performing data filtering directly within a
NAND flash memory chip, transmitting only relevant search results rather than
complete pages. Instead of adding complex circuits, we propose repurposing
existing circuitry for efficient and accurate bitwise parallel matching. We
demonstrate how different data structures can use our flexible SIMD command
interface to offload index searches. This strategy not only frees up the CPU
for more computationally demanding tasks, but it also optimizes DRAM usage for
write buffering, significantly lowering energy consumption associated with I/O
transmission between the CPU and DRAM. Extensive testing across a wide range of
workloads reveals up to a 9X speedup in write-heavy workloads and up to 45%
energy savings due to reduced read and write I/O. Furthermore, we achieve
significant reductions in median and tail read latencies of up to 89% and 85%
respectively.
