hello

synology iscsi의 disk 성능 측정

10G NIC로 연결된 환경에서 sysnology ds923+에서 iscsi를 만들고

이를 연결한 후 sysbench를 수행해봄

리눅스에 먼저 다음을 설치

sudo apt install open-iscsi multipath-tools lsscsi

이후 discover를 하여 target을 찾은 후 TARGET_IQN을 정의

PORTAL_IP=%synology-ip%

sudo iscsiadm -m discovery -t sendtargets -p $PORTAL_IP

TARGET_IQN=%직전 명령어에서 발견한 iqn값%

CHAP 이 없다는 가정하에 DISK와 PART 정의

sudo iscsiadm -m node -T "$TARGET_IQN" -p ${PORTAL_IP}:3260 --login

lsblk -o NAME,SIZE,TYPE,SERIAL

# 등록된 디스크가 sda 였음.

DISK=/dev/sda

sudo parted -s $DISK mklabel gpt
sudo parted -s -a optimal $DISK mkpart primary 0% 100%
PART=${DISK}1

파티션 초기화 및 mount

sudo mkfs.ext4 -F $PART
sudo mount $PART /mnt/iscsi

이제 성능 측정 시작

# 테스트 파일 생성
sysbench fileio --file-total-size=10G prepare
# 아래와 같은 성능이 나옴
# 10737418240 bytes written in 16.58 seconds (617.56 MiB/sec).

# 순차 읽기/쓰기 테스트 수행 -> 결과로 읽기: 13320.09MiB/s, 쓰기: 334.05Mib/s
sysbench fileio --file-total-size=10G --file-test-mode=seqrd --time=60 --max-requests=0 --threads=$(nproc) run
sysbench fileio --file-total-size=10G --file-test-mode=seqwr --time=60 --max-requests=0 --threads=$(nproc) run

# 랜덤 읽기/쓰기 테스트 수행 -> 결과로 읽기:  12917.62MiB/s, 쓰기: 259.02Mib/s 
sysbench fileio --file-total-size=10G --file-test-mode=rndrd --time=60 --max-requests=0 --threads=$(nproc) run
sysbench fileio --file-total-size=10G --file-test-mode=rndwr --time=60 --max-requests=0 --threads=$(nproc) run


nvme가 있는 p41과 성능 비교

# 테스트 파일 생성
sysbench fileio --file-total-size=10G prepare
# 아래와 같은 성능이 나옴
10737418240 bytes written in 6.65 seconds (1539.94 MiB/sec).


# 순차 읽기/쓰기 테스트 수행 -> 결과로 읽기: 13301.94MiB/s, 쓰기: 198.11Mib/s
sysbench fileio --file-total-size=10G --file-test-mode=seqrd --time=60 --max-requests=0 --threads=$(nproc) run
sysbench fileio --file-total-size=10G --file-test-mode=seqwr --time=60 --max-requests=0 --threads=$(nproc) run

# 랜덤 읽기/쓰기 테스트 수행 -> 결과로 읽기:  12972.65MiB/s, 쓰기: 85Mib/s 
sysbench fileio --file-total-size=10G --file-test-mode=rndrd --time=60 --max-requests=0 --threads=$(nproc) run
sysbench fileio --file-total-size=10G --file-test-mode=rndwr --time=60 --max-requests=0 --threads=$(nproc) run

p41의 속도가 이상함. sysbench가 아닌 fio로 재시도

# 순차 읽기
fio --name=seqread \
    --filename=/$PWD/testfile \
    --size=10G \
    --rw=read \
    --bs=1M \
    --iodepth=32 \
    --numjobs=4 \
    --direct=1 \
    --runtime=60 \
    --time_based \
    --group_reporting

Run status group 0 (all jobs):
   READ: bw=6730MiB/s (7057MB/s), 6730MiB/s-6730MiB/s (7057MB/s-7057MB/s), io=394GiB (423GB), run=60001-60001msec

# 순차 쓰기
fio --name=seqwrite \
    --filename=/$PWD/testfile \
    --size=10G \
    --rw=write \
    --bs=1M \
    --iodepth=32 \
    --numjobs=4 \
    --direct=1 \
    --runtime=60 \
    --time_based \
    --group_reporting

Run status group 0 (all jobs):
  WRITE: bw=2003MiB/s (2100MB/s), 2003MiB/s-2003MiB/s (2100MB/s-2100MB/s), io=117GiB (126GB), run=60003-60003msec


# 랜덤 읽기
fio --name=rndread \
    --filename=/$PWD/testfile \
    --size=10G \
    --rw=randread \
    --bs=4k \
    --iodepth=256 \
    --numjobs=8 \
    --direct=1 \
    --ioengine=io_uring \
    --runtime=60 \
    --time_based \
    --group_reporting


Run status group 0 (all jobs): READ: bw=5938MiB/s (6227MB/s), 5938MiB/s-5938MiB/s (6227MB/s-6227MB/s), io=348GiB (374GB), run=60002-60002msec

# 랜덤 쓰기
fio --name=rndwrite \
    --filename=/$PWD/testfile \
    --size=10G \
    --rw=randwrite \
    --bs=4k \
    --iodepth=64 \
    --numjobs=4 \
    --direct=1 \
    --runtime=60 \
    --time_based \
    --group_reporting

Run status group 0 (all jobs):
  WRITE: bw=1315MiB/s (1379MB/s), 1315MiB/s-1315MiB/s (1379MB/s-1379MB/s), io=77.1GiB (82.7GB), run=60001-60001msec

다시 같은 방법으로 iscsi 테스트

# 순차 읽기
fio --name=seqread \
    --filename=/$PWD/testfile \
    --size=10G \
    --rw=read \
    --bs=1M \
    --iodepth=32 \
    --numjobs=4 \
    --direct=1 \
    --runtime=60 \
    --time_based \
    --group_reporting

Run status group 0 (all jobs):
   READ: bw=991MiB/s (1040MB/s), 991MiB/s-991MiB/s (1040MB/s-1040MB/s), io=58.1GiB (62.4GB), run=60004-60004msec

   
# 순차 쓰기
fio --name=seqwrite \
    --filename=/$PWD/testfile \
    --size=10G \
    --rw=write \
    --bs=1M \
    --iodepth=32 \
    --numjobs=4 \
    --direct=1 \
    --runtime=60 \
    --time_based \
    --group_reporting

Run status group 0 (all jobs):
  WRITE: bw=937MiB/s (983MB/s), 937MiB/s-937MiB/s (983MB/s-983MB/s), io=54.9GiB (59.0GB), run=60004-60004msec

# 랜덤 읽기
fio --name=rndread \
    --filename=/$PWD/testfile \
    --size=10G \
    --rw=randread \
    --bs=4k \
    --iodepth=256 \
    --numjobs=8 \
    --direct=1 \
    --ioengine=io_uring \
    --runtime=60 \
    --time_based \
    --group_reporting


Run status group 0 (all jobs):
   READ: bw=491MiB/s (515MB/s), 491MiB/s-491MiB/s (515MB/s-515MB/s), io=28.8GiB (30.9GB), run=60003-60003msec
   
# 랜덤 쓰기
fio --name=rndwrite \
    --filename=/$PWD/testfile \
    --size=10G \
    --rw=randwrite \
    --bs=4k \
    --iodepth=64 \
    --numjobs=4 \
    --direct=1 \
    --runtime=60 \
    --time_based \
    --group_reporting

Run status group 0 (all jobs):
  WRITE: bw=72.0MiB/s (75.5MB/s), 72.0MiB/s-72.0MiB/s (75.5MB/s-75.5MB/s), io=4318MiB (4528MB), run=60001-60001msec

Read more

TCP 공부하기

TCP(전송 제어 프로토콜) 개요 TCP는 불안정한 네트워크 환경에서도 신뢰성 있고 순서가 보장된 데이터 전송을 가능하게 하는 핵심 인터넷 프로토콜이다. IP가 호스트 간 패킷 전달만을 담당한다면, TCP는 포트 기반 프로세스 간 통신, 오류 복구, 재전송, 순서 제어를 제공한다. 흐름 제어와 혼잡 제어를 통해 TCP는 수신 버퍼와 네트워크 대역폭의 고갈을 방지한다.

By JHL

우리가 알던 고전적 소프트웨어 엔지니어링은 죽었다

Product Engineering 시대와 AI 개발 패러다임 변화 1. 패러다임 변화: 코드 작성의 목적이 달라졌다 1972년 Dennis Ritchie가 C 언어를 발표한 이후, 소프트웨어 산업은 오랫동안 다음 요소에 집중해 왔다. * 코드 효율성 (시간·공간 복잡도) * 코드 길이 및 생산성 * 가독성과 유지보수성 그러나 AI 시대가 시작되면서 기존 패러다임이 근본적으로 변하고 있음. John Carmack은

By JHL

GitLab에서 제작한 GitOps 초보자 가이드

소개 소프트웨어 애플리케이션의 복잡도가 증가함에 따라 인프라에 대한 요구도도 함께 증가하고 있습니다. 인프라 팀은 다양한 서비스를 빠르고 안정적으로 제공해야 하지만, 인프라 구축은 여전히 수동 프로세스에 의존하는 경우가 많습니다. 이 문제를 해결하기 위한 핵심 접근 방식이 인프라 자동화이며, 그중 하나가 GitOps입니다. 1. 인프라 자동화의 필요성 * 애플리케이션 개발은 CI/CD로 자동화되었지만 인프라

By JHL