Application Notes: eMMC lifetime optimization

From Compulab Mediawiki
Revision as of 15:34, 7 October 2020 by imported>Uri.mashiach
Jump to: navigation, search

Introduction

Flash memory devices have limited endurance that is measured in program-erase (P/E) cycles. P/E cycle is a sequence of events in which data is written to solid-state flash memory cell, then erased, and then rewritten. Typical eMMC endurance is 3000 P/E cycles. Problems with storage can negatively affect performance and reliability of the device. It is highly important to take into consideration eMMC endurance during embedded system development. Standard operating systems and file-systems typically are not configured for eMMC lifetime optimization. It is recommended to employ the techniques outlined below in order to configure the system for optimized eMMC usage.

Recommendations for eMMC lifetime optimization

Use tmpfs

Use tmpfs to store temporary files. Tmpfs is a temporary file storage facility on Unix-like systems stored in RAM. It helps to reduce unnecessary writes to the eMMC.
To mount temporary directories as tmpfs add the following entries into the system /etc/fstab:

tmpfs   /tmp       tmpfs   defaults,noatime,mode=1777   0 0
tmpfs   /var/tmp   tmpfs   defaults,noatime,mode=1777   0 0

Turn off logging

Turn off or reduce logging. Writing or removing big amounts of data on a regular basis significantly decreases eMMC lifetime.
Turning off the syslog on boot should be done with following command:

systemctl disable syslog

To mount logging as tmpfs add the following entry into the system /etc/fstab:

tmpfs      /var/log            tmpfs      defaults,size=128M     0  0 

Turn off logging of read access times, by adding the noatime option to the rootfs line, in the /etc/fstab
For example:

/dev/root  /                   auto       defaults,noatime      1  1

Do not use swap space

Do not use swap space. Swapping uses internal storage intensively and should be minimized or disabled to increase eMMC lifetime.

Decreasing swap usage should be done with following command:

vm.swappiness=10

Disabling swap usage should be done with following command:

vm.swappiness=0

Use SquashFS

SquashFS is a compressed file-system that is intended for read-only usage.