kazuito_itokazu Blog

日本オラクルでインフラ周りの製品を触っています

Oracle Cloud のベアメタル GPU マシンで HPCG を動かしてみる

はじめに

HPCG という HPC ベンチマークGPU で計測する必要があったのでセットアップから計測までをメモしておきたいと思います。

目的

HPCG を複数のGPUノードで実行・計測する

環境

Oracle Cloud の GPU ベアメタルマシンを3台利用します。
BM.GPU2.2 というインスタンスで、CPU が Xeon 8167M x2 でメモリが 192GB のベアメタルマシンに NVIDIA Tesla P100 が2個搭載されています。
詳細はこちら → https://cloud.oracle.com/compute/gpu/features

HPCG について

HPCG はソースとバイナリの両方が提供されています。
今回はバイナリを利用したいと思います。

http://www.hpcg-benchmark.org/software/index.htmlGPU 向けのバイナリがありますので、HPCG 3.1 Binary for NVIDIA GPUs Including Volta(2017-10-16) を利用します。

このバイナリは以下の環境でコンパイルされているので、これに近い環境をセットアップしていきます。
CUDA: ver 9.0.176
OpenMPI: 1.10.2

セットアップ

ここでは Oracle Cloud 側のセットアップ(ネットワーク、GPU インスタンスの作成)については省略します。
OS は CentOS を選ぶこともできますが、Oracle Linux 7.5 を利用します。また、CentOS でも同じ流れでセットアップできると思いますが、一部インストールするパッケージ名がことなるので注意が必要です。

GPU の確認

まずは GPU が認識されているかを確認しておきます。

lspci | grep -i nvidia

以下のように P100 が2つ搭載されていることが確認できます。

5e:00.0 3D controller: NVIDIA Corporation GP100GL [Tesla P100 SXM2 16GB] (rev a1)
86:00.0 3D controller: NVIDIA Corporation GP100GL [Tesla P100 SXM2 16GB] (rev a1)

Kernel devel と header をインストール

CUDA のインストールで DKMS を使ってドライバが Build されるようなので、これらをインストールしておきます。
※このへんは CentOS では違うので注意

sudo yum install -y kernel-uek-devel-`uname -r` kernel-headers

OpenMPI のインストール

複数ノードで実行するので OpenMPI をインストールします。

sudo yum install -y openmpi.x86_64 openmpi-devel.x86_64

CUDA のインストール

CUDA を rpm でインストールをしていきます。
ここでは HPCG がコンパイルされた環境に合わせるため、CUDA 9.0 を指定してインストールしていきます。

sudo yum install -y http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-9.0.176-1.x86_64.rpm
sudo yum install -y cuda-9-0.x86_64

以上が正常に完了したら一度 Reboot します。

sudo reboot

ここで /dev/nvidia0, /dev/nvidia1 などが認識されているか確認しますが、認識されていなかったので以下のスクリプトを実行して作成します。reboot しても有効になるように /etc/rc.local などに設定しておくとよいでしょう。

cat startup_nvidia.sh

#!/bin/bash

/sbin/modprobe nvidia

if [ "$?" -eq 0 ]; then
  # Count the number of NVIDIA controllers found.
  NVDEVS=`lspci | grep -i NVIDIA`
  N3D=`echo "$NVDEVS" | grep "3D controller" | wc -l`
  NVGA=`echo "$NVDEVS" | grep "VGA compatible controller" | wc -l`

  N=`expr $N3D + $NVGA - 1`
  for i in `seq 0 $N`; do
    mknod -m 666 /dev/nvidia$i c 195 $i
  done

  mknod -m 666 /dev/nvidiactl c 195 255

else
  exit 1
fi

/sbin/modprobe nvidia-uvm

if [ "$?" -eq 0 ]; then
  # Find out the major device number used by the nvidia-uvm driver
  D=`grep nvidia-uvm /proc/devices | awk '{print $1}'`

  mknod -m 666 /dev/nvidia-uvm c $D 0
else
  exit 1
fi

root で実行します。

sudo ./startup_nvidia.sh

これにより /dev 配下に以下のデバイスが作成されたことを確認します。

$ ls /dev/nvidia*
/dev/nvidia0  /dev/nvidia1  /dev/nvidiactl  /dev/nvidia-uvm  /dev/nvidia-uvm-tools

環境変数の設定

OpenMPI と CUDA の PATH と LD_LIBRARY_PATH を HPCG を実行するユーザの .bashrc と .bash_profile に追加します。

PATH=/usr/lib64/openmpi/bin:$PATH
LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:/usr/local/cuda-9.0/targets/x86_64-linux/lib

export PATH LD_LIBRARY_PATH

NFS Server の設定

複数ノードで HPCG を実行するにあたり、OpenMPI 経由で並列実行します。
OpenMPI から複数ノードで実行する際は、バイナリが同一ディレクトリにある必要があるので NFS を利用し実現します。

Oracle Cloud には NFS as a Service があるためこれを利用します。詳細は省きますが、Cloud の画面から簡単に NFS サービスをデプロイできます。
https://blogs.oracle.com/cloud-infrastructure/introducing-oracle-cloud-infrastructure-file-storage-service
上記で作成した share を /mnt/hpcg にマウントしました。
また、こちらも reboot しても大丈夫なように /etc/fstab に追加しておきます。

HPCG

以上で、HPCGを動かす環境が整いましたので、HPCG の実行をしてみます。

HPCG のダウンロードと展開

マウントした NFS Share 配下にダウンロードします。

cd /mnt/hpcg
wget http://www.hpcg-benchmark.org/downloads/hpcg-3.1_cuda9_ompi1.10.2_gcc485_sm_35_sm_50_sm_60_sm_70_ver_10_8_17.tgz

tar xvf hpcg-3.1_cuda9_ompi1.10.2_gcc485_sm_35_sm_50_sm_60_sm_70_ver_10_8_17.tgz

実行(シングルノード)

まずはシングルノードで実行してみます。
オプションには以下の2つを指定。
Infiniband ではなく Ethernet で実行するので --mca btl tcp,sm,self オプションをつけます。
また -np 2 で P100 x2個の両方で実行します。

cd hpcg-3.1_cuda9_ompi1.10.2_gcc485_sm_35_sm_50_sm_60_sm_70_ver_10_8_17
mpirun -np 2 --mca btl tcp,sm,self ./xhpcg-3.1_gcc_485_cuda90176_ompi_1_10_2_sm_35_sm_50_sm_60_sm_70_ver_10_8_17

nvidia-smi -l でGPUで処理しているプロセスが表示されることを確認します。

nvidia-smi -l

Tue Aug 14 15:38:10 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 396.44                 Driver Version: 396.44                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P100-SXM2...  Off  | 00000000:5E:00.0 Off |                    0 |
| N/A   41C    P0    41W / 300W |   8403MiB / 16280MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  Tesla P100-SXM2...  Off  | 00000000:86:00.0 Off |                    0 |
| N/A   41C    P0    43W / 300W |   8403MiB / 16280MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      6995      C   ...0_2_sm_35_sm_50_sm_60_sm_70_ver_10_8_17  8391MiB |
|    1      6996      C   ...0_2_sm_35_sm_50_sm_60_sm_70_ver_10_8_17  8391MiB |
+-----------------------------------------------------------------------------+

うまくいくと以下のように処理が進みます。

start of application (2 OMP threads)...
2018-08-13 15:34:06.375

Problem setup...
Setup time: 0.377932 sec

GPU: 'Tesla P100-SXM2-16GB'
Memory use: 8315 MB / 16280 MB
2x1x1 process grid
256x256x256 local domain

Reference SpMV+MG...

Reference CG...
Initial Residual: 7.303536e+03 Max_err: 1.000000e+00 tot_err: 5.792619e+03
REF  Iter = 1 Scaled Residual: 1.875554e-01 Max error: 1.000000e+00 tot_error: 9.748362e-01
REF  Iter = 2 Scaled Residual: 1.031535e-01 Max error: 1.000000e+00 tot_error: 9.515092e-01
REF  Iter = 3 Scaled Residual: 7.120013e-02 Max error: 1.000000e+00 tot_error: 9.286195e-01

~ 省略 ~

Number of CG sets:      20
Iterations per set:     52
scaled res mean:        1.701928e-03
scaled res variance:    0.000000e+00

Total Time: 6.146707e+01 sec
Setup        Overhead: 1.21%
Optimization Overhead: 0.54%
Convergence  Overhead: 3.85%

2x1x1 process grid
256x256x256 local domain
SpMV  =  xxx.x GF (xxxx.x GB/s Effective)   xx.x GF_per ( xxx.x GB/s Effective)
SymGS =  xxx.x GF (xxxx.x GB/s Effective)  xxx.x GF_per ( xxx.x GB/s Effective)
total =  xxx.x GF (xxxx.x GB/s Effective)  xxx.x GF_per ( xxx.x GB/s Effective)
final =  xxx.x GF (xxxx.x GB/s Effective)   xx.x GF_per ( xxx.x GB/s Effective)

end of application...
2018-08-13 15:39:17.102

最後の方に結果が出力されます。※ここでは諸事情により数値は xxx.x に変えています。

同一ディレクトリ内に readme に P100 x2 のベンチマーク結果が載っていて、これとほぼほぼ同じなのでうまく動いているようです。

2 x P100

2x1x1 process grid
256x256x256 local domain
SpMV  =  167.0 GF (1051.8 GB/s Effective)   83.5 GF_per ( 525.9 GB/s Effective)
SymGS =  231.4 GF (1786.3 GB/s Effective)  115.7 GF_per ( 893.1 GB/s Effective)
total =  212.9 GF (1614.7 GB/s Effective)  106.5 GF_per ( 807.3 GB/s Effective)
final =  201.2 GF (1525.7 GB/s Effective)  100.6 GF_per ( 762.9 GB/s Effective)

実行(マルチノード)

マルチノード実行の設定ポイントとしては以下がありました。

  1. 作成した NFS の Share をすべてのノードでマウントする
  2. すべてのノードに .bashrc に PATH, LD_LIBRARY_PATH を入れる
  3. 実行する Master から他のノードへは Non Password で SSH ログインできるようにする
  4. Firewalld のポートは不明だったので、一旦Stopさせる
  5. SELinux は有効な状態で動いた

ノードの作成

並列で動かすサーバを作成します。
今回は Cloud なので、シングルノードのイメージを複製します。こちらも詳細は省きます。
これによりポイントの 1, 2 については省略することができます。
シングルノードのイメージから2台、GPU ベアメタルマシンを作成し、合計3台になりました。
以降、元々のノードをマスターノード、複製した2台をスレーブノードと書いていきます。

ssh Non-Password Login 設定

マスターノードで ssh key を作成し、public key をスレーブノードの ~/.ssh/authorized_keys に追加します。

ssh-keygen  -N '' -t rsa -b 2048

firewalld の停止

OpenMPI が利用するポート調べるとある程度の範囲のポートを開ける必要がある、とのことでした。
今回は一時的な利用なので、ポートを開放するのではなく、firewalld を停止させることにしました。
全ノードで以下を実行します。

sudo systemctl stop firewalld 

マルチノードで HPCG を実行

まずは確認としてマスターとスレーブの2台で実行してみます。
シングルノードで動かしたときのコマンドに --host master,slave01 を追加して実行します。
これで指定したノードの GPU x1 で HPCG が走ります。

mpirun --mca btl tcp,sm,self -np 2 --host master,slave01 ./xhpcg-3.1_gcc_485_cuda90176_ompi_1_10_2_sm_35_sm_50_sm_60_sm_70_ver_10_8_17

nvidia-smi -l で指定したノードでプロセスが実行されていることを確認します。

続いて3台のすべての GPU を利用して動作させます。
host ファイルを作成し以下のように hostname slots=GPU数 を記述します。
ここで書くhostname は /etc/hosts または DNS で解決できる必要があります。

master slots=2
slave01 slots=2
slave02 slots=2

今度は -hostfile オプションで上記作成した host ファイルを指定します。
これで、3ノードにまたがって合計6GPU でHPCG を走らすことができます。

mpirun --mca btl tcp,sm,self -np 6 -hostfile host ./xhpcg-3.1_gcc_485_cuda90176_ompi_1_10_2_sm_35_sm_50_sm_60_sm_70_ver_10_8_17

最後に

GPU の利用や OpenMPI など初めてなことばかりでしたが、なんとか動かす事ができました。
主なポイントはおさえて書けていると思いますが、細かいところで抜けがあるかもしれません。
近々、NVIDIA Tesla V100 で同じことを行いますので、不備がありましたらそこで修正していきたいと思います。

NVMe を Oracle VM で柔軟に使う

PCI NVMe が4枚ささっている x86 Server を手に入れました。
これをチームで利用する Oracle VM for x86 の仮想化基盤に追加したい思います。
 
Oracle VM は以前オラクルが買収した ServerIron という Xen をベースにした製品をベースに改良が続けられています。
 
Oracle VM は最新 Ver が 3.4.4 で、少し前の 3.4.2 で NVMe デバイスの利用がサポートされました。
Oracle VM では VM の構成ファイルや VM に割り当てる Virtual Disk を Repository という概念で管理します。
今回は NVMe を Repository としては使わず、Physical Disk (Block Device)としてそのままVMに割当て使いたいと思います。
理由は、主に以下の2点です。
  • パフォーマンス
    • Repository とすると OCFS2 が使われ、その上に Virtual Disk が構築されるので、Physical Device と比較するとパフォーマンスは低下します
  • 別に Repository がある
    • すでに iSCSI ストレージで Repository を構成しているので、Repository が2つになると管理上ややこしいのが嫌です
    • Oracle VM の場合、VMの構成ファイルとVirtual Disk を別のRepositoryに配置することが可能です。オペミスで VM 構成ファイルは A-Repository で Virtual Disk が B-Repository にということをよくやってしまった。
 
NVMe x4 を Physical Disk で利用すると決まったのですが、4枚を単体で使うのは利用しづらいです。
できれば4枚を RAID で組んで、そこから必要な容量を切り出してVMに割り当てるのが理想です。
 
LVM であればそれが簡単にできます。
 
OracleVM 3.4.3 では Software RAID Devices がサポートされました。Software RAID で構築したデバイスOracle VM が認識できて、 Repository や Physical Device として利用できるというものです。
 
ただ、詳細を確認してみると Software RAID というのはどうやら mdadm を指すようです。
mdadm だと RAID は作れますが、そこから Volume を切り出すことはできません・・・。
 
やはり、LVM で試すしかないか、、、ということで、NVMe x4 に PV → VG を作成し、RAID5 の LV を切り出してみました。
残念ながら、Oracle VM はそれを認識してくれませんでした。。。
 
そこで、ダメ元で LV に対して mdadm で RAID0 を作成したところ、Oracle VM から認識できました!
mdadm on LVM なんてことをすることはあまりないと思いますが、とりあえずできました。
この方法はおそらくサポートされないと思われますので、もし同じようなことをしたい方は自己責任で!
 
参考までに手順を載せておきます。
 
# lsblk |grep nvme
nvme0n1     259:3    0  1.5T  0 disk                                                
nvme1n1     259:1    0  1.5T  0 disk                                                
nvme2n1     259:2    0  1.5T  0 disk                                                
nvme3n1     259:0    0  1.5T  0 disk     
 
# parted /dev/nvme0n1 mktable gpt mkpart primary 1M 100% set 1 lvm on
警告: いま存在している /dev/nvme0n1 のディスクラベルは破壊され、このディスクの全データが失われます。続行しますか?
parted: 不正なトークンです: mkpart
はい(Y)/Yes/いいえ(N)/No? y                                               
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。  
# parted /dev/nvme1n1 mktable gpt mkpart primary 1M 100% set 1 lvm on
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。  
# parted /dev/nvme2n1 mktable gpt mkpart primary 1M 100% set 1 lvm on
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。  
# parted /dev/nvme3n1 mktable gpt mkpart primary 1M 100% set 1 lvm on
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。  
 
  • デフォルトでは NVMe に LVM を構築できなかったので、LVM の設定を変更します。以下2行をコメントします
# vi /etc/lvm/lvm.conf
    #global_filter = [ "r|.*/|" ]
    #md_component_detection = 1
 
  • LVM を構築します
# pvcreate --dataalignment 4k /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1
  Physical volume "/dev/nvme0n1" successfully created
  Physical volume "/dev/nvme1n1" successfully created
  Physical volume "/dev/nvme2n1" successfully created
  Physical volume "/dev/nvme3n1" successfully created
# vgcreate VolNVMe /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1
  Volume group "VolNVMe" successfully created
 
  • RAID5 の LV を VG から切り出す
# lvcreate --type raid5 -i 3 -L 1400G -n vol01 VolNVMe
  Using default stripesize 64.00 KiB.
  Rounding size 1.37 TiB (358400 extents) up to stripe boundary size 1.37 TiB (358401 extents).
  Logical volume "vol01" created.
 
  • この LV にさらに mdadm で RAID0 Volume を作成する
# mdadm -C /dev/md01 -l 0 --force -n 1 /dev/VolNVMe/vol01
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md01 started.

 

  • これで認識してくれるはずである
Before(warning になっているのは NVMe に作成したパーティションの部分なので無視します)

f:id:kazuitoitokazu:20180123001944p:plain

  • Refresh を実行し、無事に認識されました!
After

f:id:kazuitoitokazu:20180123001907p:plain

  • これをVMに割り当てます

f:id:kazuitoitokazu:20180123001857p:plain

 

f:id:kazuitoitokazu:20180123001845p:plain

 
  • VM を起動させて確認したところ。xvdb として認識しています

f:id:kazuitoitokazu:20180123001830p:plain

 
  • mdadm の以下も忘れずに
# vi /etc/mdadm.conf
DEVICE /dev/VolNVMe/vol01 ← 追加する
 
# sudo mdadm --detail --scan >> /etc/mdadm.conf
 
以上、めでたしめでたし!
 

VirtualBox 5.2 Beta1: export Oracle Public Cloud

VirtualBox 5.2 Beta1 がリリースされました

注目した機能が "VM export to Oracle Public Cloud" です。
VirtualBoxVMOracle Public Cloud 形式で Export できる機能で、Beta1 ですがどういうものか確認してみたいと思います。
 
まず、この Oracle Public Cloud の IaaS ですが、VMware ESXi などで動いている VM を移行したい場合の手順についてざっくりとご説明すると、
  1. VM の OS が Linux なら Xen Driver をインストール、Windows なら Oracle VM PV Driver をインストール
  2. OVA 形式で VM を Export または、VMDK をデータストアから抽出
  3. VMDK を raw ファイル形式に変換
  4. 変換した raw ファイルを tar.gz にする(複数Diskを持つVMの場合、Disk 単位で tar.gz を作成)
  5. アップロード
となります。
 
想像するに、このVirtualBox 上の VM を 2, 3, 4 を実施してアップロードしやすくしてくれるものだと思われます。
 
それでは確認していきます。
 

VM の Export

VirtualBox5.2 Beta1 をインストールし、OracleLinux6.9 のVMを作成しインストールしました。

 
 
ファイル→仮想アプライアンスのエクスポートを選択します。

 
続いて、エクスポートする仮想マシンを選択します。

 
 
ここで例の Oracle Public Cloud Format 1.0 を選択します。
やはりファイル名が tar.gz になっています。

 
最後にエクスポートをクリックします。

 
 
これでファイルが生成されるので、完了まで待ちます。

 
この間のリソース使用率を見てみると、CPU はそんなに使っていません。

 
ディスクも 4.8MB/s 程度です。

 
詳しくは調べておりませんが、tar.gz 圧縮はシングルスレッドで動いているようです。
今回は 12GB の仮想ディスクに Oracle Linux 6.9 の Basic Server をインストールしただけなので、実使用量は2GB程度です。
なので、ディスク容量、実使用量が大きい場合、この処理にはかなり時間がかかることになります。
 
作成されたファイルがこちらです。

 

Oracle Public Cloud へアップロードとインスタンスの作成

続いてこれをOracle Public Cloud にアップロードしていきます。

 
先ほどの作成されたファイルを選択して Upload をクリックします。

 
 
 
アップロードが完了したら、Associate Image をクリックし、アップロードしたファイルに Name と Discription を記入します。

 
すると、以下のように登録されるので、これからインスタンスを作成していきます。
インスタンス作成の細かな設定については省略します。

 
イメージの右恥のバーガーアイコンをクリックし、Create Instance を選びます。

 
画面がインスタンス作成のウィザードになります。先ほどのイメージがリストされるので、選択します。

 
Shape(CPU, Memory) を選択します。

 
 
VM の名前を設定しますが、とりあえずデフォルトの値をそのまま使います。

 
 
VMのネットワーク周りの設定を行います。
Shared Network(インターネット側) のみに接続させます。
またSecurity Lists (インターネット側からの接続ルール)も設定します。

 
Storage の設定を行いますが、今回はデフォルトのままで進みます。

 
最後に、構成の確認をして Create をクリックします。

 
 
しばらくすると Instances タブに作成したインスタンスが表示されます。

 
インスタンスをクリックして、Screen Captures タブで画面出力のスクリーンショットを取得してインスタンスが起動しているか確認してみます。
ol69 login: と表示され、VirtualBox で作成した VM が無事 Oracle Public Cloud で動いたことが確認できました。

 

おまけ

 
Export した tar.gz の中身はこのようになってます。
$ tar tvf OL69.tar.gz
-rw-r----- vboxopc10/vbox_v5.2.VBOX_VERSION_PATCHr11 12884901888 2017-08-05 23:51 OL69-disk001.img
 
2つの仮想ディスクを持っているVM を Export すると tar.gz は仮想ディスクごとに作成されます。
-rwxrwxrwx 1 root root 443876265 Aug  6 22:33 OracleLinux69.tar.gz
-rwxrwxrwx 1 root root 641665357 Aug  6 22:35 OracleLinux69-disk002.tar.gz
 

まとめ

  • VirtualBox で作成した VMOracle Public Cloud のインスタンスとして無事に動かすことができました
  • このBeta1で追加された機能は想定通り、VM を tar.gz 形式で Export するという機能でした
  • Export ではなく、イメージの Upload もしてくれると良いですね。
  • 仮想ディスクのサイズ(実使用量)が大きい場合は、出力に時間がかかります。
  • その場合は、手数は必要ですが手動でイメージ変換と tarコマンド + pigz などを使ったほうが処理時間を短くできると思います。

Oracle ZFS Storage Appliance (ZFSSA) で Object Store を使う

はじめに

Oracle ZFS Storage Appliance は NFSiSCSI、FC などを利用できる Unified Storage です。 Firmware ver OS8.7 から新たに Object Storage としても利用できるようになりましたので、設定して使ってみたいと思います。

設定

オブジェクトストアにアクセスするユーザを作成する。 f:id:kazuitoitokazu:20170620122116p:plain

オブジェクトストアとして利用する Filesystem の HTTP のオブジェクトストアモードを”読み取り/書き込み" に設定する。 f:id:kazuitoitokazu:20170620122132p:plain

先ほど作成したユーザが書き込めるように設定する。 f:id:kazuitoitokazu:20170620122123p:plain

構成→サービス→HTTP にてサービスを有効にし、先ほど作成したオブジェクトストアのパスを指定する。 f:id:kazuitoitokazu:20170620122127p:plain

動作確認

curl で確認をしていきます。

まず Proxy が設定されている場合は外しておきましょう。

$ unset http_proxy
$ unset https_proxy

まず Token を取得します。この時、ユーザは一般ユーザで取得すること。root でもTokenは取得できるが、その後の操作はできないので一般ユーザで進めていきます。

$ curl -i -X GET -H 'X-Auth-User: demo01' -H 'X-Auth-Key: welcome1' http://cloud-zfs7320-vip.jp.osc.oracle.com/auth/v1.0
HTTP/1.1 200 OK
Date: Fri, 16 Jun 2017 06:37:26 GMT
Server: Apache
X-Storage-Url: http://cloud-zfs7320-vip.jp.osc.oracle.com:80/object/v1/export/object01
X-Storage-Token: ZFSSA_ba2629c6-5258-11e7-aed3-802128f06760
X-Auth-Token: ZFSSA_ba2629c6-5258-11e7-aed3-802128f06760
X-Trans-Id: tx9f6aab5dbe33495c8bba9-0059437ca6
Content-Length: 0
Content-Type: text/html; charset=utf-8

コンテナを作成

$ curl -v -H 'X-Auth-Token: ZFSSA_ba2629c6-5258-11e7-aed3-802128f06760' -i http://cloud-zfs7320-vip.jp.osc.oracle.com:80/object/v1/export/object01/kazuito01 -X PUT
* About to connect() to cloud-zfs7320-vip.jp.osc.oracle.com port 80 (#0)
* Trying 10.122.12.35... connected
* Connected to cloud-zfs7320-vip.jp.osc.oracle.com (10.122.12.35) port 80 (#0)
> PUT /object/v1/export/object01/kazuito01 HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: cloud-zfs7320-vip.jp.osc.oracle.com
> Accept: */*
> X-Auth-Token: ZFSSA_ba2629c6-5258-11e7-aed3-802128f06760
>
< HTTP/1.1 201 Created
HTTP/1.1 201 Created
< Date: Fri, 16 Jun 2017 08:13:26 GMT
Date: Fri, 16 Jun 2017 08:13:26 GMT
< Server: Apache
Server: Apache
< X-Timestamp: 1497600806.63
X-Timestamp: 1497600806.63
< X-Trans-Id: tx1aa8d891b97ee11aca1dd-0059439326
X-Trans-Id: tx1aa8d891b97ee11aca1dd-0059439326
< Content-Length: 0
Content-Length: 0
< Content-Type: application/json; charset=utf-8
Content-Type: application/json; charset=utf-8

<
* Connection #0 to host cloud-zfs7320-vip.jp.osc.oracle.com left intact
* Closing connection #0

ファイルをアップロード

$ curl -v -H 'X-Auth-Token: ZFSSA_ba2629c6-5258-11e7-aed3-802128f06760' http://cloud-zfs7320-vip.jp.osc.oracle.com:80/object/v1/export/object01/my_fio.sh -T my_fio.sh
* About to connect() to cloud-zfs7320-vip.jp.osc.oracle.com port 80 (#0)
* Trying 10.122.12.35... connected
* Connected to cloud-zfs7320-vip.jp.osc.oracle.com (10.122.12.35) port 80 (#0)
> PUT /object/v1/export/object01/my_fio.sh HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: cloud-zfs7320-vip.jp.osc.oracle.com
> Accept: */*
> X-Auth-Token: ZFSSA_ba2629c6-5258-11e7-aed3-802128f06760
> Content-Length: 482
> Expect: 100-continue
>
* Done waiting for 100-continue
< HTTP/1.1 201 Created
< Date: Fri, 16 Jun 2017 08:06:41 GMT
< Server: Apache
< X-Timestamp: 1497600401.57
< X-Trans-Id: tx16480743f13e60469a26d-0059439191
< Content-Length: 0
< Content-Type: application/json; charset=utf-8
<
* Connection #0 to host cloud-zfs7320-vip.jp.osc.oracle.com left intact
* Closing connection #0

リストを取得

$ curl -i http://cloud-zfs7320-vip.jp.osc.oracle.com:80/object/v1/export/object01/ -X GET -H "Content-Length: 0" -H 'X-Auth-Token: ZFSSA_ba2629c6-5258-11e7-aed3-802128f06760'
HTTP/1.1 200 OK
Date: Fri, 16 Jun 2017 06:45:09 GMT
Server: Apache
X-Timestamp: 1497595509.63
X-Account-Object-Count: 2
X-Account-Container-Count: 2
X-Account-Bytes-Used: 1048576020
X-Trans-Id: tx2f1212afb1a7e442f31cf-0059437e75
Transfer-Encoding: chunked
Content-Type: text/plain; charset=utf-8

container
test.img

ファイルのダウンロード

$ curl -v -H 'X-Auth-Token: ZFSSA_ba2629c6-5258-11e7-aed3-802128f06760' -i http://cloud-zfs7320-vip.jp.osc.oracle.com:80/object/v1/export/object01/kazuito01/my_fio.sh -X GET -O
* About to connect() to cloud-zfs7320-vip.jp.osc.oracle.com port 80 (#0)
* Trying 10.122.12.35... connected
* Connected to cloud-zfs7320-vip.jp.osc.oracle.com (10.122.12.35) port 80 (#0)
> GET /object/v1/export/object01/kazuito01/my_fio.sh HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: cloud-zfs7320-vip.jp.osc.oracle.com
> Accept: */*
> X-Auth-Token: ZFSSA_ba2629c6-5258-11e7-aed3-802128f06760
>
 % Total  % Received % Xferd Average Speed Time  Time  Time Current
                Dload Upload Total Spent  Left Speed
 0  0  0  0  0  0   0   0 --:--:-- --:--:-- --:--:--  0< HTTP/1.1 200 OK
< Date: Fri, 16 Jun 2017 08:28:33 GMT
< Server: Apache
< Content-Length: 482
< Accept-Ranges: bytes
< Last-Modified: 2017-06-16T08:26:09
< Etag: 6c70a22fdcd02f8f085ba5cb9fff5be3
< X-Timestamp: 1497601713.85
< X-Trans-Id: txdad3ff790cee6ecd9beac-00594396b1
<
{ [data not shown]
120 482 120 482  0  0 3526   0 --:--:-- --:--:-- --:--:-- 117k* Connection #0 to host cloud-zfs7320-vip.jp.osc.oracle.com left intact

* Closing connection #0

ファイルの削除

$ curl -v -H 'X-Auth-Token: ZFSSA_ba2629c6-5258-11e7-aed3-802128f06760' -i http://cloud-zfs7320-vip.jp.osc.oracle.com:80/object/v1/export/object01/kazuito01/test.tar -X DELETE
* About to connect() to cloud-zfs7320-vip.jp.osc.oracle.com port 80 (#0)
* Trying 10.122.12.35... connected
* Connected to cloud-zfs7320-vip.jp.osc.oracle.com (10.122.12.35) port 80 (#0)
> DELETE /object/v1/export/object01/kazuito01/test.tar HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: cloud-zfs7320-vip.jp.osc.oracle.com
> Accept: */*
> X-Auth-Token: ZFSSA_ba2629c6-5258-11e7-aed3-802128f06760
>
< HTTP/1.1 204 No Content
HTTP/1.1 204 No Content
< Date: Fri, 16 Jun 2017 08:24:59 GMT
Date: Fri, 16 Jun 2017 08:24:59 GMT
< Server: Apache
Server: Apache
< X-Timestamp: 1497601499.44
X-Timestamp: 1497601499.44
< X-Trans-Id: tx5e5b0c36a1c66867d090f-00594395db
X-Trans-Id: tx5e5b0c36a1c66867d090f-00594395db
< Content-Length: 0
Content-Length: 0
< Content-Type: application/json; charset=utf-8
Content-Type: application/json; charset=utf-8

<
* Connection #0 to host cloud-zfs7320-vip.jp.osc.oracle.com left intact
* Closing connection #0

その他

CloudBerry でもアクセスしてみました。 登録は以下のように指定してください。 f:id:kazuitoitokazu:20170620122112p:plain

このように見えてきます。 f:id:kazuitoitokazu:20170620122109p:plain

まとめ

このように ZFSSA を Object Storage として簡単に利用することができるようになりました。

また、認証を Openstack の Keystone と連携させることも可能です。詳細はこちらをご確認ください。