  As the amount of data produced in society continues to grow at an exponential
rate, modern applications are incurring significant performance and energy
penalties due to high data movement between the CPU and memory/storage. While
processing in main memory can alleviate these penalties, it is becoming
increasingly difficult to keep large datasets entirely in main memory. This has
led to a recent push for in-storage computation, where processing is performed
inside the storage device.
  We propose TCAM-SSD, a new framework for search-based computation inside the
NAND flash memory arrays of a conventional solid-state drive (SSD), which
requires lightweight modifications to only the array periphery and firmware.
TCAM-SSD introduces a search manager and link table, which can logically
partition the NAND flash memory's contents into search-enabled regions and
standard storage regions. Together, these light firmware changes enable
TCAM-SSD to seamlessly handle block I/O operations, in addition to new search
operations, thereby reducing end-to-end execution time and total data movement.
We provide an NVMe-compatible interface that provides programmers with the
ability to dynamically allocate data on and make use of TCAM-SSD, allowing the
system to be leveraged by a wide variety of applications. We evaluate three
example use cases of TCAM-SSD to demonstrate its benefits. For transactional
databases, TCAM-SSD can mitigate the performance penalties for applications
with large datasets, achieving a 60.9% speedup over a conventional system that
retrieves data from the SSD and computes using the CPU. For database analytics,
TCAM-SSD provides an average speedup of 17.7x over a conventional system for a
collection of analytical queries. For graph analytics, we combine TCAM-SSD's
associative search with a sparse data structure, speeding up graph computing
for larger-than-memory datasets by 14.5%.
