Azure での Linux VM の最適化Optimize your Linux VM on Azure

コマンド ラインやポータルを使用すると、Linux 仮想マシン (VM) を簡単に作成できます。Creating a Linux virtual machine (VM) is easy to do from the command line or from the portal. このチュートリアルでは、Microsoft Azure Platform でのパフォーマンスが最適化されるように Linux 仮想マシンがセットアップされていることを確認する方法を説明します。This tutorial shows you how to ensure you have set it up to optimize its performance on the Microsoft Azure platform. このトピックでは Ubuntu Server VM を使用しますが、 テンプレートとして独自のイメージを使用して Linux 仮想マシンを作成することもできます。This topic uses an Ubuntu Server VM, but you can also create Linux virtual machine using your own images as templates.

前提条件Prerequisites

このトピックでは、利用中の Azure サブスクリプション (無料試用版のサインアップ) が既にあり、VM を Azure サブスクリプションにプロビジョニング済みであることを前提としています。This topic assumes you already have a working Azure subscription (free trial signup) and have already provisioned a VM into your Azure subscription. VM を作成する前に、最新の Azure CLI がインストールされていることを確認し、az login を使用して Azure サブスクリプションにログインしておく必要があります。Make sure that you have the latest Azure CLI installed and logged in to your Azure subscription with az login before you create a VM.

Azure OS ディスクAzure OS Disk

Azure に Linux VM を作成すると、その VM には 2 つのディスクが関連付けられています。Once you create a Linux VM in Azure, it has two disks associated with it. /dev/sda は OS ディスクを表し、 /dev/sdb は一時ディスクを表します。/dev/sda is your OS disk, /dev/sdb is your temporary disk. メインの OS ディスク ( /dev/sda) は、VM の高速起動用に最適化されており、ワークロードでは優れたパフォーマンスを発揮しないため、オペレーティング システム以外の用途には使用しないでください。Do not use the main OS disk (/dev/sda) for anything except the operating system as it is optimized for fast VM boot time and does not provide good performance for your workloads. データ用の永続的で最適化されたストレージにするために、1 つ以上のディスクを VM に接続することができます。You want to attach one or more disks to your VM to get persistent and optimized storage for your data.

サイズとパフォーマンスの目標に向けたディスクの追加Adding Disks for Size and Performance targets

VM サイズに基づいて、A シリーズのマシンでは最大 16 個、D シリーズのマシンでは 32 個、G シリーズのマシンでは 64 個のディスクを接続できます (ディスクのサイズはそれぞれ、最大 1 TB)。Based on the VM size, you can attach up to 16 additional disks on an A-Series, 32 disks on a D-Series and 64 disks on a G-Series machine - each up to 1 TB in size. スペースと IOPS の要件に従って、必要に応じてさらにディスクを追加します。You add extra disks as needed per your space and IOps requirements. 各ディスクのパフォーマンス目標は、Standard Storage の場合は 500 IOPS、Premium Storage の場合は最大 5,000 IOPS です。Each disk has a performance target of 500 IOps for Standard Storage and up to 5000 IOps per disk for Premium Storage.

キャッシュ設定が ReadOnly または None に設定されている Premium Storage ディスクで最高レベルの IOPS を実現するには、Linux でファイル システムをマウントするときにバリアを無効にする必要があります。To achieve the highest IOps on Premium Storage disks where their cache settings have been set to either ReadOnly or None, you must disable barriers while mounting the file system in Linux. Premium Storage ディスクでこれらのキャッシュ設定を使用する場合は、ディスクへの書き込みの耐久性が保証されるため、バリアは必要ありません。You do not need barriers because the writes to Premium Storage backed disks are durable for these cache settings.

  • reiserFS: バリアを無効にするには、マウント オプション barrier=none を使用します (バリアを有効にするには barrier=flush を使用します)。If you use reiserFS, disable barriers using the mount option barrier=none (For enabling barriers, use barrier=flush)
  • ext3/ext4: バリアを無効にするには、マウント オプション barrier=0 を使用します (バリアを有効にするには barrier=1 を使用します)。If you use ext3/ext4, disable barriers using the mount option barrier=0 (For enabling barriers, use barrier=1)
  • XFS: バリアを無効にするには、マウント オプション nobarrier を使用します (バリアを有効にするには barrier を使用します)。If you use XFS, disable barriers using the mount option nobarrier (For enabling barriers, use the option barrier)

非管理対象ストレージ アカウントに関する考慮事項Unmanaged storage account considerations

Azure CLI で VM を作成したときの既定のアクションでは、Azure Managed Disks が使用されます。The default action when you create a VM with the Azure CLI is to use Azure Managed Disks. これらのディスクは Azure プラットフォームによって処理されるため、ディスクを格納するための準備も場所も必要ありません。These disks are handled by the Azure platform and do not require any preparation or location to store them. 非管理対象ディスクではストレージ アカウントが必要であり、パフォーマンスに関するその他の考慮事項がいくつかあります。Unmanaged disks require a storage account and have some additional performance considerations. マネージド ディスクの詳細については、「Azure Managed Disks の概要」をご覧ください。For more information about managed disks, see Azure Managed Disks overview. 次のセクションで説明するパフォーマンスに関する考慮事項は、非管理対象ディスクを使用する場合にのみ適用されます。The following section outlines performance considerations only when you use unmanaged disks. 既定の推奨ストレージ ソリューションは、マネージド ディスクを使用することです。Again, the default and recommended storage solution is to use managed disks.

非管理対象ディスクを使用する VM を作成する場合は、近接性を確保し、ネットワーク待ち時間を最小限に抑えるために、VM と同じリージョンに存在するストレージ アカウントからディスクを接続する必要があります。If you create a VM with unmanaged disks, make sure that you attach disks from storage accounts residing in the same region as your VM to ensure close proximity and minimize network latency. 各 Standard Storage アカウントには、最大 20,000 IOPS および 500 TB のサイズ容量が適用されます。Each Standard storage account has a maximum of 20k IOps and a 500 TB size capacity. この制限により、OS ディスクと作成するすべてのデータ ディスクの両方を含む、約 40 個の使用頻度の高いディスクとなります。This limit works out to approximately 40 heavily used disks including both the OS disk and any data disks you create. Premium Storage アカウントの場合、最大 IOPS に関する制限はありませんが、32 TB のサイズ制限があります。For Premium Storage accounts, there is no Maximum IOps limit but there is a 32 TB size limit.

IOPS が高いワークロードを処理していて、ディスクに Standard Storage を選択した場合は、ディスクを複数のストレージ アカウントに分割して、Standard Storage アカウントの上限である 20,000 IOPS に達しないようにすることが必要になる可能性があります。When dealing with high IOps workloads and you have chosen Standard Storage for your disks, you might need to split the disks across multiple storage accounts to make sure you have not hit the 20,000 IOps limit for Standard Storage accounts. VM には、ストレージ アカウントやストレージ アカウントの種類が異なるディスクを組み合わせて使用し、最適な構成を実現することができます。Your VM can contain a mix of disks from across different storage accounts and storage account types to achieve your optimal configuration.

VM の一時ドライブYour VM Temporary drive

既定では、VM の作成時に、Azure から OS ディスク ( /dev/sda) と一時ディスク ( /dev/sdb) が提供されます。By default when you create a VM, Azure provides you with an OS disk (/dev/sda) and a temporary disk (/dev/sdb). ユーザーが追加するその他のディスクはすべて、 /dev/sdc/dev/sdd/dev/sde のように表示されます。All additional disks you add show up as /dev/sdc, /dev/sdd, /dev/sde and so on. 一時ディスク ( /dev/sdb) 上のすべてのデータは持続性がないため、VM のサイズ変更、再デプロイ、メンテナンスなどの特定のイベントによって VM が再起動された場合に失われる可能性があります。All data on your temporary disk (/dev/sdb) is not durable, and can be lost if specific events like VM Resizing, redeployment, or maintenance forces a restart of your VM. 一時ディスクのサイズと種類は、デプロイ時に選択した VM サイズに関連付けられています。The size and type of your temporary disk is related to the VM size you chose at deployment time. プレミアム サイズの VM (DS、G、DS_V2 の各シリーズ) では、ローカル SSD が一時ドライブに使用され、さらに最大 48,000 IOPS のパフォーマンスが実現します。All of the premium size VMs (DS, G, and DS_V2 series) the temporary drive are backed by a local SSD for additional performance of up to 48k IOps.

Linux のスワップ ファイルLinux Swap File

Azure VM が Ubuntu イメージまたは CoreOS イメージから作成されている場合は、CustomData を使用して cloud-config を cloud-init に送信できます。If your Azure VM is from an Ubuntu or CoreOS image, then you can use CustomData to send a cloud-config to cloud-init. cloud-init を使用するカスタム Linux イメージをアップロードしている場合は、cloud-init を使用してスワップ パーティションも構成します。If you uploaded a custom Linux image that uses cloud-init, you also configure swap partitions using cloud-init.

Ubuntu Cloud Image では、cloud-init を使用してスワップ パーティションを構成する必要があります。On Ubuntu Cloud Images, you must use cloud-init to configure the swap partition. 詳細については、「AzureSwapPartitions」をご覧ください。For more information, see AzureSwapPartitions.

cloud-init のサポートがないイメージの場合、Azure Marketplace からデプロイされた VM イメージで VM Linux エージェントが OS と統合されています。For images without cloud-init support, VM images deployed from the Azure Marketplace have a VM Linux Agent integrated with the OS. このエージェントにより、VM がさまざまな Azure サービスと対話できるようになります。This agent allows the VM to interact with various Azure services. Azure Marketplace から標準イメージをデプロイしたことを想定すると、Linux スワップ ファイルの設定を正しく構成するには、次の操作を行う必要があります。Assuming you have deployed a standard image from the Azure Marketplace, you would need to do the following to correctly configure your Linux swap file settings:

/etc/waagent.conf ファイル内で 2 つのエントリを探して変更します。Locate and modify two entries in the /etc/waagent.conf file. これらのエントリは、専用のスワップ ファイルの存在と、そのスワップ ファイルのサイズを制御します。They control the existence of a dedicated swap file and size of the swap file. 変更しようとしているパラメーターは ResourceDisk.EnableSwap=NResourceDisk.SwapSizeMB=0 ですThe parameters you are looking to modify are ResourceDisk.EnableSwap=N and ResourceDisk.SwapSizeMB=0

次の設定のパラメーターを変更します。Change the parameters to the following settings:

  • ResourceDisk.EnableSwap=YResourceDisk.EnableSwap=Y
  • ResourceDisk.SwapSizeMB={ニーズに合わせたサイズ (MB)}ResourceDisk.SwapSizeMB={size in MB to meet your needs}

この変更を行ったら、変更を反映するために waagent を再起動するか、Linux VM を再起動する必要があります。Once you have made the change, you need to restart the waagent or restart your Linux VM to reflect those changes. free コマンドを使用して空き領域を表示すると、変更が実装され、スワップ ファイルが作成されたことがわかります。You know the changes have been implemented and a swap file has been created when you use the free command to view free space. 次の例では、waagent.conf ファイルを変更した結果として、512 MB のスワップ ファイルが作成されています。The following example has a 512MB swap file created as a result of modifying the waagent.conf file:

azuseruser@myVM:~$ free
            total       used       free     shared    buffers     cached
Mem:       3525156     804168    2720988        408       8428     633192
-/+ buffers/cache:     162548    3362608
Swap:       524284          0     524284

Premium Storage の I/O スケジューリング アルゴリズムI/O scheduling algorithm for Premium Storage

2.6.18 Linux カーネルでは、既定の I/O スケジューリング アルゴリズムが Deadline から CFQ (Completely fair queuing アルゴリズム) に変更されました。With the 2.6.18 Linux kernel, the default I/O scheduling algorithm was changed from Deadline to CFQ (Completely fair queuing algorithm). ランダム アクセス I/O パターンの場合、CFQ と Deadline のパフォーマンスの違いはごくわずかです。For random access I/O patterns, there is negligible difference in performance differences between CFQ and Deadline. ディスク I/O パターンの大部分がシーケンシャルである SSD ベースのディスクの場合、NOOP または Deadline アルゴリズムに戻すと I/O パフォーマンスが向上する可能性があります。For SSD-based disks where the disk I/O pattern is predominantly sequential, switching back to the NOOP or Deadline algorithm can achieve better I/O performance.

現在の I/O スケジューラの表示View the current I/O scheduler

次のコマンドを使用します。Use the following command:

cat /sys/block/sda/queue/scheduler

現在のスケジューラを示す次の出力が表示されます。You see following output, which indicates the current scheduler.

noop [deadline] cfq

I/O スケジューリング アルゴリズムの現在のデバイス (/dev/sda) を変更します。Change the current device (/dev/sda) of I/O scheduling algorithm

次のコマンドを使用します。Use the following commands:

azureuser@myVM:~$ sudo su -
root@myVM:~# echo "noop" >/sys/block/sda/queue/scheduler
root@myVM:~# sed -i 's/GRUB_CMDLINE_LINUX=""/GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"/g' /etc/default/grub
root@myVM:~# update-grub

注意

この設定を /dev/sda だけに適用しても役立ちません。Applying this setting for /dev/sda alone is not useful. I/O パターンの大部分がシーケンシャル I/O であるすべてのデータ ディスクで設定します。Set on all data disks where sequential I/O dominates the I/O pattern.

次の出力では、grub.cfg が正常に再構築され、既定のスケジューラが NOOP に更新されたことを確認できます。You should see the following output, indicating that grub.cfg has been rebuilt successfully and that the default scheduler has been updated to NOOP.

Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.13.0-34-generic
Found initrd image: /boot/initrd.img-3.13.0-34-generic
Found linux image: /boot/vmlinuz-3.13.0-32-generic
Found initrd image: /boot/initrd.img-3.13.0-32-generic
Found memtest86+ image: /memtest86+.elf
Found memtest86+ image: /memtest86+.bin
done

Red Hat 配布ファミリでは、次のコマンドのみが必要です。For the Red Hat distribution family, you only need the following command:

echo 'echo noop >/sys/block/sda/queue/scheduler' >> /etc/rc.local

ソフトウェア RAID の使用による IOPS の向上Using Software RAID to achieve higher I/Ops

単一のディスクで実現できる以上の IOPS を必要とするワークロードの場合、複数のディスクから成るソフトウェア RAID 構成を使用する必要があります。If your workloads require more IOps than a single disk can provide, you need to use a software RAID configuration of multiple disks. Azure は既にローカルのファブリック層でディスクの回復性を実現しているため、RAID 0 のストライピング構成を使用することで最高レベルのパフォーマンスが実現されます。Because Azure already performs disk resiliency at the local fabric layer, you achieve the highest level of performance from a RAID-0 striping configuration. ドライブのパーティション分割、フォーマット、マウントを実行する前に、Azure 環境でディスクをプロビジョニングして作成し、それらを Linux VM に接続します。Provision and create disks in the Azure environment and attach them to your Linux VM before partitioning, formatting and mounting the drives. Azure の Linux VM でのソフトウェア RAID セットアップの構成の詳細については、「 Linux でのソフトウェア RAID の構成 」を参照してください。More details on configuring a software RAID setup on your Linux VM in azure can be found in the Configuring Software RAID on Linux document.

次の手順Next Steps

最適化に関するあらゆる話題と同様に、それぞれの変更の前後にテストを行って、その変更の影響を評価する必要があります。Remember, as with all optimization discussions, you need to perform tests before and after each change to measure the impact the change has. 最適化は段階的なプロセスであり、環境内のコンピューターごとに結果は異なります。Optimization is a step by step process that has different results across different machines in your environment. ある構成に効果があっても、それが他の構成に効果があるとは限りません。What works for one configuration may not work for others.

関連リソースへの便利なリンクは次のとおりです。Some useful links to additional resources: