Creating in-memory RAM disks


Compute Engine instances have high-performance, enterprise-class memory that you can use to run your applications. You can allocate some of this memory to create a RAM disk with exceptionally low latency and high throughput. RAM disks work well when your application expects a file system structure and cannot simply store its data in memory. RAM disks alone do not provide any storage redundancy or flexibility, so it is best to use RAM disks in combination with other instance storage options.

RAM disks share instance memory with your applications. If your instances do not have enough memory to contain RAM disks and your applications, create instances with highmem machine types, such as N2 or upgrade your existing instances to add more memory.

Before you begin

  • Read about the difference between RAM disks and other Compute Engine storage options.
  • If you haven't already, set up authentication. Authentication is the process by which your identity is verified for access to Google Cloud services and APIs. To run code or samples from a local development environment, you can authenticate to Compute Engine as follows.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.

    REST

    To use the REST API samples on this page in a local development environment, you use the credentials you provide to the gcloud CLI.

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

Creating a RAM disk

You can create a RAM disk with the tmpfs filesystem, which is included by default in most Linux distributions.

  1. If your instance does not have enough available memory, you can optionally change the instance machine type to a machine type with more memory.

  2. Connect to your instance through SSH. For this example, go to the VM instances page and click the SSH button next the instance where you want to add a RAM disk.

  3. Create a mount point for your RAM disk.

    $ sudo mkdir /mnt/ram-disk
    
  4. Create and mount a new tmpfs RAM disk. You must determine a value for the size property that meets your storage requirements without competing with your applications for memory or expending all of the available memory. For this example, the instance has a n1-highmem-32 machine type with 208 GB of memory, so a 50g RAM disk size is appropriate.

    $ sudo mount -t tmpfs -o size=50g tmpfs /mnt/ram-disk
    
  5. Add the RAM disk to the /etc/fstab file so that the device automatically mounts again if you restart the instance:

    $ echo 'tmpfs /mnt/ram-disk tmpfs nodev,nosuid,noexec,nodiratime,size=50G 0 0' | sudo tee -a /etc/fstab
    

Deleting a RAM disk

You can unmount a tmpfs RAM disk just like any other volume. This deletes the RAM disk and any data that is stored in it. For this example, remove a RAM disk that is mounted at /mnt/ram-disk:

$ sudo umount /mnt/ram-disk

Automatically backing up RAM disk data between instance restarts

You can back up a RAM disk before your instance restarts to preserve the RAM disk data until the instance starts up again. Back up your data to a persistent disk to preserve it.

  1. Create and mount a persistent disk to use as a backup disk for your RAM disk. Make sure the disk is big enough to contain the information in the RAM disk.

  2. Create a shutdown script for your instance with an rsync command that writes the RAM disk contents to the backup volume. For this example, use the gcloud CLI to add the shutdown-script metadata to the instance with the RAM disk mounted at /mnt/ram-disk and the persistent disk mounted at /mnt/ram-disk-backup.

    gcloud compute instances add-metadata example-instance --metadata shutdown-script="#! /bin/bash
    rsync -a --delete --recursive --force /mnt/ram-disk/ /mnt/ram-disk-backup/
    EOF"
    
  3. Optionally, you can also create a startup script that restores the files back to the RAM disk when the instance starts again. Use the gcloud CLI to add the startup-script metadata to the instance.

    gcloud compute instances add-metadata example-instance --metadata startup-script="#! /bin/bash
    rsync -a --recursive --force /mnt/ram-disk-backup/ /mnt/ram-disk/
    EOF"