すべてのプロダクト
Search
ドキュメントセンター

:不揮発性メモリによる読み書き性能の向上

最終更新日:Mar 27, 2026

Container Service for Kubernetes (ACK) では、アプリケーションを変更することなく、不揮発性メモリをブロックストレージまたはファイルシステムとして使用できます。これにより、NVM ボリュームの使用が簡素化され、SSD と比較して読み書き性能が 2〜10 倍向上します。このトピックでは、低レイテンシーの一時ストレージやデータ集約型ワークロードに NVM ボリュームを使用する方法について説明します。

ユースケース 1:低レイテンシーの一時的な読み書き

このユースケースには、次のシナリオが含まれます:

  • 継続的インテグレーション (CI) のための一時ストレージ。

  • 小規模ファイルの探索と検索。

  • 高スループットのロギング。

  • サーバーレスシナリオにおける一時ファイルの読み書き。

FIO 読み書き性能ベンチマーク

このセクションでは、PMEM-LVM と SSD の 2 つのボリュームタイプそれぞれに個別のアプリケーションを作成し、そのパフォーマンスをベンチマークします。

  1. YAML ファイルをデプロイして、PMEM-LVM の PersistentVolumeClaim (PVC) と SSD の PVC を宣言します。

    PMEM-LVM PVC の YAML

    allowVolumeExpansion: true
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: csi-pmem-lvm
    mountOptions:
    - dax
    parameters:
      lvmType: striping
      nodeAffinity: "true"
      volumeType: PMEM
    provisioner: localplugin.csi.alibabacloud.com
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pmem-lvm-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 100Gi
      storageClassName: csi-pmem-lvm
    	

    SSD PVC の YAML

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ssd-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 100Gi
      storageClassName: alicloud-disk-topology
    	
  2. YAML ファイルをデプロイしてボリュームをマウントし、fio テストを実行します。

    PMEM-LVM ボリュームのマウントと FIO テストの実行

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: deployment-pmem-lvm
      labels:
        app: pmem-lvm
    spec:
      selector:
        matchLabels:
          app: pmem-lvm
      template:
        metadata:
          labels:
            app: pmem-lvm
        spec:
          containers:
          - name: fio-test
            image: registry.cn-hangzhou.aliyuncs.com/eric-dev/sysbench:fio
            command: ["sh", "-c"]
            args: ["sleep 10000"]
            volumeMounts:
              - name: pmem
                mountPath: "/data"
          volumes:
            - name: pmem
              persistentVolumeClaim:
                claimName: pmem-lvm-pvc
    	

    SSD ボリュームのマウントと FIO テストの実行

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: deployment-ssd
      labels:
        app: ssd
    spec:
      selector:
        matchLabels:
          app: ssd
      template:
        metadata:
          labels:
            app: ssd
        spec:
          containers:
          - name: fio-test
            image: registry.cn-hangzhou.aliyuncs.com/eric-dev/sysbench:fio
            command: ["sh", "-c"]
            args: ["sleep 10000"]
            volumeMounts:
              - name: ssd
                mountPath: "/data"
          volumes:
            - name: ssd
              persistentVolumeClaim:
                claimName: ssd-pvc
    • kubectl exec を使用してテストコンテナに入り、fio テストを実行して PMEM-LVM ボリュームの書き込み性能をベンチマークします。

      mount | grep csi
      cd /data
      fio -filename=./testfile -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=180 -group_reporting -name=rand_100write_4k

      期待される出力:

      write: IOPS=92.0k, BW=363MiB/s (381MB/s)(8812MiB/24262msec)
      lat (nsec): min=2054, max=95278, avg=10544.00, stdev=1697.17
    • kubectl exec を使用してテストコンテナに入り、fio テストを実行して SSD ボリュームの書き込み性能をベンチマークします。

      cd /data
      fio -filename=./testfile -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=180 -group_reporting -name=rand_100write_4k

      期待される出力:

      lat (usec): min=20, max=7168, avg=24.76, stdev=13.97
      write: IOPS=37.3k, BW=146MiB/s (153MB/s)(8744MiB/60001msec)

    結果分析

    ボリュームタイプ

    IOPS

    スループット

    PMEM-LVM

    92,000

    381 MB/s

    SSD

    37,000

    153 MB/s

    この結果から、不揮発性メモリを使用する PMEM-LVM ボリュームは、SSD クラウドディスクの 2〜3 倍のパフォーマンスを発揮することがわかります。

ユースケース 2:データ集約型ワークロード

このセクションでは、SSD クラウドディスク上のデプロイメントと NVM ボリューム上のデプロイメントを比較し、MySQL データベースの書き込み性能をベンチマークします。

SSD クラウドディスクへの MySQL のデプロイ

  1. SSD クラウドディスクボリュームを作成します。

    1. 次のコマンドを実行して、Alibaba Cloud CSI で SSD クラウドディスクボリュームを作成します。

      kubectl apply -f disk-mysql.yaml

      disk-mysql.yaml テンプレートの例は次のとおりです。

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: disk-mysql
      spec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 100Gi
        storageClassName: alicloud-disk-topology
    2. 次のコマンドを実行して、作成された SSD ボリュームを表示します。

      kubectl get pvc disk-mysql

      期待される出力:

      NAME         STATUS   VOLUME              CAPACITY   ACCESS MODES   STORAGECLASS               AGE
      disk-mysql   Bound    d-bp12pcfhp3n931s8****   100Gi      RWO            alicloud-disk-topology   8s
  2. SSD ボリュームを使用する MySQL データベースインスタンスを作成します。

    1. 次のコマンドを実行して、MySQL データベースインスタンスを作成します。

      kubectl apply -f mysql-normal-ssd.yaml

      mysql-normal-ssd.yaml テンプレートは次のとおりです。

      apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
      kind: Deployment
      metadata:
        name: mysql-normal
        labels:
          app: wordpress
      spec:
        selector:
          matchLabels:
            app: wordpress
            tier: mysql
        strategy:
          type: Recreate
        template:
          metadata:
            labels:
              app: wordpress
              tier: mysql
          spec:
            hostNetwork: true
            containers:
            - image: mysql:5.6
              name: mysql
              env:
              - name: MYSQL_ROOT_PASSWORD
                valueFrom:
                  secretKeyRef:
                    name: mysql-pass
                    key: password
              ports:
              - containerPort: 3306
                name: mysql
              volumeMounts:
              - name: mysql
                mountPath: /var/lib/mysql
            volumes:
              - name: mysql
                persistentVolumeClaim:
                  claimName: disk-mysql
      ---
      apiVersion: v1
      kind: Secret
      metadata:
        name: mysql-pass
      type: Opaque
      data:
        username: YWRt****
        password: YWRt****
    2. 次のコマンドを実行して、作成された MySQL データベースインスタンスを確認します。

      kubectl get pod | grep mysql-normal

      期待される出力:

      NAME                    READY    STATUS   RESTARTS    AGE
      mysql-normal-****       1/1      Running   0          10h

NVM ボリュームを使用した MySQL データベースの作成

  1. PMEM-LVM ボリュームを作成します。

    1. 次のコマンドを実行して、Alibaba Cloud CSI を使用して PMEM-LVM ボリュームを作成します。

      kubectl apply -f csi-pmem-lvm.yaml

      csi-pmem-lvm.yaml テンプレートの例は次のとおりです。

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: pmem-mysql
      spec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 100Gi
        storageClassName: csi-pmem-lvm
    2. 次のコマンドを実行して、作成された PMEM-LVM ボリュームを表示します。

      kubectl get pvc pmem-mysql

      期待される出力:

      NAME         STATUS   VOLUME       CAPACITY   ACCESS MODES   STORAGECLASS          AGE
      pmem-mysql   Bound    d-****        100Gi      RWO            csi-pmem-lvm          10h
  2. マウントされた PMEM ボリューム上に MySQL データベースを作成します。

    1. 次のコマンドを実行して、マウントされた PMEM ボリューム上に MySQL データベースを作成します。

      kubectl apply -f mysql-normal-pmem.yaml

      mysql-normal-pmem.yaml テンプレートの例は次のとおりです。

      apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
      kind: Deployment
      metadata:
        name: mysql-normal
        labels:
          app: wordpress
      spec:
        selector:
          matchLabels:
            app: wordpress
            tier: mysql
        strategy:
          type: Recreate
        template:
          metadata:
            labels:
              app: wordpress
              tier: mysql
          spec:
            hostNetwork: true
            nodeName: <NODE name of worker node>
            containers:
            - image: mysql:5.6
              name: mysql
              env:
              - name: MYSQL_ROOT_PASSWORD
                valueFrom:
                  secretKeyRef:
                    name: mysql-pass
                    key: password
              ports:
              - containerPort: 3306
                name: mysql
              volumeMounts:
              - name: mysql
                mountPath: /var/lib/mysql
            volumes:
              - name: mysql
                persistentVolumeClaim:
                  claimName: pmem-mysql
      ---
      apiVersion: v1
      kind: Secret
      metadata:
        name: mysql-pass
      type: Opaque
      data:
        username: YWRt****
        password: YWRt****
    2. 次のコマンドを実行して、作成された MySQL データベースインスタンスを表示します。

      kubectl get pod | grep mysql-normal

      期待される出力:

      NAME                    READY    STATUS   RESTARTS    AGE
      mysql-normal-****        1/1     Running   0          10h

データベース書き込み性能テスト

Pod 内で次のコマンドを実行して、データベースパフォーマンスの負荷テストを行います。

sysbench /root/sysbench/point_select.lua run --db-driver=mysql --report-interval=1
--mysql-table-engine=innodb --oltp-table-size=10000 --oltp-tables-count=32 --oltp-test-mode=complex 
--time=100 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=admin 
--mysql-db=sbtest --oltp-read-only=on --oltp-simple-ranges=0 --oltp-sum-ranges=0 
--oltp-order-ranges=0 --oltp-distinct-ranges=0  --oltp-dist-type=uniform --warmup-time=300 
--max-time=30 --max-requests=0 --percentile=99 --num-threads=150

テスト結果

ボリュームタイプ

挿入スループット (挿入/秒)

SSD

49812

PMEM-LVM

122156

不揮発性メモリを使用するデータベースの書き込み性能は、SSD を使用する場合の約 2.5 倍です。