{'fraction_non_alphanumeric': 0.025165562913907286, 'fraction_numerical': 0.0033112582781456954, 'mean_word_length': 5.4297872340425535, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
SPDK: A Development Kit to Build High Performance Storage Applications

There is strong demand on building high performance storage service upon emerging fast storage devices (e.g., NVMe SSDs). Unfortunately, current storage software stack cannot satisfy such requirements and the software overhead becomes a major bottleneck for developing high performance storage applications.According to our performance profiling results, most storage software overhead is caused by kernel I/O stacks due to context switch, data copy, interrupt, resource synchronization and etc. To address these issues, we provide SPDK (storage performance development kit), a set of tools and libraries for writing high performance, scalable, user-mode storage applications. It achieves high performance by moving the necessary drivers into user space and operating them in a polled mode instead of interrupt mode, which eliminates kernel context switch and interrupt handling overhead and also provides lockless resource access. Integrated with SPDK, performance competitive storage applications can be build upon those fast storage devices. In our experiments, the per cpu core IOPS of NVMe device driver in SPDK is about 6X to 10X better than the kernel NVMe driver. Some storage applications are also developed upon SPDK's framework and obtain much better per-core performance compared with the existing solutions. For example, SPDK NVMe over fabrics (NVMe-oF) target is 10X more efficient than Linux Kernel NVMe-oF target solution.