# Data Placement Using a Classifier for SLC/QLC Hybrid SSDs
## 4 Performance Evaluation  
To validate the effectiveness of our proposed data placement method for hybrid SSDs, we developed a comprehensive simulator using Python. This simulator is intricately designed to mimic the real-world functioning of an SSD. It incorporates a range of critical operations such as I/O processing to both the SLC cache and QLC region, intricate address translation mechanisms, garbage collection, and data migration processes. Moreover, it is equipped with a feature for dynamically adjusting the size of the SLC cache, which is crucial for evaluating the adaptability and performance of our data placement scheme under varying conditions. In our simulator, the garbage collection process is governed by a greedy algorithm, and for data migration from the SLC cache to the QLC region, the Least Recently Used (LRU) strategy is employed. The data preprocessing component of our simulator is handled by [PERSON] (2015), a powerful data manipulation and analysis library in Python, which is renowned for its ease of use and versatility in handling large datasets. The training and determination tasks within the simulator are managed by a binary classification model, which is crafted using Keras [26], a high-level neural networks API capable of building and training sophisticated machine-learning models. To benchmark the performance of our algorithm, we utilized the MSR (Microsoft Research) workload [27; 28]. This workload is widely recognized for its comprehensive and realistic representation of real-world SSD usage patterns. The first 60% of the dataset was used for training the ANN model, and the rest 40% was used for testing it. Additionally, we verified the adaptability of our scheme using the VDI (virtual desktop infrastructure) workload obtained from an enterprise VDI server [29], and the YCSB (Yahoo! cloud serving benchmark) workload obtained from a server running RocksDB [30]. For exact and simple analysis, we presumed the SSD in the experiment to be equipped with a single 32 GB QLC NAND flash memory chip, which roughly consists of 4000 blocks. This assumption helps streamline the complexity of the simulation while still providing a realistic scenario for testing our data placement method. Furthermore, we allocated 5% of the total SSD capacity for over-provisioning, a common practice in SSDs to enhance performance and endurance by providing additional space for operations like garbage collection and wear leveling. To comprehensively assess the efficacy of our proposed data placement method, we conducted a comparative analysis against three alternative approaches: (1) QLC-only, where no SLC cache exists; (2) No-classifier, where classification is not applied, and consequently, all data initially passes through the SLC cache; and (3) Size-based, where classification is based solely on I/O size like ComboFTL [7]. In our experiments, as depicted in Figure 3, we dynamically allocated the SLC cache size based on the overall SSD space utilization, a strategy outlined in detail in Table 3[16; 20]. We meticulously analyzed the total execution time for each method, breaking it down into four distinct segments: the times taken to write data to the SLC cache, to write data to the QLC region, to migrate data from the SLC cache to the QLC region, and to conduct garbage collection within the QLC region. The proposed method demonstrated a remarkable performance advantage over the other approaches. It shows performance improvements of 44%, 40%, and 35% when compared to the QLC-only, No-classifier, and Size-based approaches, respectively. These significant improvements can be largely attributed to the more efficient utilization of the SLC cache, which our method achieves through its binary classification system utilizing the eight carefully selected features. By correctly identifying and categorizing cold write requests, our method not only conserves valuable SLC cache  
Figure 3: Performance when the SLC cache size is dynamically adjusted.