All Products
Search
Document Center

:Tingkatkan kinerja baca dan tulis dengan memori non-volatile

Last Updated:Mar 27, 2026

Di ACK, Anda dapat menggunakan memori non-volatile sebagai penyimpanan blok atau sistem file tanpa mengubah aplikasi. Pendekatan ini menyederhanakan penggunaan volume NVM dan meningkatkan kinerja baca-tulis hingga 2–10 kali lipat dibandingkan SSD. Topik ini menjelaskan cara menggunakan volume NVM untuk penyimpanan temporary berlatensi rendah dan beban kerja intensif data.

Kasus Penggunaan 1: Baca dan tulis temporary berlatensi rendah

Kasus penggunaan ini mencakup skenario berikut:

  • Penyimpanan temporary untuk continuous integration (CI).

  • Traversal dan pencarian file kecil.

  • Pencatatan log berkapasitas tinggi.

  • Baca dan tulis file temporary dalam skenario serverless.

Benchmark kinerja baca dan tulis FIO

Bagian ini membandingkan kinerja dua jenis volume, PMEM-LVM dan SSD, dengan membuat aplikasi terpisah untuk masing-masing.

  1. Terapkan file YAML untuk mendeklarasikan PVC PMEM-LVM dan PVC SSD.

    YAML untuk PVC PMEM-LVM

    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
    	

    YAML untuk PVC SSD

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ssd-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 100Gi
      storageClassName: alicloud-disk-topology
    	
  2. Terapkan file YAML untuk memasang volume dan menjalankan uji fio.

    Pasang volume PMEM-LVM dan jalankan uji 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
    	

    Pasang volume SSD dan jalankan uji 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
    • Gunakan kubectl exec untuk masuk ke kontainer uji dan jalankan uji fio guna mengukur kinerja tulis volume 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

      Output yang diharapkan:

      write: IOPS=92.0k, BW=363MiB/s (381MB/s)(8812MiB/24262msec)
      lat (nsec): min=2054, max=95278, avg=10544.00, stdev=1697.17
    • Gunakan kubectl exec untuk masuk ke kontainer uji dan jalankan uji fio guna mengukur kinerja tulis volume 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

      Output yang diharapkan:

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

    Analisis hasil

    Jenis volume

    IOPS

    Throughput

    PMEM-LVM

    92.000

    381 MB/s

    SSD

    37.000

    153 MB/s

    Hasil menunjukkan bahwa volume PMEM-LVM yang menggunakan memori non-volatile memberikan kinerja 2 hingga 3 kali lipat dibandingkan disk cloud SSD.

Kasus Penggunaan 2: Beban kerja intensif data

Bagian ini mengukur kinerja tulis database MySQL, membandingkan penerapan pada disk cloud SSD dengan penerapan pada volume NVM.

Terapkan MySQL pada disk cloud SSD

  1. Buat volume disk cloud SSD.

    1. Jalankan perintah berikut untuk membuat volume disk cloud SSD dengan Alibaba Cloud CSI.

      kubectl apply -f disk-mysql.yaml

      Berikut contoh templat disk-mysql.yaml:

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: disk-mysql
      spec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 100Gi
        storageClassName: alicloud-disk-topology
    2. Jalankan perintah berikut untuk melihat volume SSD yang telah dibuat.

      kubectl get pvc disk-mysql

      Output yang diharapkan:

      NAME         STATUS   VOLUME              CAPACITY   ACCESS MODES   STORAGECLASS               AGE
      disk-mysql   Bound    d-bp12pcfhp3n931s8****   100Gi      RWO            alicloud-disk-topology   8s
  2. Buat instans database MySQL yang menggunakan volume SSD.

    1. Jalankan perintah berikut untuk membuat instans database MySQL.

      kubectl apply -f mysql-normal-ssd.yaml

      Templat mysql-normal-ssd.yaml adalah sebagai berikut:

      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. Jalankan perintah berikut untuk memeriksa instans database MySQL yang telah dibuat.

      kubectl get pod | grep mysql-normal

      Output yang diharapkan:

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

Buat database MySQL dengan volume NVM

  1. Buat volume PMEM-LVM.

    1. Jalankan perintah berikut untuk membuat volume PMEM-LVM menggunakan Alibaba Cloud CSI.

      kubectl apply -f csi-pmem-lvm.yaml

      Berikut contoh templat csi-pmem-lvm.yaml:

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: pmem-mysql
      spec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 100Gi
        storageClassName: csi-pmem-lvm
    2. Jalankan perintah berikut untuk melihat volume PMEM-LVM yang telah dibuat.

      kubectl get pvc pmem-mysql

      Output yang diharapkan:

      NAME         STATUS   VOLUME       CAPACITY   ACCESS MODES   STORAGECLASS          AGE
      pmem-mysql   Bound    d-****        100Gi      RWO            csi-pmem-lvm          10h
  2. Buat database MySQL pada volume PMEM yang telah dipasang.

    1. Jalankan perintah berikut untuk membuat database MySQL pada volume PMEM yang telah dipasang.

      kubectl apply -f mysql-normal-pmem.yaml

      Berikut contoh templat 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. Jalankan perintah berikut untuk melihat instans database MySQL yang telah dibuat.

      kubectl get pod | grep mysql-normal

      Output yang diharapkan:

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

Uji kinerja tulis database

Jalankan perintah berikut di dalam pod untuk melakukan stress test kinerja database.

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

Hasil Uji

Jenis Volume

Throughput Sisipan (inserts/detik)

SSD

49812

PMEM-LVM

122156

Kinerja tulis database yang menggunakan memori non-volatile kira-kira 2,5 kali lipat dibandingkan yang menggunakan SSD.