
네, 제목이 암시하는 것보다 이야기에 더 많은 내용이 있습니다.
배경과 환경: SMB를 통해 이전 Ubuntu 서버에서 최신 Windows 2012 서버로 몇 TB를 복사하고 있습니다. (기술적으로는 상용 하드웨어이지만 여기에 있는 서버입니다.) 모두가 기가비트 LAN을 사용하고 있으며 이전 Ubuntu 상자에는 결합된 인터페이스가 있습니다. 나는 Ubuntu 서버에 두 개의 Rosewill PCI-e 1x 이더넷 카드가 있고 Windows 서버에는 상당히 좋은 PCI Intel 이더넷 카드가 하나 있다고 생각합니다.
대상 컴퓨터(Windows 서버)는 4x 2TB 드라이브 이상의 패리티가 있는 스토리지 풀을 실행하고 있습니다. Microsoft의 새로운 ReFS를 실행하고 있습니다. 원본 컴퓨터(Ubuntu 서버)는 소프트웨어 RAID 미러를 실행하고 있습니다. EXT4는 잘 돌아가고 있어요.
두 서버는 단일 기가비트 스위치를 통해 실행됩니다. 아무런 개선 없이 소스(Ubuntu) 컴퓨터에서 본딩을 깨는 실험을 해봤습니다.
문제: 다른 컴퓨터에서 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로 보내고 있다고 주장합니다.
추측: 내 초기 추측은 더 저렴한 Rosewill 카드가 휩쓸리고 있다는 것입니다. 두 번째 추측은 한쪽 끝이나 다른 쪽 끝에서 소프트웨어 RAID와 유사한 작업이 할 일로 넘쳐난다는 것입니다.
답변1
성능 격차는 Samba(이것이 여전히 기본값인지는 확실하지 않으며 오랫동안 사용되어 왔음)가 1024바이트의 기본 읽기 및 쓰기 소켓 버퍼 크기로 구성되었을 때의 일반적인 경험과 일치합니다.
나는 Linux 및 Mac 컴퓨터에서 이것을 자주 보았습니다. 아직은 그렇지 않기를 바랍니다.
Samba 구성 파일에는 읽기 및 쓰기 소켓 버퍼 크기를 설정할 수 있는 소켓 옵션 인수가 있습니다. 둘 다 8192바이트(8KiB)로 설정하는 것이 좋습니다. 4KB 또는 8KB는 종종 비슷하지만 기가비트 링크에서는 테스트하지 않았습니다.
또한 단일 TCP 연결이 연결된 링크의 이점을 누릴 것이라고 기대하지 마십시오. 트래픽은 거의 항상 링크 중 하나를 통과합니다. 그렇지 않으면 처리해야 할 순서가 잘못된 패킷이 많이 발생하게 됩니다. 따라서 여러 클라이언트에 서비스를 제공할 때만 로드 밸런싱 이점을 기대하세요. 그럼에도 불구하고 다양한 본딩 모드를 찾아보고 최소한 "모드 4"(IEEE 802.3ad) 본딩의 경우 기본적으로 전송할 슬레이브 인터페이스를 결정하는 두 가지 전송 해시 모드가 있다는 것을 알아야 합니다. 레이어 2 해싱(기본값)과 레이어 3 해싱이 있습니다. 게이트웨이를 통해 대량의 데이터를 전송하는 경우 게이트웨이의 MAC 주소가 동일하므로 계층 2 해시가 잘 분산되지 않습니다. 대신 레이어 3을 사용해 보세요.
답변2
한때 한 Ubuntu 컴퓨터에 두 개의 이더넷 카드가 있었는데 어떤 이유로 제대로 작동하지 않았습니다. 둘 다 겉보기와 동일한 패킷을 위해 경쟁했기 때문에 때로는 다른 네트워크 카드가 가져갔는지에 따라 응답을 받지 못할 때도 있었습니다. 포장된. 이상했어요. 어떻게든 잘못 구성한 것이 틀림없지만, 그냥 작동했을 것이라고 생각했을 것입니다. 물론 카드에는 고유한 IP 주소가 있었습니다.
어쨌든, 이를 배제하기 위해 네트워크에 연결된 시스템에 단 하나의 이더넷 카드만 사용하여 시도해 보는 것은 간단할 것입니다.