영상 프로덕션을 위한 스토리지 네트워크 구축
조회 33673 추천 0
https://m.post.naver.com/viewer/postView.naver?volumeNo=31844991&memb… (972)
어제 쓴 글입니다.
일단 영상 프로덕션도 많은 카테고리가 있으니 내가 겪어본 내용 위주로 가정을 해보자.
몇년전 김기덕 감독(그 영화감독님이 아니라 포스트 프로덕션 감독님이다.)이 충무로에서 운영하던 곳을 방문해 봤다.
기억하기로..
전혀 알수없는 영상 편집용 스토리지 서버 여러대를 쓰고, 그 스토리지 서버의 원본 파일을 여러 팀이 각자 가져가서 자막이나 효과, 효과음 등을 입히는 후작업을 합쳐서 완성판을 만들어낸다.
당시 내가 제안했던 방식은 저 쓸데없이 비싸기만 한 영상전용 스토리지를 버리고, 일반 네트워크로 전환하는 것이었다.
스토리지 서버는 20~40Gbps 로 연동하고 각 사용자는 최소 10지로 연결하면 최소한 기존보다는 빠를거라는 판단이었고, 스토리지 소프트웨어는 그당시 나스서버를 제안했다.
그분들에게는 전부 생소한 내용이라 결국 안받아들여졌고 그렇게 시간이 지났다.
최근에 40G 스토리지 네트워크를 구성해본 경험을 바탕으로 구성에 대해 소개하고자 한다.
영상이나 사진을 취급하는 소형 프로덕션의 경우 사용자는 보통 10명 내외다.
그래서 계획상 각 사용자별 컴은 80Gbps 로 연결하고, 스토리지 서버는 160G로 연결하는걸 기본으로 생각했다.
적당한 스위치가 있다.
아리스타 네트웍스의 DCS-7050QX-32s 란 녀석인데 32포트 40G QSFP+ 포트와 4개의 10G SFP+ 포트 그리고 1개의 RJ45 방식 1Gbps 포트와 콘솔포트가 있다.
일단, 각 사용자의 컴에는 40지 듀얼을 지원하는 HP OME 멜라녹스 40G 듀얼포트 네트워크 카드를 사용한다.
HP 649281-B21
그리고 각 40지 두개를 하나로 합치는건 일반적인 LACP 방식을 사용했다.
그리고 위 스위치가 컴은 각각 16미터 길이의 AOC 케이블을 사용했다.
결국 컴퓨터당 2개씩 10명이니 20개가 필요하고, 모든 사용자가 접속해서 잡업하는 스토리지는 그만큼 빠른 디스크와 네트워크 연결이 필요하니 충분하게 듀얼포트 카드 2개씩 연결해서 총 160지를 구성했다.
자 그럼 반대로 생각해보자 160G 는 사실 총 대역폭이고, 실제로는 40지 4개를 합친거다. 즉 개인당 최대 대역폭은 40지를 넘지 않는다.
그런데 왜 컴퓨터마다 80지로 연결하는 걸까? 윈도우 10 덕분이다.
윈도우 10에서 지원하는 smb 3.0을 적용하면 각 컴퓨터에서 최대 80지(실제로는 73지 정도)의 속도로 통합 사용이 가능하다.
물론 스토리지 서버 측에서도 삼바서버를 사용하면 된다.
위 그림처럼 인터넷은 일반 라우터를 통해 사설아이피로 나눠쓰는 1Gbps 망이고,스토리지는 분리된 40지 스위치를 이용한 80Gbps 망이다. 스토리지 서버는 듀얼 네트워크 카드 2개를 사용해 160Gbps 로 연결된다.
예를들어 스토리지 서버에 하드디스크 60베이가 들어있다면 하나의 하드디스크 속도는 통상 100~150Mbyte/sec 정도의 속도가 나온다 60개를 Raid0 로 연결한다 하더라도 60 x 100~150MByte/sec 면 6000~9000MByte/sec 가 최대 속도고 대약 1Mbyte/sec= 8Mbps 에 해당하니 결국 48Gbps~72Gbps 정도의 속도를 기대할수 있다. 여기에 ssd 와 램을 이용한 읽기 캐시와 쓰기 저널링을 감안해도 160Gbps 대역폭이면 충분한 수준이다.
이 아리스타 스위치를 사용할때 몇가지 제약사항이 있다. 총 32개의 40지 포트중 1~24번 포트는 내부적으로 4개의 10G 로 구분되어 있다. 즉 4개의 10G 레인이 기본 구성이고, 이를 이용하여 아래와 같은 분기 케이블을 사용해 4개의 10G 케이블로 나눠서 구성할수 있다.
이 기능은 보통 48포트 정도가 최대인 1U 10G 스위치에 비해 내장 SFP+ 4포트를 포함해 24개의 QSFP+ 포트를 96개의 SFP+ 포트로 분기할수 있도록 해, 총 100포트 10G 스위치를 1U 공간으로 사용하면서 남은 8개의 40G 포트를 이용해 다양한 링크를 분산해 쓸수있게 해준다.
하지만, 외형상으로는 모두 동일한 QSFP+ 포트이지만 25~32번 포트는 온전히 40G 단일세션 전송이 가능하지만, 1~24번 QSFP+ 포트는 단일세션 전송시에는 10G로 동작하게 된다.
예를들면, 동일한 40G 스위치에 연결된 A컴퓨터와 B 컴퓨터간 에 파일을 전송한다고 가정한다면,
다중세션 어그리게이션 기능을 지닌 SMB 3.0 과 같은 프로토콜을 지원하지 않는다면,
A에서 B 로 파일은 전송할때 4개의 파일을 각각의 전송 세션으로 나누어 전송하는 경우에만 40G대역폭을 모두 쓸수있고, 그냥 하나의 파일만 전송하는 경우 10G 레인 하나만 사용하게 된다.
실제로 두대의 리눅스 컴에서 iPerf 로 테스트해본 결과,
세션을 한개로 전송하면 9.7Gbps,
두개면 19.3Gbps, 세개면 28.8Gbps, 네개일때 최대 37.6Gbps 까지 관측榮
그에비해 아래처럼 처음부터 40G 1레인으로 구성된 25~32번 포트를 통해 연결되면 전송속도는 한세션임에도 40G 를 모두 사용하게 되어 처음부터 37Gbps 정도의 네트워크 속도가 측정된다.
이 아리스타 DCS-7050QX-32s 의 인터페이스를 interface ethernet status 명령을 사용해 확인하면,
구성은 아래와 같다.
먼저 eth1~4 는 4개의 SFP+ 포트이다.
그리고 eth5/1~eth5/4 로 시작하는 QSFP+ 포트들은 각 10G ethernet 4개 레인이 / 로 분리되 표현되며 eth6/1~eth6/4, eth7/1~eth7/4,...................eth28/1~eth28/4 까지 총 24개의 10G 4레인 QSFP+ 포트로 구성되고, 이후 eth29~eth36까지 총 8개의 40G 레인 QSFP+ 포트들이 있다.
마지막으로 1개의 1Gbps management ethernet1 과 Serial Console 포트가 있다.
그런데 사실 아리스트와 같은 엔터프라이즈 급 스위치들은 특별한 명령을 통해 강제로 모든포트를 40G 1레인으로 지정할수 있다. 이 모델의 경우는 EOS 라는 리눅스 기반 운영체제가 내장되어 있는데 10G 4레인인 포트들인 x/1~x/4 포트중 첫번째 분기포트인 x/1 을 선택하고 각각 speed forced 40gfull 이라는 명령을 통해 첫번째 분기포트를 40G로 설정하여 모든 QSFP+포트들을 40G 1레인 포트로 사용할수 있다.
물론 이렇게 바뀐설정이 리부팅 후 날아가지 않도록 write 명령을 잊으면 안되겠지만...
이제 처음의 목적처럼 각 컴퓨터들을 80G 로 만들려면 일반적인 링크 어그리게이션을 사용하면 된다.
LACP 라고도 하며, 표준명을 사용해 802.3AD 라고도 한다. 두개의 포트를 하나의 가상 인터페이스로 만들어 주는 기술이다.
인터페이스 두개 를 하나가 죽으면 다른 하나가 대신하는 Active /Backup 으로 사용하거나 두개를 모두 사용해 전송 대역폭을 높이는 Active/Active 방식으로 사용가능하다.
아리스타 스위치의 경우 Port Channeling 이라고 불리는데. 예를들어 40지포트 1번과 2번을 하나의 포트채널로 만들려면 eth5/1 과 eth6/1 을 하나의 포트채널로 만들어주면 된다. 이경우 각 포트채널의 번호는 지정할수 있다. 예를들면 Channel Group 10 이런식으로..
<예제>
int ethernet 5/1,6/1
channel-group 10 mode active
exit
마찬가지로 위의 전체 구성도처럼 두개의 듀얼 40G 카드를 장착한 스토리지서버와의 포트 채널을 구성한다면, eth33~eth36 을 선택하고 포트채널을 구성해 주면 총 160G 의 대역폭을 사용가능한 4포트채널링이 생성된다.
<예제>
int ethernet 33-36
channel-group 20 mode active
exit
물론 각 컴퓨터에서도 해당 네트워크 포트들을 스위치와 동일한 설정으로 LACP 설정을 해야 한다.
ubuntu 에서 netplan 으로 네트워크를 설정하는 경우 bond 부분을 설정하면 된다.
<예제> ens33과 ens34 두개의 인터페이스 본딩.
이정도만 하면 최소한 80G 네트워크 대역폭을 가진 내부 스토리지 망을 구성할수 있다.
남은 문제는 결국 이렇게 높아진 대역폭을 활용할 수 있는 정도의 스토리지 성능?이다.
최대 160G 의 대역폭을 지닌 스토리지 서버는 이론상 20Gbyte/Sec 의 전송속도를 낼수 있다.
하지만 위의 구성예제처럼 물리적인 최대 읽기 대역폭이 9Gbyte/sec 정도라면 램이나 SSD 캐시를 최대한 활용해도 최대 대역폭을 다 사용하지는 못할것이라 생각된다. 보다 빠른 전송이 필요한 경우라면, 고성능 서버 SSD 나NVME로 구성된 Full Flash Storage 도입도 고려해볼 필요가 있다.
작업은 빠른 Full Flash Storage 에서 하고, 완성물은 HDD 기반 스토리지 를 사용하면 좀더 효율적이 될것으로 기대된다.
이상.
잘보았습니다.
저런 대역폭을 제대로 뽑을 방법은 NVMe/U.2같은걸 RAID하는 방법밖에 없다고 보면 됩니다 (SATA SSD를 60개 묶어도 안정적으로 160Gb 보장 안 됨)
케쉬가 보템이 되는건 파일 개수가 많고, 용량이 적을때 HDD 특유의 랜덤 엑서스 성능을 극복하기 위한건데, 영상 작업처럼 개당 수~수십기가짤 파일이 메인이 되면 보템이 안 되요
거기다 작업 특징상 특정 파일을 반복적으로 접근하지 않는점도 문제입니다
거기다가 60슬롯정도를 SATA/SAS SSD로 꽉 채우면 대역폭 문제로 컨트롤러의 성능으로 상한이 걸려서 속도가 더 안 나옵니다 (컨트롤러 2개 달아도 12기가*2=24기가로 상한이 정해집니다)
결국 저런 대역폭을 감당할려면 NVMe/U.2 RAID밖에 없어요
대용량 파일은 그럴수도 있지만 동일한 파일을 여러사람이 억세스 하는데는 도움이 되지 않을까요?
NVME/U.2 는 좋지만 저는 레이드 카드 방식은 선호를 안합니다.
램에 올리지도 못할 수십기가의 데이터를 다루는게 흔한일이고, 1번 쓴 데이터를 단시간에 다시 쓸 가능성이 낮은 (보통 복사하거나 불러오는 과정에서 로컬에서 코덱 변환 해서 케쉬 처리합니다) 작업용으로는 케쉬의 효율을 기대할 수 없습니다
케쉬의 효율이란 결국 용량과 적중율에 달린 문제고, 이걸 기대할 수 없기때문에 별 효과가 없다고 하는겁니다
특히 본문에서 애기한것처럼 제각각 서버를 갖추고 제각각 작업하던걸 하나로 묶었다고 가정하면 각자가 개인 작업 디렉토리 파서 거기 기존 서버 데이터를 옴겨서 다루게 되므로 중복으로 될 확율이 낮아지게 되고, 160G나 갖출정도면 꽤 요즘 기준인데 요즘처럼 4k로 작업할일도 늘어난경우 데이터의 개별 사이즈도 장난 아닙니다 (용량을 채우기 위해 Storage서버에 램을 512G쯤 달아줘도 케쉬 적중율 고려하면 효과는 불명입니다)
본문의 내용에 대해서 문제가 있다고 애기할 작정은 없지만 (스팩은 달라도 보통 저런식으로 씀), 최저한도로 저런 수준의 성능을 기대한다면 디스크 구성은 바꾸어야 한다고 봅니다
그리고 NVMe RAID는 보통 RAID카드가 아니라 VROC으로 CPU가 처리하는 방식입니다
그런데 RAID6경우 연산 부하가 꽤 커서 케쉬가 달린 복수의 RAID컨트롤러로 분산 처리하는게 이상적입니다 (물른 CPU성능을 높여서 연산능으로 다 때워도 되지만 부하 꽤 심해요)
애초에 SSD로 도배하든 뭘 하던간에 결국 전체 대역폭은 각 컨트롤러 대역폭 상한의 합계를 넘을 수 없습니다 (이 시점에서 160G를 감당하는데 턱없이 부족합니다)
말씀하신대로 원본 파일은 램에서 불러오는거고 작업 결과(원본과의 차이인 일종의 레이어)만 각자의 디렉토리(이것도 스토리지 서버에 있습니다.)에 저장한후 각 작업 레이어을 합치면 작업이 완성 됩니다. 수정이 필요하면 해당 레이어만 수정합니다.
저널같은 라이트캐시는 여전히 NVME 같은 고속 플레시를 사용합니다.
소프트웨어NFS 에서 레이드카드같은게 없으니 읽거나 쓸때 대역폭은 램캐시 만큼 쓸수 있습니다.
싸구리구리한 ddr3 10600 r 도 듀얼채널이니 21200MByte/s이고 이거면 160G는 넘을거 같은데요..
뭐 다쓰지 못하더라도 이가격에 이정도면 만족
소프트웨어니 당근 프로세서 이빠이 쓰고, 가능하면 고클럭이 좋지요..
하지만 이역시도 sata든 sas 든 hba 카드의 대역폭만큼만 나오는건 맞으니 풀 플래시 스토리지 를 작업용으로 쓰는게 좋겠다란 의미 입니다. 실제적 구성으론 pci-e 레인이 많은 컴으로 외장 hba 카드 여러개 달아서 12지? 짜리 익스팬더로 디스크 12개짜리 정도를 여러개 다는게 좋겠지요.. 뭐.. 다 돈이니까...
전체적인 스토리지만 보면 디스크를 사용한 스토리지는 한계가 있을수 밖에 없습니다..
일단 찰영용 장비부터 신형 쓰면 PCIe 방식 달린 켐코더같은것 쓰는 경우도 늘고 있고, 3~4명이서 쓰는것도 10G에 SSD도배한 NAS같은걸 씁니다 (이정도 안 하면 4k 대응이 안 되요)
FHD시절에 비해 장비의 수치적 스팩이 장난 아니게 뛰었습니다
오로지 파일서버용도의 freebsd 기반 zfs는 램 용량의 90퍼센트를 모조리 캐싱(zfs 용어 기준 Adaptive Replacement Cache, ARC)에 사용합니다. 게다가 이 메커니즘이 다른 파일서버랑 다르게 굉장히 스마트하게 사용 패턴을 기반으로 캐쉬를 올리는데 와... 신세계를 보았습니다
마치 램을 레이드카드 캐쉬처럼 사용하는데 램이 16기가이던 64기가이던 256기가이던 상관없이 사용패턴 기반으로 끝도 없이 캐싱을 합니다. 2테라 캐쉬가 달린 레이드카드가 달린 160Gbps 서버... 실증은 해보지 않았지만 영상 업계 스토리지에도 충분히 먹힐거라 생각합니다. 다만 쓰기 작업도 많이 이루어지기 때문에 안정성을 위해 NVDIMM 등의 초고속 SLOG 장치도 필요할 것 같네요
근데 디스크 대역폭이 따라가질 못하는데 저런 셋팅은 돈 낭비가 아닌지...?
저렇게 빠른 랜이 아니라도 보통의 환경에서 스트레스 안받고 왠만한 작업은 원활하게 할 수 있습니다.
과한 욕구 or 욕심은 오히려 망하는 지름 길....