AWS-gp3-speed-test

볼륨 두개를 만들었다

mount /dev/nvme1n1p1 /mnt/gp3
mount /dev/nvme2n1p1 /mnt/gp2
yum install gcc zlib-devel
wget https://codeload.github.com/axboe/fio/tar.gz/fio-3.24
tar zfxv fio-3.24
cd fio-fio-3.24/
./configure --prefix=/home/fio
make; make install

필요한 라이브러리 gcc, zlib-devel 설치후 컴파일.

fio 는 나도 처음써보는 툴이다

fio --directory=/mnt/gp3 --name fio_test_file --direct=1 --rw=randread \
--bs=4K --size=1G --numjobs=7 --time_based --runtime=180 --group_reporting \
--norandommap

3분동안 하나의 스레드가 7개의 1G 파일을 4K 단위로 Direct I/O 모드의 Random Read 로 읽는 테스트이다.

Jobs: 7 (f=7): [r(7)][100.0%][r=11.7MiB/s][r=3001 IOPS][eta 00m:00s]
fio_test_file: (groupid=0, jobs=7): err= 0: pid=2450: Wed Dec  2 06:59:19 2020
  read: IOPS=3016, BW=11.8MiB/s (12.4MB/s)(2121MiB/180004msec)
    clat (usec): min=188, max=296635, avg=2319.05, stdev=1213.65
     lat (usec): min=188, max=296635, avg=2319.21, stdev=1213.65
    clat percentiles (usec):
     |  1.00th=[  408],  5.00th=[  922], 10.00th=[ 1287], 20.00th=[ 1598],
     | 30.00th=[ 1762], 40.00th=[ 1926], 50.00th=[ 2057], 60.00th=[ 2212],
     | 70.00th=[ 2474], 80.00th=[ 2933], 90.00th=[ 3818], 95.00th=[ 4621],
     | 99.00th=[ 6194], 99.50th=[ 6587], 99.90th=[ 7767], 99.95th=[ 8455],
     | 99.99th=[10028]
   bw (  KiB/s): min= 9848, max=32328, per=100.00%, avg=12069.08, stdev=167.76, samples=2513
   iops        : min= 2462, max= 8082, avg=3017.27, stdev=41.94, samples=2513
  lat (usec)   : 250=0.05%, 500=2.12%, 750=1.59%, 1000=1.99%
  lat (msec)   : 2=40.61%, 4=45.04%, 10=8.59%, 20=0.01%, 50=0.01%
  lat (msec)   : 250=0.01%, 500=0.01%
  cpu          : usr=0.12%, sys=0.29%, ctx=543082, majf=0, minf=93
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=542985,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
   READ: bw=11.8MiB/s (12.4MB/s), 11.8MiB/s-11.8MiB/s (12.4MB/s-12.4MB/s), io=2121MiB (2224MB), run=180004-180004msec

Disk stats (read/write):
  nvme1n1: ios=542478/13, merge=0/3, ticks=1253070/0, in_queue=1078350, util=99.97%

정확히 3000iops 가 나온다.

그럼 로컬 디바이스 테스트 해볼까?

fio --directory=/mnt/gp2 --name fio_test_file --direct=1 --rw=randread \
--bs=4K --size=1G --numjobs=7 --time_based --runtime=180 --group_reporting \
--norandommap
fio-3.24
Starting 7 processes
Jobs: 7 (f=7): [r(7)][100.0%][r=11.7MiB/s][r=2997 IOPS][eta 00m:00s]
fio_test_file: (groupid=0, jobs=7): err= 0: pid=1316: Wed Dec  2 07:13:16 2020
  read: IOPS=3016, BW=11.8MiB/s (12.4MB/s)(2121MiB/180004msec)
    clat (usec): min=192, max=298525, avg=2318.95, stdev=1162.93
     lat (usec): min=192, max=298525, avg=2319.12, stdev=1162.93
    clat percentiles (usec):
     |  1.00th=[  457],  5.00th=[  963], 10.00th=[ 1254], 20.00th=[ 1565],
     | 30.00th=[ 1729], 40.00th=[ 1909], 50.00th=[ 2057], 60.00th=[ 2245],
     | 70.00th=[ 2540], 80.00th=[ 3032], 90.00th=[ 3818], 95.00th=[ 4490],
     | 99.00th=[ 5932], 99.50th=[ 6259], 99.90th=[ 6915], 99.95th=[ 7373],
     | 99.99th=[ 8455]
   bw (  KiB/s): min= 9808, max=26696, per=100.00%, avg=12069.37, stdev=141.33, samples=2513
   iops        : min= 2452, max= 6674, avg=3017.34, stdev=35.33, samples=2513
  lat (usec)   : 250=0.01%, 500=1.48%, 750=1.61%, 1000=2.48%
  lat (msec)   : 2=41.05%, 4=44.98%, 10=8.40%, 20=0.01%, 250=0.01%
  lat (msec)   : 500=0.01%
  cpu          : usr=0.12%, sys=0.30%, ctx=543092, majf=0, minf=90
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=543002,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
   READ: bw=11.8MiB/s (12.4MB/s), 11.8MiB/s-11.8MiB/s (12.4MB/s-12.4MB/s), io=2121MiB (2224MB), run=180004-180004msec

Disk stats (read/write):
  nvme2n1: ios=542683/0, merge=0/0, ticks=1253810/0, in_queue=1076380, util=99.74%

엥 결과가 같다..왜지? 3000iops 로 고정된다 gp2인데..

gp3를 분리하고 테스트한다.

Jobs: 7 (f=7): [r(7)][75.6%][r=11.7MiB/s][r=3001 IOPS][eta 00m:44s]

그럼 gp3연결하고 iops 를 올리고 다시 gp3 에 테스트한다.

fio-3.24
Starting 7 processes
Jobs: 7 (f=7): [r(7)][100.0%][r=23.4MiB/s][r=6002 IOPS][eta 00m:00s]
fio_test_file: (groupid=0, jobs=7): err= 0: pid=1393: Wed Dec  2 07:29:50 2020
  read: IOPS=6033, BW=23.6MiB/s (24.7MB/s)(4242MiB/180002msec)
    clat (usec): min=146, max=327858, avg=1158.79, stdev=1152.61
     lat (usec): min=146, max=327858, avg=1158.95, stdev=1152.62
    clat percentiles (usec):
     |  1.00th=[  281],  5.00th=[  371], 10.00th=[  441], 20.00th=[  586],
     | 30.00th=[  685], 40.00th=[  766], 50.00th=[  848], 60.00th=[  947],
     | 70.00th=[ 1090], 80.00th=[ 1434], 90.00th=[ 2343], 95.00th=[ 3294],
     | 99.00th=[ 5014], 99.50th=[ 5342], 99.90th=[ 6456], 99.95th=[ 8455],
     | 99.99th=[26608]
   bw (  KiB/s): min=16360, max=37232, per=100.00%, avg=24140.01, stdev=241.45, samples=2513
   iops        : min= 4090, max= 9308, avg=6035.00, stdev=60.36, samples=2513
  lat (usec)   : 250=0.64%, 500=13.39%, 750=23.96%, 1000=26.32%
  lat (msec)   : 2=23.16%, 4=9.85%, 10=2.63%, 20=0.01%, 50=0.04%
  lat (msec)   : 100=0.01%, 250=0.01%, 500=0.01%
  cpu          : usr=0.24%, sys=0.53%, ctx=1086208, majf=0, minf=87
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=1085994,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
   READ: bw=23.6MiB/s (24.7MB/s), 23.6MiB/s-23.6MiB/s (24.7MB/s-24.7MB/s), io=4242MiB (4448MB), run=180002-180002msec

Disk stats (read/write):
  nvme2n1: ios=1085375/0, merge=0/0, ticks=1249280/0, in_queue=1077940, util=100.00%

gp3의 iops 가 올라간건 확인이 된다.

정리하자면 gp2의 성능테스트시에 iops 가 3000으로 고정된다. 아마 대역폭기반 계산이라 정확하게 3000으로 측정되어 실제 디스크의 iops 가 아닌거 같다.

대역폭을 측정할수 있는 툴인가........툴을까봐야하는데 귀찮다..그건 나중에...-_-;

AWS-apple-MAC-instance

오오오오오오!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

macOS Catalina 10.15.7 버전을 쓸수있다.

뜨든... 인스턴스 유형은 베어 메탈뿐.. 그렇다고 해서 내가 안만들순없지 가즈아!!!!!

-_-;

전용 호스트가 필요하다....근데 전용 호스트 갯수는 not support 상태다 service quotas를 늘려야한다.

일단 바로 요청 근데 금방 안되나? 아마 지금 전세계에서 생성 중일거다..증가가 되면 바로 더 진행해 보겠다.

Maximum number of running dedicated mac1 hosts.

보류에서 할당량이 요청됨으로 변경됬다.

그리고 오늘 (12월2일) 요청은 허락되지 않고 기본 제공량이 3으로 변경됬다.

일단 전용호스트를 만들고, 인스턴스를 생성했다.

한방에 인스턴스가 전용호스트를 다 차지한다.

ssh -i linuxer.pem ec2-user@IP

ssh는 동일하게 ec2-user 계정으로 접근한다.

SSM을 이용한접근도 가능하다.

먼저 vnc 로 접근하는게 목적이므로brew로 vnc server 를 셋팅해야한다.

sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -configure -allowAccessFor -allUsers -privs -all
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -configure -clientopts -setvnclegacy -vnclegacy yes 
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -configure -clientopts -setvncpw -vncpw supersecret
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -restart -agent -console
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate

https://gist.github.com/nateware/3915757

귀찮아서 이페이지 복붙했다. 위 명령어를 치면 vnc 가활성화 된다.

sudo dscl . -passwd /Users/ec2-user

명령어로 ec2-user의 패스워드를 설정한다.

그리고 VNC viewer 로 접속한다.

길고긴 여정을 지나 드디어.. 접속했다.

북미라 너무 느리다..-_-; VNC로 접속하기를 마무리한다.

AWS-Linux-EBS-to-EFS

아키텍쳐를 수정중에 EBS에서 EFS로 파일을 넘길일이 생겼다.

300G 가량의 대량의 파일이 있는 디렉토리를 sync 해야했다.

EBS는 GP2로 400G, 1200IOPS를 가진 볼륨이었다. 스냅샷에서 볼륨을 생성해서 4T로 확장하여 12000IOPS를 가진 볼륨에서 테스트를 진행하였다.

새벽에 먼저 싱크를 진행한 내용이 있는데 network out 이 40mb를 넘지 않았다.

싱크는

rsync -av /src /dst

로 진행한것 같았다. rsync 의 속도를 끌어 올리기 위해 테스트했으나 실패. 속도는 40mb 에서 더 이상 올라가지 않았다.

그래서 강구한 방법이 tar 를 이용한 데이터 이동이었다.

tar -C <src> -cf - . | tar -C <dst> -xf -

속도는 170mb 정도 그러나, 치명적인 단점이 존재했다. 소유권과 퍼미션을 가져오지 않는것이었다.

-_-; 파일이동이라 함은..소유권과 퍼미션을 그대로 가져가야하는데...그게 안됬다. 그래서 임시 방편으로

tar -cvf /dst/file.tar /src

명령어로 EBS의 데이터를 tar 로 압축해서 EFS로 저장하는 명령어로 작업했다.

이때 속도는 170MB 정도.. tar로 압축하지 않고 pipeline 으로 보냈을때와 동일한 방식이지만 소유권과 퍼미션을 유지할수 있는 방법이다.

그렇지만 속도가 마음에 들지 않았다.

물망에 rclone / rdiff-backup 가 있었다.

rclone 은 씅광님이 추천해줘서 오후내내 테스트를 했다. 그런데 속도가 너무 잘나오는데 문제는 퍼미션과 소유권을 가져올수 없는것이다.

그래서 승광님께서 주신 힌트로 테스트를 진행했다.

clone sync /src /dst --checkers 128 --transfers 128

속도는 놀라웠다. T3a.medium type의 네트워크 성능(Gbps) 이라 표기된 5G를 모두쓰는것이었다.

이렇게 network 를 모두 사용하는것은 처음이라 신기할정도로 rclone는 빨랐다.

300G 모두 sync하는데 1시간 30분밖에 걸리지 않았으니까..

그런데 여기서 rclone은 문제가 발생한다.

https://rclone.org/local/#filenames

Filenames

Filenames should be encoded in UTF-8 on disk. This is the normal case for Windows and OS X.

There is a bit more uncertainty in the Linux world, but new distributions will have UTF-8 encoded files names. If you are using an old Linux filesystem with non UTF-8 file names (eg latin1) then you can use the convmv tool to convert the filesystem to UTF-8. This tool is available in most distributions' package managers.

If an invalid (non-UTF8) filename is read, the invalid characters will be replaced with a quoted representation of the invalid bytes. The name gro\xdf will be transferred as gro‛DFrclone will emit a debug message in this case (use -v to see), eg

인코딩 문제인데 이건...하...나중에 rsync 로 남은파일을 채워볼까 생각했지만 불확실성이 너무 컷다. 파일의 누락이 너무많았다

그래도 테스트는 그냥 진행했고 싱크속도 무지빠르고 쓸만했다.

그래서 이후에 소유권과 퍼미션을 넣어주는 작업을 궁리했다.

getfacl -R /src > file.list
sed 's/src/dst/g' file.list
cd /dst
setfacl --restore=file.list

4줄의 명령어로 소유권과 퍼미션을 그대로 가져오는 방법을 찾았다.

이제 인코딩 문제만 해결하면된다 생각했지만, 안정성의 문제때문에

tar로 압축해서 넘기를 방식으로 계속진행하기로 생각했다.

오늘 적당한 낚시와 어드바이스를 주신 승광님께 감사드린다!