IOCP Page-Locking.. ????

Yoon Sunkue·2021년 10월 27일

iocp에 대해서 검색 중 page_locking 이라는 단어를 본 적이 있다. 이렇고 저렇고 해서 zero_byte_recv 를 계속 받게 해야한다는 얘기가 소켓 옵션 조정얘기랑 같이 나오는데, 0byte recv 계속해주는게 이득이 맞는지 의문이 생긴다. 무의미한 zero_byte_recv를 계속 시키는게 맞나? 윈도우OS에서, 작업관리자를 열면 메모리 영역에 페이징 풀, 비페이징 풀 크기를 보여준다. 현재 내 노트북에서는 둘다 800MB 정도 잡혀있다. 꽤나 많다, 페이징 풀은 4KB 씩 WSB버퍼가 가르키는 주소에 할당되는 거다. 4KB 씩 한 세션에 할당된다 치면, 몇명이 동접 할 수 있는가? 20만명이다. 보통 몇 바이트의 패킷을 주고받고 대기시키는가? 내 메모리는 16기가이고 그중 800MB가 잡혀있는건데, 서버는 더 큰 메모리와 최적화된 OS를 사용하지 않나? 결국 몇 개의 세션과 몇 바이트의 버퍼가 쌓이고 쌓여야 이게 넘어가 버리는 것인가? 뭣보다 0바이트로 recv하는 거는 얼마만큼의 자원낭비인가? SO_RCVBUF 로 커널 버퍼 복사 비용을 줄인 뒤, 이에 따른 locking 이 생긴다는 거는 알겠는데, 그 메모리 낭비가 큰 의미가 있는건가?. 마소가 처음 iocp 발표하고 프레임워크책 썻을때 zecv0 테크닉을 썻는데, 아직도 그대로인건가? 매뉴얼이 recv0를 장려하는 것인가? 페이징풀 문제가 실제 상용서버에서 생기는 지도 의문이다만, 생긴대도 서버에 램 몇 개 꽂는게 더 쉽고 효율적인 해결법으로 보인다.

여기까지가 내 의문이다.

https://docs.microsoft.com/en-us/windows/win32/winsock/overlapped-i-o-and-event-objects-2
https://docs.microsoft.com/en-us/troubleshoot/windows/win32/data-segment-tcp-winsock
https://chfhrqnfrhc.tistory.com/entry/pagelocking-nonpaged-pool?category=484325
https://chfhrqnfrhc.tistory.com/entry/SOSNDBUF-0?category=484325
https://so-what-93.tistory.com/22
https://crmerry.tistory.com/29?category=1031711
https://crmerry.tistory.com/28?category=1031711

0개의 댓글