Stay organized with collections Save and categorize content based on your preferences.
Linux
The performance by disk type chart describes the maximum achievable performance for local SSD partitions. To optimize your apps and VM instances to achieve these speeds, use the following best practices:
Use guest environment optimizations for Local SSDs
By default, most Compute Engine-provided Linux images automatically run an optimization script that configures the instance for peak Local SSD performance. The script enables certain queue sysfs settings that enhance the overall performance of your machine and mask interrupt requests (IRQs) to specific virtual CPUs (vCPUs). This script only optimizes performance for Compute Engine local SSD partitions.
Ubuntu, SLES, and other earlier images might not be configured to include this performance optimization. If you are using any of these images or an image that is earlier than v20141218, you can install the guest environment to enable these optimizations.
Choose an interface to connect your local SSDs
You can connect Local SSDs to your VMs using either the NVMe interface or the SCSI interface. The best choice depends on the operating system (OS) you are using. For most workload configurations involving Local SSDs, using the NVMe interface leads to better performance.
If you need to use a specific OS, choose an interface for your local SSD partitions that works best with your boot disk image.
If you have an existing setup that requires using a SCSI interface, use an image that supports multi-queue SCSI to achieve better performance over the standard SCSI interface.
Enable multi-queue SCSI
Some public images support multi-queue SCSI. To use multi-queue SCSI on custom images that you import to your project, you must enable it yourself. Your imported Linux images can use multi-queue SCSI only if they include kernel version 3.19 or later.
To enable multi-queue SCSI on a custom image, import the image with the VIRTIO_SCSI_MULTIQUEUE guest OS feature enabled and add an entry to your GRUB config:
CentOS
For CentOS7 only.
Import your custom image using the API and include a guestOsFeatures item with a type value of VIRTIO_SCSI_MULTIQUEUE.
Check the value of the /sys/module/scsi_mod/parameters/use_blk_mq file
$ cat /sys/module/scsi_mod/parameters/use_blk_mq
If the value of this file is Y, then multi-queue SCSI is already enabled on your imported image. If the value of the file is N, include scsi_mod.use_blk_mq=Y in the GRUB_CMDLINE_LINUX entry in your GRUB config file and restart the system.
Open the /etc/default/grub GRUB config file in a text editor.
$ sudo vi /etc/default/grub
Add scsi_mod.use_blk_mq=Y to the GRUB_CMDLINE_LINUX entry.
Check the value of the /sys/module/scsi_mod/parameters/use_blk_mq file.
$ cat /sys/module/scsi_mod/parameters/use_blk_mq
If the value of this file is Y, then multi-queue SCSI is already enabled on your imported image. If the value of the file is N, include scsi_mod.use_blk_mq=Y in the GRUB_CMDLINE_LINUX entry in your GRUB config file and restart the system.
Open the sudo nano /etc/default/grub GRUB config file in a text editor.
$ sudo nano /etc/default/grub
Add scsi_mod.use_blk_mq=Y to the GRUB_CMDLINE_LINUX entry.
GRUB_CMDLINE_LINUX="scsi_mod.use_blk_mq=Y"
Save the config file.
Run the update-grub command to regenerate the GRUB file and complete the configuration.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-26 UTC."],[[["\u003cp\u003eCompute Engine-provided Linux images automatically optimize for peak Local SSD performance by enabling specific queue \u003ccode\u003esysfs\u003c/code\u003e settings and masking interrupt requests (IRQs) to virtual CPUs (vCPUs).\u003c/p\u003e\n"],["\u003cp\u003eFor optimal performance with Local SSDs, the NVMe interface is generally recommended, although the SCSI interface is an option, especially when compatibility is a concern, or when using older machine series.\u003c/p\u003e\n"],["\u003cp\u003eWhen using the SCSI interface, enabling multi-queue SCSI on your custom images, which requires kernel version 3.19 or later, can significantly enhance performance over standard SCSI.\u003c/p\u003e\n"],["\u003cp\u003eTo enable multi-queue SCSI on a custom Linux image, the image must be imported with the \u003ccode\u003eVIRTIO_SCSI_MULTIQUEUE\u003c/code\u003e guest OS feature enabled, and the \u003ccode\u003escsi_mod.use_blk_mq=Y\u003c/code\u003e parameter must be included in the GRUB config.\u003c/p\u003e\n"]]],[],null,["Linux\n\n*** ** * ** ***\n\nThe [performance by disk type chart](/compute/docs/disks/local-ssd#performance)\ndescribes the maximum achievable performance for local SSD partitions. To\noptimize your apps and VM instances to achieve these speeds, use the following\nbest practices:\n\nUse guest environment optimizations for Local SSDs\n\nBy default, most Compute Engine-provided Linux images\nautomatically run an optimization script that configures the instance for peak\nLocal SSD performance. The script enables certain\n[queue `sysfs` settings](https://www.kernel.org/doc/Documentation/block/queue-sysfs.rst)\nthat enhance the overall performance of your machine and mask\n[interrupt requests (IRQs)](https://en.wikipedia.org/wiki/Interrupt_request)\nto specific virtual CPUs (vCPUs). This script only optimizes performance for\nCompute Engine local SSD partitions.\n\nUbuntu, SLES, and other earlier images might not be configured to include this\nperformance optimization. If you are using any of these images or an image\nthat is earlier than **v20141218** , you can\n[install the guest environment](/compute/docs/images/install-guest-environment)\nto enable these optimizations.\n\nChoose an interface to connect your local SSDs\n\nYou can connect Local SSDs to your VMs using either the NVMe interface or\nthe SCSI interface. The best choice depends on the operating system (OS) you are\nusing. For most workload configurations involving Local SSDs, using the NVMe\ninterface leads to better performance.\n| **Note:** Newer machine series (third generation) support only the NVMe disk interface.\n\n- **If you need to use a specific OS** , [choose an interface](/compute/docs/disks/local-ssd#choose_an_interface)\n for your local SSD partitions that works best with your boot disk image.\n\n- **If you have an existing setup that requires using a SCSI interface** , use an\n image that supports [multi-queue SCSI](#multiqueue) to achieve better\n performance over the standard SCSI interface.\n\nEnable multi-queue SCSI\n\nSome public images support multi-queue SCSI. To use multi-queue SCSI on custom\nimages that you import to your project, you must enable it yourself. Your\nimported Linux images can use multi-queue SCSI only if they include kernel\nversion `3.19` or later.\n\nTo enable multi-queue SCSI on a custom image, import the image with the\n`VIRTIO_SCSI_MULTIQUEUE` guest OS feature enabled and add\nan entry to your GRUB config: \n\nCentOS\n\nFor CentOS7 only.\n\n1. Import your custom image using the\n [API](/compute/docs/reference/latest/instances) and include a\n `guestOsFeatures` item with a `type` value of `VIRTIO_SCSI_MULTIQUEUE`.\n\n2. Create an instance using your custom image and\n [attach one or more local SSDs](/compute/docs/disks/add-local-ssd#create_local_ssd).\n\n3. [Connect to your instance](/compute/docs/instances/connecting-to-instance)\n through SSH.\n\n4. Check the value of the `/sys/module/scsi_mod/parameters/use_blk_mq` file\n\n ```\n $ cat /sys/module/scsi_mod/parameters/use_blk_mq\n ```\n\n If the value of this file is `Y`, then multi-queue SCSI is already\n enabled on your imported image. If the value of the file is `N`,\n include `scsi_mod.use_blk_mq=Y` in the `GRUB_CMDLINE_LINUX` entry\n in your GRUB config file and restart the system.\n 1. Open the `/etc/default/grub` GRUB config file\n in a text editor.\n\n ```\n $ sudo vi /etc/default/grub\n ```\n 2. Add `scsi_mod.use_blk_mq=Y` to the `GRUB_CMDLINE_LINUX` entry.\n\n GRUB_CMDLINE_LINUX=\" vconsole.keymap=us console=ttyS0,38400n8 vconsole.font=latarcyrheb-sun16 scsi_mod.use_blk_mq=Y\"\n\n 3. Save the config file.\n\n 4. Run the `grub2-mkconfig` command to regenerate the GRUB file and\n complete the configuration.\n\n ```\n $ sudo grub2-mkconfig -o /boot/grub2/grub.cfg\n ```\n 5. Reboot the instance.\n\n ```\n $ sudo reboot\n ```\n\nUbuntu\n\n1. Import your custom image using the\n [Compute Engine API](/compute/docs/reference/latest/instances)\n and include a\n `guestOsFeatures` item with a `type` value of `VIRTIO_SCSI_MULTIQUEUE`.\n\n2. Create an instance using your custom image and\n [attach one or more local SSDs](/compute/docs/disks/local-ssd#create_local_ssd)\n using the SCSI interface.\n\n3. [Connect to your instance](/compute/docs/instances/connecting-to-instance)\n through SSH.\n\n4. Check the value of the `/sys/module/scsi_mod/parameters/use_blk_mq` file.\n\n ```\n $ cat /sys/module/scsi_mod/parameters/use_blk_mq\n ```\n\n If the value of this file is `Y`, then multi-queue SCSI is already\n enabled on your imported image. If the value of the file is `N`,\n include `scsi_mod.use_blk_mq=Y` in the `GRUB_CMDLINE_LINUX` entry\n in your GRUB config file and restart the system.\n 1. Open the `sudo nano /etc/default/grub` GRUB config file\n in a text editor.\n\n ```\n $ sudo nano /etc/default/grub\n ```\n 2. Add `scsi_mod.use_blk_mq=Y` to the `GRUB_CMDLINE_LINUX` entry.\n\n GRUB_CMDLINE_LINUX=\"scsi_mod.use_blk_mq=Y\"\n\n 3. Save the config file.\n\n 4. Run the `update-grub` command to regenerate the GRUB file and complete\n the configuration.\n\n ```\n $ sudo update-grub\n ```\n 5. Reboot the instance.\n\n ```\n $ sudo reboot\n ```\n\nWhat's next\n\n- [Benchmark your local SSDs](/compute/docs/disks/benchmarking-local-ssd-performance).\n- [Learn about local SSD pricing](/compute/disks-image-pricing#localssdpricing)."]]