왜 이렇게 낮은 SMB 전송 처리량이 표시됩니까?


10

좋아, 제목이 의미하는 것보다 이야기에 조금 더 있습니다.

배경 및 환경 : 이전 Ubuntu 서버에서 SMB를 통해 최신 Windows 2012 서버로 몇 TB를 복사하고 있습니다. (기술적으로는 상용 하드웨어이지만 여기에는 서버가 있습니다.) 모두가 기가비트 LAN에 있고 구형 Ubuntu 상자에는 본드 된 인터페이스가 있습니다. 우분투 서버에는 2 개의 Rosewill PCI-e 1x 이더넷 카드가 있고 Windows 서버에는 1 개의 합리적인 PCI Intel 이더넷 카드가 있다고 생각합니다.

대상 컴퓨터 (Windows 서버)가 4x 2TB 드라이브 이상의 패리티를 가진 저장 영역 풀을 실행 중입니다. Microsoft의 새로운 ReFS를 실행 중입니다. 소스 컴퓨터 (우분투 서버)가 소프트웨어 RAID 미러를 실행하고 있습니다. EXT4가 양호합니다.

두 서버는 단일 기가비트 스위치를 통해 실행됩니다. 나는 아무런 개선없이 소스 (우분투) 컴퓨터에서 본딩을 끊는 실험을 해왔다.

문제 : 다른 컴퓨터에서 Windows 서버로 적당한 속도로 전송하는 데 문제가 없습니다. 다른 컴퓨터는 별 어려움없이 50-80MB / s를 저장할 수 있지만 해당 Ubuntu 서버에서 전송하는 속도는 20MB / s를 넘지 않습니다. 20MB / s의 4 + TB는 시간이 오래 걸리며 (2.3 일 정도) 병목 현상이 발생하는 위치를 파악하기 위해 어떻게해야하는지 궁금합니다.

증상 : 두 컴퓨터의 CPU가 매우 적으며 확실히 사용량이 많지 않습니다. 두 컴퓨터의 하드 드라이브는 활성화되어 있지만 늪지대가 아니며 적어도 Ubuntu 서버에서 CPU IOwait는 거의 0 %입니다.

나는 35 초 동안 Wireshark 추적을 수행했으며 (아마도 모든 ACK가 새 패킷에 대한 것인지 확인하기에 충분히 길었습니다) 예상하지 못한 것이 몇 가지 있음을 알았습니다. (1) Windows에서 Ubuntu 로의 ACK (및 일부 SMB 패킷)에 대한 체크섬이 없습니다. 그러나 Wireshark는 이것이 "IP 체크섬 오프로드"때문일 수 있다고 주장합니다. 좋아, 나는 거기에 꽤 좋은 카드가 있습니다. 네트워크 카드가 체크섬 계산을 수행 할 수 있다고 가정합니다. 좋아. (2) "TCP가 보이지 않는 세그먼트를 ACK했습니다." 이것은 내가 문제가 있습니다. ACK 번호는 내가 말할 수있는 범위에서 허용 가능한 범위 내에 있으며 종종 이러한 메시지의 거대한 블록이 있습니다. 아마도 Wireshark가 너무 느릴까요?

요약 : 전송 속도가 빠르며 (기가비트 이더넷에서 20MB / s) 이유를 모르겠습니다. Wireshark는 Windows가 Ubuntu에서 보내지 않은 것을 ACK하고 있다고 주장합니다.

Guesses : 나의 초기 추측은 더 싼 Rosewill 카드가 늪에 빠지고있는 것이다. 두 번째 추측은 소프트웨어 RAID와 같은 것이 다른 쪽 끝에 있거나 다른쪽에해야 할 일이 많아지고 있다는 것입니다.


2
Ubuntu 서버에서 데스크톱 중 하나 (Server 2012가 아닌)로 복사하는 속도는 어느 정도입니까? 아마도 WinXP 또는 Win7? Server 2008 이상의 SMB에서 패킷 서명 및 암호화에 큰 문제가있었습니다.
Dom

업데이트 : 나는 재부팅해야했습니다 (커널 패닉 덕분에). 불행히도 시스템은 이제 모든 부팅에서 커널 패닉을 갖습니다. 나는 신뢰할 수있는 Knoppix 사본을 꺼내고 드라이브를 마운트했으며 모든 것이 이제 멋지고 멋집니다. 이제 SSH를 통해 복사하고 있는데 여전히 병목 현상이 어디에 있는지 모르겠습니다. sshdKnoppix 측에서 한 프로세서의 60 %를 차지하고 있습니다. 어쨌든 제 송금이 거의 완료되었습니다. @Dom : 이제 언급했듯이, 처음에는 30MBps보다 훨씬 빠른 속도로 모든 데이터를 저장하는 것을 기억하지 않습니다.
Andy

2
@LorenzoVonMatterhorn, URL 단축기를 사용하지 마십시오.
Cristian Ciupitu

디스크 문제가 아닌가?
MariusMatutiae

2
Windows는 지난 4-5 년 동안 훨씬 빠른 버전의 SMB 프로토콜 (SMB 2)을 구현했는데, 이는 훨씬 덜 복잡하고 효율적입니다. 이러한 변경 사항이 Samba에 적용 된 시점을 알지 못하지만 이전 Ubuntu에 이전 Samba가 있고 Knoppix가 최신 버전 인 것처럼 들립니다.
uSlackr

답변:


1

Samba (여전히 이것이 기본값인지 확실하지 않고 오랜 시간이 지났음)가 기본 읽기 및 쓰기 소켓 버퍼 크기 (1024 바이트)로 구성된 경우 성능 차이는 일반적인 경험과 일치합니다.

나는 이것을 Linux와 Mac 컴퓨터에서 자주 보았습니다. 바라건대 여전히 그렇지 않습니다.

samba의 구성 파일에는 읽기 및 쓰기 소켓 버퍼 크기를 설정할 수있는 소켓 옵션 인수가 있습니다. 둘 다 8192 바이트 (8KiB)로 설정하십시오. 4 또는 8KB는 종종 유사하지만 기가비트 링크에서는 테스트하지 않았습니다.

또한 단일 TCP 연결이 본드 링크의 이점을 기대하지 마십시오. 트래픽은 거의 항상 링크 중 하나를 통과합니다. 그렇지 않으면 처리하기 위해 많은 비 순차적 패킷이 생깁니다. 따라서 여러 클라이언트를 서비스 할 때는로드 밸런싱 이점 만 기대하십시오. 그럼에도 불구하고, 서로 다른 본딩 모드를 찾아보아야하고, 적어도 "mode 4"(IEEE 802.3ad) 본딩에는 기본적으로 두 개의 송신 해시 모드가 있으며, 어떤 슬레이브 인터페이스를 전송할 것인지 결정합니다. 레이어 2 해싱 (기본값)과 레이어 3 해싱이 있습니다. 게이트웨이를 통해 대량의 데이터를 전송하는 경우 게이트웨이의 MAC 주소가 동일하므로 계층 2 해시가 제대로 분배되지 않습니다. 대신 레이어 3을 사용하십시오.


0

한때 우분투 컴퓨터에 이더넷 카드 두 개가 있었고 어떤 이유로 제대로 작동하지 않았습니다. 모두 같은 패킷을 찾은 경우가 있기 때문에 때로는 다른 네트워크 카드가 잡혔는 지에 따라 때때로 응답하지 않을 것입니다 포장. 이상했다. 어떻게 든 잘못 구성해야했지만 방금 작동했을 것이라고 생각했을 것입니다. 카드에는 물론 고유 한 IP 주소가있었습니다.

어쨌든, 네트워크에 연결된 머신에서 하나의 이더넷 카드로 시도해 보는 것은 간단합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.