Event Store logo

Menu

Developer Blog

Disabling disk caching in Ubuntu

Amongst the many interesting discussions I had at Build Stuff last week was about how it’s desirable to switch off disk caching for the disks used for Event Store databases to help ensure that data is durable in the face of power failures.

This is actually true of many databases, indeed, postgres gives you a warning about the possible dire consequences of having write caching switched on when you may experience power failure.

You can find out fairly easily whether disk caching is enabled on your disk or not by using the hdparm utility, like this:

``` $sudo hdparm -i /dev/sda

Model=INTEL SSDMCEAC060B3, FwRev=LLLi, SerialNo=CVLI303201QK060K Config={ Fixed } RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0 BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSec=16 CurrCHS=16383/16/63, CurSecs=16514064, LBA=yes, LBAsects=117231408 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio3 pio4 DMA modes: mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 udma6 AdvancedPM=yes: unknown setting WriteCache=enabled Drive confirms to: unknown: ATA/ATAP-2,3,4,5,6,7

  • signifies the current active mode THISDFGJSDGKSJFGNJSDHFGNKSDJFNSJFHGN<ASDFKNSKFGHNSRKNSKDHNFNKXdfHGNDMFHGNDJKFHGSKDJFNDKFGNDKFJGDKFGNDKRGNDFG<JNDcKVUNSKGND<BJNXKGHNDFKGNDFMGJNDFG ```

The important part here is in bold, WriteCache=enabled, which is not what we want! To disable the write cache, edit /etc/hdparm.conf, and uncomment the second of these two lines so that it looks like this:

``` # -W Disable/enable the IDE drive’s write-caching feature write_cache = off After a restart, the output of hdparm -i /dev/sda should look like this:

$sudo hdparm -i /dev/sda

Model=INTEL SSDMCEAC060B3, FwRev=LLLi, SerialNo=CVLI303201QK060K Config={ Fixed } RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0 BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSec=16 CurrCHS=16383/16/63, CurSecs=16514064, LBA=yes, LBAsects=117231408 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio3 pio4 DMA modes: mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 udma6 AdvancedPM=yes: unknown setting WriteCache=disabled Drive confirms to: unknown: ATA/ATAP-2,3,4,5,6,7

  • signifies the current active mode ```

Obviously here you should replace /dev/sda with whichever device your database is on!

Note that simply disabling drive caching is actually not enough to ensure that writes are durable – many drives still misbehave (especially the Intel 520 series SSDs)!