# EXPRESS: Exploiting Energy-Accuracy Tradeoffs in 3D NAND Flash Memory for Energy-Efficient Storage
## 4 Experimental Evaluation
### Effects of Page-to-Page Variability  
3D NAND flash memories exhibit page-to-page variations because of the unique nature of the array geometry and the intrinsic process variations within the array. Figure 9a shows the organization of a 3D NAND memory block configured in the SLC mode. The pages in a block are organized in rows that correspond to the physical vertical layers (\(L_{0},\ L_{1},\ \ldots L_{N-1}\)) and columns that correspond to the sub-blocks (\(0,\ 1,\ \ldots,\ M-1\)). A page number within a block can be expressed as \(P_{i}^{L_{j}}\), where \(L_{j}\) represents the layer number, and \(i=0,\ 1,\ \ldots\ M-1\). The chip under evaluation has 32 layers (\(N=32\),) where each layer contains 16 logical pages (\(M=16\)) of a given memory block. Thus, there are a total of \(16\times 32=512\) pages within a block. We performed a characterization of the page program times by sequentially programming all of the pages of a memory block using a random data pattern. Our characterization results are shown as a cumulative distribution plot in Figure 9b. The results indicate that the standard-page program time varies significantly among different pages within the same block. Since the implementation of EXPRESS requires an estimation of the \(t_{pp}\) on the basis of the nominal page program time (\(t_{prog}\)), it needs to be adapted in order to account for the page-to-page variability. To understand the precise nature of the page-to-page variability, we measure each page's nominal page program time in a block in SLC mode. Figure 10 shows the results of these measurements. We can make the following two observations from these results:  
1. The first page to be programmed in a given layer takes more time to complete a program operation. We classify these pages as \"slow\" pages, shown in blue in Figure 10;
2. The \(t_{prog}\) variability is minimal among memory pages located in the same vertical layer (\(P_{1}^{L_{j}}\)_to_\(P_{15}^{L_{j}}\)) of the array. Consequently, we argue that the memory controller can learn the \(t_{prog}\) value from the page, \(P_{1}^{L_{j}}\) (referred to as a \"learning\" page), and then apply EXPRESS when programming the remaining pages. Figure 9: (**a**) organization of a 3D NAND memory block, and (**b**) cumulative distribution of the measured nominal page program time for SLC memory pages of a given block. To further illustrate the variability, we compute the median \(t_{prog}\) as the last column in Figure 10. We find that the median \(t_{prog}\) varies between different layers, but within the same layer, the \(t_{prog}\) remains relatively unchanged (except the first page of a layer). We exploit this observation and propose an adaptive learning algorithm to maximize the energy savings for the EXPRESS method. To address the observed variabilities, we propose the following modification to EXPRESS. The nominal program time variation among slow pages (marked as blue boxes in Figure 10) is minimal. Consequently, the flash controller may apply EXPRESS on the slow pages by learning the corresponding \(t_{prog}\) from the first page of the block (\(P_{0}^{L_{0}}\)). The remaining pages of the block are classified as learning pages (yellow) and EXPRESS pages (green). The nominal page program operations are performed on the learning pages to acquire the exact \(t_{prog}\) value, and EXPRESS is applied on the remaining pages of the layer (\(P_{2}^{L_{j}}\)_to_\(P_{15}^{L_{j}}\)) by estimating the corresponding \(t_{pp}\) using Equation (2). Next, we discuss the page-to-page variability for a flash block configured in the MLC mode. Figure 11a shows the cumulative distribution of \(t_{prog}\) for the LSB and MSB pages. We find significant page-to-page variability for both the LSB (blue line) and MSB (red line) pages. LSB pages behave similarly to the SLC pages, where the first LSB page of a given layer requires significantly longer \(t_{prog}\), compared to the other LSB pages in the same layer.