320x100

서버 8

Jenkins

Jenkins로 빌드 뿐만 아니라 배포와 데몬의 실행까지 가능하다. 이번 팀에서 적용하는 방법이라 관련 내용만 URL로 정리해둔다. 파워쉘을 같이 알아두자. https://major-guide.paas-ta.kr/guide-5.0-ravioli/use-guide/tools/paas-ta_jenkins_service_user_guide https://www.nextree.co.kr/ciwa-execute-shelleul-iyonghan-jadongbaepo-buteo-seobeo-silhaengggaji/ CI와 Execute Shell을 이용한 자동배포 부터 서버 실행까지….. 프로젝트 초반에 CI를 도입하기 전, 배포를 했었을 때 매우 불편한 점이 많았다. 로컬에서 개발한 소스코드를 개발계 서버에서 테..

서버/기타 2021.10.26

기본 개념

IOCP는 IO operation 마다 버퍼 영역에 대한 page-lock/unlock이 필요하고, 이는 많은 CPU 연산을 필요로 한다. (하나의 IO operation 마다 시스템콜 호출, 유저-커널모드 switching 발생) Zero-recv같은 우회방법으로 page locking을 회피 했었다. 이런 문제점을 해결하기 위해 IO에 사용할 물리메모리를 고정시켜두고 사용하는 방법으로 RIO가 등장하며 매 IO마다 page-lock/unlock이 필요 없어졌다. 단점으로는 메모리를 미리 선점하는 형식이기 때문에 미사용 하는 메모리의 양이 존재한다. IOCP와의 차이점은 IOCP의 경우엔 그저 해당 핸들로 Post, Get 전부 Thread Safe하게 사용할 수 있었지만, RIO의 Request Qu..

서버/RIO 2021.09.23

IOCP 관련 advance

AcceptEx 예전 reactor 방식에서 사용하던 accept 함수 대신 AcceptEx 함수를 사용하자. BOOL AcceptEx(SOCKET sListenSocket, SOCKET sAcceptSocket, PVOID lpOutputBuffer, DWORD dwReceiveDataLength, DWORD dwLocalAddressLength, DWORD dwRemoteAddressLength, LPDWORD lpdwBytesReceived, LPOVERLAPPED lpOverlapped); SOCKET sListenSocket: 서버에서 사용하는 listensocket SOCKET sAcceptSocket: 클라이언트의 연결을 수용할 소켓. 미리 풀을 만들어 둔다. PVOID lpOutputBuf..

서버/IOCP 2021.09.09

page-locking

우리가 데이터 송수신에 사용하는 함수 WSASend(), WSARecv()는 파라미터로 넘겨진 버퍼가 페이징 되지 않도록 페이지 단위(윈도우에서는 4KB)의 락을 걸게 된다. 운영체제는 이러한 페이지의 최대치가 존재하는데, 이 한계를 넘길 경우 Overlapped I/O는 실패하게 된다. 그래서 우리는 흔히 ZeroByte Recv이라는 꼼수를 통해 이벤트 발생과 데이터의 수신을 분리해서 락이 걸리는 페이지를 줄이는 방법을 사용한다. WSABUF wsabuf; wsabuf.buf = nullptr; wsabuf.len = 0; ::WSARecv(socket, &wsabuf, 1, NULL, &dwFlag, (LPWSAOVERLAPPED)&over_recv, NULL); WSARecv 함수를 이렇게 호출하..

서버/IOCP 2021.09.09
320x100