"파일 송신 서버 제작" 강의 질문입니다!
안녕하세요!
파일 송신 서버 제작 강의 부분중에 궁금한 것이 생겨 질문드립니다.
"파일 데이터를 전송할 때 큰 데이터를 한 번에 올리는 것이 더 성능적으로 좋아질 수 있다." 라고 하셨는데, 그 이유가 무엇인지 구체적으로 알고 싶습니다.
제가 생각한 것은
시스템 콜 호출 횟수 감소(유저->커널 레벨의 모드 스위치 감소)
디스크 읽기 최적화?
(한 번에 순차적으로 접근할 수 있는게 많아지는...?)
(I/O를 여러 번 하면, 할 때마다 랜덤 엑세스를 해야하니까, 디스크 seek 타임이 많아지는 이유가 맞을까요?)
CPU가 접근하는 커널 페이지 버퍼의 캐시 히트율 증가
정도인데요. 혹시 다른 이유가 더 있는지 궁금합니다.
감사합니다.
답변 2
1
2, 3번으로 제시한 디스크 읽기 최적화 및 캐시 히트율도 영향이 있을 수 있겠으나 크지는 않아 보입니다. 그러나 1번은 분명 영향이 있습니다. 무엇보다 입/출력 간에 발생할 수 있는 대기에 따른 지연은 영향이 큽니다. 로컬 디스크에 대한 입/출력 지연도 있겠지만 그 보다는 네트워크 송신 시 발생 할 수 있는 지연은 큰 편입니다. 참고하시기 바랍니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다.
bknote71님께서 질문하신 “큰 데이터를 한 번에 전송하는 것이 성능적으로 좋은 이유”에 대해 설명드리겠습니다.
기본적으로 큰 데이터를 한 번에 전송하는 것은 여러 가지 성능 향상 요인을 동반합니다:
시스템 콜 호출 횟수 감소: 말씀하신 대로 시스템 콜 호출 횟수가 줄어들면 유저 모드와 커널 모드 간의 문맥 전환(Context Switch)이 적어지기 때문에 성능이 향상될 수 있습니다. 이는 매우 중요한 요소입니다. 시스템 콜은 컴퓨팅 비용이 많이 드는 작업으로, 호출이 감소하면 전체적인 작업 수행 속도가 빨라질 수 있습니다.
네트워크 대역폭 효율성: 네트워크 전송 시 패킷의 오버헤드가 있는데, 많은 양의 데이터를 한 번에 보내면 이러한 오버헤드가 줄어들어 네트워크 대역폭을 더 효율적으로 사용할 수 있습니다. 작은 데이터를 여러 번 전송하면 각 패킷에 header나 제어 정보가 붙기 때문에 전송 효율이 낮아집니다.
TCP 윈도우 크기 및 비효율 감소: TCP 프로토콜에서는 데이터 흐름을 관리하기 위해 윈도우 크기를 사용하는데, 큰 데이터를 전송하면 이 윈도우 크기를 최대한 활용할 수 있어 네트워크 전송의 효율성을 높일 수 있습니다. 특히, 네트워크는 가변적 지연이 크기 때문에 크게 송신할 경우 같은 양의 신호 교환 대비 더 많은 양의 데이터를 보낼 수 있습니다.
CPU와 네트워크 장치의 활용도 증가: 큰 데이터를 전송할 때 CPU가 반복적으로 패킷을 작성하고 보내는 부담이 감소하며, 한 번에 더 많은 데이터를 네트워크 인터페이스에 전송할 수 있어 CPU와 네트워크 장치 간의 작업 분담이 최적화됩니다.
제안하신 두 가지 이유 외에도 위와 같은 네트워크 및 시스템 관점에서도 이해할 수 있습니다.
아래의 링크에서 유사한 질문과 답변을 참고하실 수 있습니다.
- 소켓과 파일, 그리고 시스템 콜에 대하여 : 시스템 콜과 네트워크 프로그래밍에서의 효율성을 이해하는 데 도움을 주는 내용이 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
recv, send 리턴값 질문
0
76
2
스타,워크와 같은 디스창 (Disconnected)도 비정상 종료에 대응하는 시스템으로 봐야할까요?
0
96
2
수업과 관련해서 읽어볼 만한 책 있나요?
0
111
1
서버가 끊어버리는것에 대한 질문
0
121
2
TCP 의도적 장애 테스트 질문
0
159
2
shutdown()을 호출하는 이유
0
164
1
프로토콜이 적용된 파일 송신 서버에서 send, recv 질문 있습니다!
0
152
2
대표적인 장애 유현 2
0
131
2
대표적인 TCP 장애 유현
0
160
2
이벤트 기반 파일 입출력과 callback 기반 파일 입출력이 네트워크에도 쓰이는 기법인가요?
0
120
2
개발환경 질문이 있습니다.
0
137
1
TCP/IP vs UDP , 멀티 스레드에서의 병목 현상에 대한 질문이 있습니다!
0
221
2
메모리 관련 문제로 질문드립니다.
0
187
2
테스트 환경 질문드립니다!
0
168
2
ThreadAcceptLoop 의 우아한(?) 종료에 대해 질문드립니다.
0
419
2
하트비트 시 서버에서의 연결 종료
0
451
2
강사님 질문 드립니다.
0
249
1
소켓 입/출력 설계 정리
0
450
1
멀티스레드 기반 서버 관련 질문..!
0
412
2
빅 엔디언과 리틀 엔디언
0
377
2
TIME_WAIT 관련 문의드립니다.
0
226
1
강사님 강의자료 인쇄용으로 부탁드립니다.
0
288
1
bind 함수 관련 궁금증
0
357
2
스마트포인터 사용여부 및 가능성
0
260
2





