=Paper= {{Paper |id=Vol-1291/ewili14_11 |storemode=property |title=Revisiting Read-ahead Efficiency for Raw NAND Flash Storage in Embedded Linux |pdfUrl=https://ceur-ws.org/Vol-1291/ewili14_11.pdf |volume=Vol-1291 |dblpUrl=https://dblp.org/rec/conf/ewili/OlivierBS14 }} ==Revisiting Read-ahead Efficiency for Raw NAND Flash Storage in Embedded Linux== https://ceur-ws.org/Vol-1291/ewili14_11.pdf
     Revisiting Read-ahead Efficiency for Raw NAND Flash
                  Storage in Embedded Linux
             Pierre Olivier                              Jalil Boukhobza                                Eric Senn
    Univ. Europeenne de Bretagne                  Univ. Europeenne de Bretagne               Univ. Europeenne de Bretagne
     Univ. Bretagne Occidentale                    Univ. Bretagne Occidentale                      Univ. Bretagne Sud
        UMR6585 Lab-STICC                             UMR6585 Lab-STICC                          UMR6585 Lab-STICC
        F29200 Brest, France                          F29200 Brest, France                      F56100 Lorient, France
          +332 98 01 74 35                              +332 98 01 69 73                           +332 97 87 46 03
    pierre.olivier@univ-brest.fr               jalil.boukhobza@univ-brest.fr                   eric.senn@univ-ubs.fr




ABSTRACT                                                                 Embedded Linux has become the de facto operating system
The Linux Read-Ahead mechanism has been designed to bridge          for many embedded applications such as consumer electronics
the gap between the secondary storage low performance and I/O       (smartphones, tablets, etc.), multimedia devices and set-top boxes.
read-intensive applications for personal computers and servers.     It is also integrated in many devices such as routers, video
This paper revisits the efficiency of this mechanism for embedded   surveillance systems, and robots. With Linux, there is no special
Linux using flash memory as secondary storage, which is the case    form of kernel dedicated to embedded systems. Instead, one
for most embedded systems. Indeed, Linux kernel uses the same       unique (configurable) kernel is intended to be used for the widest
read-ahead mechanism whatever the application domain. This          range of devices. One of the peculiarities of embedded Linux is
paper evaluates the efficiency of read-ahead technique for the      the use of a special subsystem to manage bare flash memory based
widely used flash specific file systems that are JFFS2 and          storage systems through Flash File Systems (FFS).
YAFFS2, in terms of response time and energy consumption. We             The explosion of the NAND flash memory market has
used micro-benchmarks to investigate read-ahead effect on those     boosted many embedded system applications, especially consumer
metrics at a fine (system call) granularity. Moreover, we also      electronics, by providing efficient and relatively cheap Non-
study this impact at a higher application level using a macro-      Volatile Memory (NVM). In fact, mobile memory (including both
benchmark evaluating read-ahead effect on the SQLite DBMS           NOR and NAND flash, DRAM and embedded multimedia cards)
read performance and power consumption. As described in this        market have experienced a growth of 14% in 2012 (as compared
paper, disabling this mechanism can improve the performance and     to 2011). However, NAND flash memory presents some specific
energy consumption by up to 70% for sequential patterns and up      constraints one should deal with when designing an embedded
to 60% for random patterns.                                         system: (1) Write/Erase granularity asymmetry: writes are
                                                                    performed on pages whereas erase operations are executed on
                                                                    blocks, a block being composed of pages. (2) Erase-before-write
Categories and Subject Descriptors                                  rule: one cannot modify data in-place. A costly erase operation
D.4.2 [Operating Systems]: Storage Management – secondary           must be achieved before data can be modified in case one needs to
storage, main memory, storage hierarchies. D.4.3 [Operating         update data on the same location. (3) Limited number of write
Systems]: File Systems Management – access methods. D.4.8           /erase (w/e) cycles: the average number is between 5000 and 105
[Operating Systems]: Performance – measurements, modeling           depending on the used flash memory technology. After the
and prediction.                                                     maximum number of erase cycles is achieved, a given memory
                                                                    cell becomes unusable. Finally, (4) the I/O performance for read
General Terms                                                       and write operations is asymmetric.
Performance, Measurement, Design.                                        There are two possible ways to deal with the aforementioned
                                                                    flash memory constraints: (1) through a hardware/software
                                                                    controller included into the memory device itself named the Flash
Keywords                                                            Translation Layer (FTL). This is the case for USB sticks, flash
Embedded Linux, Flash File System, JFFS2, YAFFS2, Linux             cards, solid state drives, etc; or (2) through some specific Flash
Page Cache, Read-Ahead.                                             File System (FFS) implemented at the embedded operating system
                                                                    level in a pure software solution. JFFS2 [1], YAFFS2 [2], and
1. INTRODUCTION                                                     UBIFS [3] are the most popular FFS. All of them rely on a deep
                                                                    layer in the kernel that interfaces the file system with the flash
                                                                    memory driver: the Memory Technology Device (MTD). This
                                                                    software stack behaves differently from traditional block devices
                                                                    and file systems. Resulting interactions with the upper kernel file
                                                                    management layers are thus very different. In these layers is
                                                                    implemented the Linux read-ahead algorithm, which aims to
                                                                    prefetch data read from secondary storage to enhance a process
 EWiLi’14, November 2014, Lisbon, Portugal.                         I/O read performance.
 Copyright retained by the authors.
                                                                      reads smaller amounts. Read-ahead is implemented at the VFS
                                                                      level: it is independent from the underlying file system. This
                                                                      mechanism enhances I/O performance on disk based storage
                                                                      systems because [4]: (1) it reduces mechanical movement by
                                                                      reading large data chunks; (2) it relies on I/O timeouts to
                                                                      asynchronously prefetch data. So, in case of a page cache hit, data
                                                                      are read directly from the page cache inferring no access to the
                                                                      secondary storage.

                                                                      2.2 Motivational Example
                                                                           Because flash memory is fundamentally different from hard
                                                                      disk drives, one could question about the usefulness of read-ahead
                                                                      for flash based storage. Read-ahead is enabled by default on
     Figure 1. Flash-based storage software stack in Linux            Linux, unless the file system itself specifies not to use it. This may
                                                                      be done in the source code of the file system.
     This study analyzes the interaction between the flash based
                                                                           As a preliminary experiment, we used the popular storage
storage system on embedded Linux and the page cache read-ahead
                                                                      benchmark Postmark [5]. Each time a file is read during the
prefetching system. Conducted experimentations showed that a
                                                                      benchmark execution, we measured the time taken by the read()
substantial performance drop is observed for both sequential and
                                                                      system calls, then we computed the mean read throughput. The
random I/O workloads. This leads to subsequent energy
                                                                      throughput measurements were performed at 3 moments during
consumption overhead on both CPU and memory subsystem
                                                                      each file read operation: when 25%, 50% and 100% of the file is
(RAM and flash memory). This paper tries to quantify this
                                                                      read. The benchmark was launched on a hardware platform (TI
behavior.
                                                                      OMAP based board described further in this paper), running
     The paper is organized as follows: the first section gives
                                                                      Linux with (A) read-ahead enabled and (2) read-ahead disabled.
some background on flash memories. Section 3 describes the
                                                                      Results are presented in Table 1.
performance evaluation methodology. Section 4 discusses the
obtained results. Section 5 gives some conclusions.
                                                                             Table 1. Postmark mean read throughput (MB/s)
2. PRELIMINARIES                                                       Percentage           FFS: JFFS2                FFS: YAFFS2
2.1 Background                                                         of files size
                                                                           read        RA ON        RA OFF         RA ON         RA OFF
      To cope with the above-mentioned NAND flash memory
constraints, some specific management mechanisms are                       25%          2.86          6.68          6.68          14.30
implemented. (1) In order to avoid a costly in-place data update, a        50%          4.77          7.63          9.54          14.30
logical-to-physical address mapping mechanism allowing to
                                                                          100%          7.63          7.63          14.30         14.30
perform out-of-place data modifications is used (update data in
another location and invalidate the first copy). (2) As the number
of write/erase (w/e) cycles is limited and because of spatial and           The difference in performance between JFFS2 and YAFFS2
temporal data locality of I/O workloads, some specific blocks         may be due to YAFFS2 internal caching system [2], and JFFS2’s
containing "hot" data can wear out quickly. To avoid this issue,      waste of time in uncompressing random data composing Postmark
wear leveling mechanisms are implemented all with the mapping         files. Those results show that when reading a file, read-ahead
system in order to evenly distribute the erase operations over the    causes a dramatic performance drop if the file is not entirely read
whole memory surface. (3) Performing many update operations           In this paper we study and analyze in details this impact on the
results in many invalidated pages/blocks that must be erased in       performance and power consumption for the popular FFS JFFS2
order to be reused. A garbage collector is used to perform this       and YAFFS2.
task.
      Figure 1 illustrates the FFS layer location inside the Linux    2.3 Related Work
storage hierarchy. User space processes access files using system          Based on the fact that flash memory read operation is
calls, received by the Virtual File System (VFS). VFS role is to      pattern-agnostic (no difference between sequential and random
abstract the idiosyncrasies of the underlying file systems.           reads), read-ahead was deactivated in UBIFS. Nevertheless, no
Moreover, at the VFS level, Linux maintains several caches in         experimental evaluation was published about this issue. In [6],
RAM in order to speed up file operations. In particular, Linux        authors present an algorithm for flash memory management in
page cache is dedicated to file data buffering. VFS maps system       embedded systems for which read-ahead is disabled because of
calls to FFS functions. To access the flash chip, the FFS uses a      performance overhead. In [7], a novel read-ahead algorithm is
NAND driver, MTD.                                                     proposed to enhance read-ahead performance in the context of
      Hard drives exhibit poor performance on random I/O              demand-paging on compressed file system (CramFS) on flash
requests. It is due to the presence of mechanical elements            memory.
generating important latencies. Linux read-ahead [4] mechanism
was designed to alleviate that problem. It allows to sequentially
prefetch more data from the disk than it is requested by a process
accessing a file. The size of prefetched data is based on complex
heuristics. Their aim is to determine if the global read pattern of
the process is sequential or random. On sequential access patterns,
read-ahead prefetches large chunks of data. On random ones, it
                                                                       managing system and user databases in the Android embedded
                                                                       operating system [10].
                                                                            We used for the macro-benchmark experimentation a SQLite
                                                                       database containing a single table. As in [10], we used a schema
                                                                       reproducing the contacts database of an Android operating
                                                                       system. The contacts table contains 17 fields, 12 of which being
                                                                       integers, and 5 being text fields. One of the integer fields is a
                                                                       unique record identifier (primary key). The database was created
                                                                       on previously erased JFFS2 and YAFFS2 flash partitions. The
                                                                       database was filled with 1000 records containing random data.
               Figure 2. Inter arrival time variation                  We created two versions of the database, one with each one of the
                                                                       5 text fields filled with 64 bytes strings, the other with 128 bytes
                                                                       strings. The reported size of the database files was then of 518 KB
3. PERFORMANCE EVALUATION OF                                           for the first version, and 1 MB for the second. In the rest of this
READ-AHEAD ON EMBEDDED LINUX                                           paper we refer to the version 1 as small database, and large
                                                                       database for version 2.
3.1 Methodology and Metrics                                                 Performance evaluation: We created a C application
3.1.1 Micro-benchmarks                                                 integrating the SQLite library and performing select operations on
      The performed experimentations consisted in measuring the        the database. Using the application, we performed selection runs,
performance and energy consumption of sequential and random            each one consisting of one or several record selections from the
I/O workloads on both JFFS2 and YAFFS2 with read-ahead                 database in a loop. A run can be performed in sequential or
enabled and disabled. We first modified JFFS2 and YAFFS2               random mode, according to the read record identifier order
source codes to disable read-ahead. Note that disabling this           (record identifier being assigned incrementally during the table
mechanism can also be done at the application level without            creation). The Linux page cache is dropped before each run and
modifying the kernel sources, by using the posix_fadvise() system      the execution time of each run is measured with gettimeofday().
call. This is a less intrusive but also less generic solution. We      Experiments are ran with read-ahead enabled and disabled.
designed a simple C test program that performs read operations in           Power consumption: We used an adapted version of the
a loop, on a target file stored in a JFFS2 or YAFFS2 flash             power consumption model created in the micro-benchmark phase
memory partition. Read operations were performed with the read()       to estimate read-ahead impact on energy during SQLite selections.
system call and the target file was opened with the O_RDONLY
flag. In the test program, several parameters were varied: the         3.2 Hardware and Software Experimental
number of generated read requests, their size, the target file size,   Configuration
inter-arrival times, and the access pattern (random or sequential).          We used a Mistral Omap3evm board embedding an
Before each test, the Linux page cache was emptied to insure the       OMAP3530 (720 MHz ARM Cortex A8) CPU, 256 MB of RAM,
same initial state.                                                    and 256 MB of Micron SLC (Single Level Cell) NAND flash. The
      Performance evaluation: The execution time of each read()        NAND chip datasheet reports a latency of 130 µs to read a 2048
system call was measured using the gettimeofday() system               bytes flash page (internal read operation plus transfer on the I/O
function, giving a microsecond precision. We also used Flashmon        bus). As stated earlier, the RAM and flash share the same power
[8] to trace the number of flash I/O accesses or each test to          rail. The Linux kernel 2.6.37 was used with a standard embedded
compare the number of generated read operations with and               kernel configuration. For the power consumption measurements,
without read-ahead mechanism.                                          we used the Open-PEOPLE (Open-Power and Energy
      Power consumption: In order to study how the read-ahead          Optimization PLatform and Estimator) platform [11][12]
mechanism impacts the energy consumption, we measured during           equipped with a National Instruments PXI-4472 module. For the
read accesses the power on both the (1) CPU and (2) RAM + flash        macro-benchmark we used the version 3.7.15.2 of SQLite.
memory power rails (RAM and flash share the same power rail on
our hardware test platform). It allowed us to build a simple power     4. RESULTS AND DISCUSSION
consumption model to estimate read-ahead effect on the I/O
energy consumption. The basic idea behind the model is to
                                                                       4.1 Micro-benchmarks: Read system call
multiply the mean power measured during read accesses by the           performance
execution time of a given experimentation to obtain the energy         4.1.1 Impact of Inter-arrival Times: why read-ahead
consumption.
                                                                       performs badly with FFS
3.1.2 SQLite Macro-benchmark                                                Using disks, the read-ahead mechanism can be launched
     SQLite [9] is a relational database engine operated by the        asynchronously during I/O timeouts to optimize I/O response
SQL query language. One of its specificities is the fact that a        times. In contrast, the Linux NAND driver (MTD) used by FFS is
SQLite database is fully contained in a single file on top of a        a fully synchronous software stack. We tested this feature by
regular file system. Moreover, the SQLite DBMS is available in         replaying the same experimentations, sequentially reading part of
various formats, in particular in the form of a C library which can    a 5MB file, and inserting inter-arrival times between reads.
be directly embedded in (i.e. compiled with) an application,                Figure 2 shows the mean read latency when varying inter-
eliminating the need for any external dependency. Because of that      arrival times with read-ahead enabled under sequential workload.
portability, its relatively low CPU load /memory footprint, and its    Response times are not impacted by the inter-arrival time
tolerance to sudden system shutdown, SQLite is widely used in          increase, which confirms the synchronous nature of flash
embedded systems. In particular, SQLite is the DBMS used for           operations. In fact, when read-ahead is enabled, the prefetching
                                                                       (upper) VFS level. Read-ahead just asks the file system for more
                                                                       data, which leads to more flash memory reads. This can be
                                                                       verified in Figure 3-b showing the results of the same
                                                                       experimentations in terms of number of flash memory reads
                                                                       generated (traced with Flashmon).
                                                                            On sequential workloads, we can notice that the smaller the
                                                                       number of requests, the better the improvement when disabling
                                                                       read-ahead (we can observe more than 50% flash operations
                                                                       reduction when performing less than 64 requests on the same file).
                                                                       In fact, read-ahead is very active under sequential workloads, and
                                                                       issues many prefetching requests. As the size of the prefetching
                                                                       requests is stable (proved to be around 128KB for our
                                                                       experimentations), when the number of application read requests
             Figure 3. Number of requests variation                    is small, the overhead of prefetching is relatively high (as all the
requests triggered by the page cache are served synchronously,         prefetched data are not necessarily used). On the other hand, when
thus delaying the application read response times. In other words      the number of requests is high, a larger part of prefetched data is
the I/O latency due to data prefetching is added to the read()         used inducing less overhead.
system call execution time which triggered the read-ahead pass.             Under random workloads, one can also observe a
Because with MTD prefetching is done synchronously, read-              performance improvement when disabling the read-ahead
ahead cannot mask I/O latencies from the calling process.              mechanism. It means that read-ahead is actually activated for
Therefore, in the best case (when all prefetched data are used),       random workloads. We can notice that the improvement is less
read-ahead do not enhance the process read performance.                impressive for small number of requests (20% of improvement for
Moreover, when prefetched data are not used, read-ahead can only       up to 32 requests). Indeed, read-ahead does not prefetch large data
have a negative impact on performance. For that reason, most of        chunks. The improvement increases up to 50% for 256 requests.
the curves presented in this paper show the improvement in             Under random workload, prefetched data is not likely to be
performance / power consumption gained from disabling read-            accessed in a near future, unless the total accessed space is large
ahead.                                                                 enough (as compared to the target file size) to reveal temporal
                                                                       locality. This is what happens starting from 256 requests up to
4.1.2 Impact of Request Number                                         1024: when the total addressed space is large, we observed many
      We varied the request number from 8 to 1024 on a 5MB             page cache hits.
target file for a fixed 4KB request size with no inter-arrival times        A last common observation one can draw is that we get a
between I/O requests. For the highest request number, most of the      minimal performance improvement from disabling the read-ahead
file is read. Figure 3-a shows the improvement rate on the total       mechanism when reading the whole file: this is because there is
I/O response time when disabling read-ahead.                           no waste in the prefetched data (all the prefetched data are read by
      One can observe that disabling read-ahead always improves        the application).
the performance. In addition, the behavior of both JFFS2 and
YAFFS2 is similar as they behave the same under sequential and         4.1.3 Impact of Request Size
random workloads. In fact, read-ahead impact does not depend on             On a 32 MB target file, we varied the number of requests and
the used file system, as the technique is implemented at the           the request size. Results are presented on Figure 4-a. Under




       Figure 4. Performance (top) and power consumption (bottom) results, focusing on request number and size variation.
Figure 5. Example of power consumption measurement on the
                      CPU power rail
sequential workloads, for a fixed small number of requests, we
observe that the improvement when disabling read-ahead
decreases with the increase of the request size. This behavior is
similar to the observations made when varying the number of
requests. Indeed read-ahead impact depends on the total space
read (number of request multiplied by the request size).
                                                                        Figure 6. SQLite SELECT performance improvement for
      Under random workloads the performance optimization is
                                                                                   JFFS2 (top) and YAFFS2 (bottom)
relatively stable, apart from large addressed spaces (1024 requests
of 32 KB). This is caused by the large number of page cache hits      Etotal = texp * (PCPU + PMem)
generated when the addressed space converges to the total file
size. On small addressed spaces the enhancement is lower as read-          Etotal is the total energy consumed by the read operations in
ahead does only prefetch a small amount of data for small random      the experimentation, texp is the execution time of the read
workloads. Finally, one can observe a slight enhancement for 2        operations, and PCPU and PMem are estimations of the mean power
KB requests as compared to 4KB size (size of a memory page).          cost during read operations.
This is probably due to memory alignment issues.                           Results on energy consumption are presented on Figure 4-b,
                                                                      they exhibit a very similar behavior to the performance results. In
                                                                      fact, execution times of read requests are the main factor
4.2 Micro-benchmarks: Energy                                          impacting the energy consumption. Indeed, as shown in Table 2,
                                                                      the variation of the mean power is very slight.
Consumption Estimation
     We observed that the parameters impacting the power on the       4.3 Read-Ahead impact on SQLite database
CPU are the file system type and the fact that read-ahead is          read performance and power consumption
enabled or disabled. In addition to these parameters, the memory
power consumption is also affected by the access pattern. Results          In this section we measured the impact of read-ahead on
are presented in Table 2.                                             SQLite database performance, and the previously presented model
                Table 2. Energy model constants                       is adapted to compute an estimation of read-ahead impact on the
                                                                      database accesses power consumption.
                                               Mean Power Cost
   Com-        File       Access     Read-
  ponent      system      pattern    ahead
                                               (W) during read        4.3.1 Performance impact measurement
                                                 operations                As for the micro-benchmarking results, disabling read-ahead
                                      ON            0.223             always reduces the execution time of the SQL SELECT runs,
              JFFS2
                            no        OFF           0.223             regardless of the file system type, access pattern, and size of the
   CPU
                          impact      ON            0.211             database (small / large). So once again, we plot the performance
             YAFFS2
                                      OFF           0.214             improvement gained by disabling the prefetching mechanism.
                                      ON            0.029             Performance results are presented on Figure 6.
                           SEQ
                                      OFF           0.024                  One can see that the performance improvement on sequential
              JFFS2
                                      ON            0.023             pattern is relatively stable and stays around 10%. Counting both
  Memory                   RAN
                                      OFF           0.023             small and large DB results, mean values for the improvement are
  (RAM +
                                      ON            0.028             9.5% for JFFS2, and 5% for YAFFS2. We did not observe the
   flash)                  SEQ
                                      OFF           0.028             important performance improvement on sequential workloads
             YAFFS2
                                      ON            0.024             measured in the previous section. It may indicate that the majority
                           RAN
                                      OFF           0.026             of the prefetched data are actually used. It is also important to
                                                                      note that sequentially selecting records do not necessarily
      The power cost is obtained by subtracting the idle power        translates into sequential file read operations: this behavior
(power measured when executing the sleep command) from the            depends on the way the records were inserted / updated, and more
power measured during reads. We observed that these values were       generally on SQLite internal algorithms.
stable enough to extract a simple energy model.                            On random workloads, one can see that read-ahead generates
      As one can see in Figure 5, the energy consumption is           an important overhead: the performance improvement is up to
represented by a square area. Whether read-ahead is enabled or        70% for JFFS2, and 50% for YAFFS2. Mean values are 44% and
not, the magnitude of the power does not change. Thus the energy      25% for JFFS2 and YAFFS2 respectively. With random patterns,
consumption is only impacted by the response time value. The          when the number of records read in one run increases, the
energy model can be approximated as follows:                          performance improvement decreases. In that case, because of the
                                                                        results, the main parameters influencing read-ahead impact were
                                                                        proved to be the access pattern, and the proportion of the file read
                                                                        by the process. Disabling the technique improved performance
                                                                        and energy consumption by up to 70% on our test platform. We
                                                                        also found that deactivating read-ahead lead to strong
                                                                        performance and power consumption improvements in the context
                                                                        of SQLite SELECT operations, particularly on random workloads.
                                                                              Kernel     patches     for     disabling      read-ahead  with
                                                                        JFFS2/YAFFS2 can be retrieved at the following URL:
                                                                        http://syst.univ-brest.fr/~pierre/Files/ra_ffs.zip.

                                                                        6. REFERENCES
                                                                        [1] Woodhouse, D. 2001. JFFS: The journalling flash file
                                                                            system. In Proceedings of the Ottawa Linux Symposium
                                                                            (Ottawa, Canada, July 25 – 28, 2001).
                                                                        [2] Wookey. 2004. YAFFS2: a NAND flash file system. UK's
                                                                            Unix & Open Systems User Group Linux Tech. Conf (Leeds,
       Figure 7. SQLite SELECT energy consumption                           United Kingdom, August 5 – 8, 2004).
     improvement for JFFS2 (top) and YAFFS2 (bottom).                   [3] Hunter A. 2008. A Brief Introduction to the Design of
                                                                            UBIFS.
nature of the access, a large part of the file is read and prefetched       www.linux-mtd.infradead.org/doc/ubifs_whitepaper.pdf
(by small amounts) from the flash memory. Thus, the number of               (online, accessed 07/2014).
page cache hits increases and read-ahead calls are less frequent,       [4] Wu F., Xi H., Li J., and Zou N. 2007. Linux readahead: less
minimizing its impact. This depends on the number of records                tricks for more. In Proceedings of the Linux Symposium
selected in the run, and on the total size of the database file.            (Ottawa, Canada, July 27 – 30, 2007), vol. 2, pp. 273–284.
4.3.2 Power consumption impact estimation                               [5] Katcher J. 1997. PostMark: A New File System Benchmark.
                                                                            Technical Report TR3022, Network Appliance.
     Using the same methodology as in the micro-benchmarking
phase, we measured the mean power during a large run of                 [6] Park S., Jung D., Kang J., Kim J. and Lee J. 2006. CFLRU: a
SELECT operations on both JFFS2 and YAFFS2 file systems,                    replacement algorithm for flash memory. In Proceedings of
with read-ahead enabled / disabled. Results are presented in Table          the 2006 international conference on Compilers,
3. We did not vary the access pattern as it was previously proven           Architecture and Synthesis for Embedded Systems (Seoul,
to have a small impact on power consumption.                                Korea, October 23 – 25, 2006), CASES, pp. 234–241.
                                                                        [7] Ahn S., Hyun S., and Koh K. 2009. Improving demand
            Table 3. SQLite energy model constants                          paging performance of compressed filesystem with NAND
   Com-         File      Read-      Mean Power Cost (W) during
                                                                            flash memory. In Selected Papers of the Seventh
  ponent       system     ahead         SELECT operations                   International Conference on Computational Science and
                                                                            Applications (Yongin, Korea, June 29 – July 2, 2009),
                           ON                 0.24565
               JFFS2                                                        ICCSA’09, 84–88.
                           OFF                0.23925
   CPU                                                                  [8] Olivier P., Boukhobza J. and Senn E. 2014. Flashmon v2:
                           ON                0,245814
              YAFFS2
                           OFF               0,245296
                                                                            monitoring raw flash memory accesses for embedded Linux.
                           ON                0,030188
                                                                            ACM SIGBED Review vol. 11, issue 1, Special issue of the
  Memory       JFFS2                                                        Embed With Linux (EWiLi) International workshop,
                           OFF               0,036863
  (RAM +                                                                    Toulouse, France, 2013.
                           ON                0,033325
   flash)     YAFFS2                                                    [9] Hipp D.R. and Kennedy D. 2007. SQLite. www.sqlite.org
                           OFF               0,036319
                                                                            (online, accessed 07/2014).
     The mean power cost was multiplied by the execution time           [10] Kim J.M. and Kim J.S. 2012. AndroBench: Benchmarking
measurements of SQLite SELECT runs presented in the previous                 the Storage Performance of Android-Based Mobile Devices.
section. Figure 7 represents the estimated energy savings obtained           In Frontiers in Computer Education Advances in Intelligent
by disabling read-ahead. Once again, as the various power values             and Soft Computing Volume 133,Springer, pp 667-674.
measured exhibit few variations, the execution time is the main         [11] Senn E., Chillet D., Zendra O., Belleudy C., Bilavarn S.,
influencing factor in the energy equation. Thus, the energy                  Atitallah R. B. , Samoyeau C. and Fritsch A. 2012. Open-
savings plots are very similar to the run time improvements                  PEOPLE: open power and energy optimization platform and
presented in Figure 6. Taking both large and small DB                        estimator. In Proceedings of the 2012 15th Euromicro
configurations, the mean energy savings for JFFS2 are 8.6% (seq.)            Conference on Digital System Design (Cesme, Izmir, Turkey,
and 41% (ran.). For YAFFS2, these numbers are 5.3% and 25.5%.                September 5 – 8, 2012), DSD, pp. 668–675.
5. CONCLUSION                                                           [12] Benmoussa Y., Senn E. and Boukhobza J. 2014. Open-
     Because of the synchronous nature of the NAND driver on                 PEOPLE, a collaborative platform for remote and accurate
embedded Linux, read-ahead has a negative impact on both                     measurement and evaluation of embedded systems power
performance and power consumption of raw NAND flash based                    consumption. In 22nd IEEE International Symposium on
embedded storage systems. We studied that effect on JFFS2 and                Modeling, Analysis and Simulation of Computer and
YAFFS2 flash file systems. According to micro-benchmarking                   Telecommunication Systems.