2020-11-20(Fri)

  1. 학습 날짜 // 2020-11-20(금)

  2. 학습시간 // 9:00~22:00

  3. 학습 범위 및 주제 // Webserv 성능개선

  4. 동료 학습 방법 // sanam님과 페어프로그래밍, yohai님과 토의

  5. 학습 목표 // webserv 성능 개선을 해본다.

  6. 상세 학습 내용

20개 클라이언트가 5000씩 요청을 보내는 것에 대해 처리하는 로직에 문제가 있는지 생각보다 너무 느렸다. 이에 time log 함수를 usec 단위로 찍을 수 있도록 개선하고 병목이 되는 함수를 찾아볼 수 있도록 셋팅하였다.

설상가상으로 Chunk data write/read에서 계속 문제가 발생하였다. 이에 yohai님과 함께 이 문제를 fix하기로 하였고, 성능개선은 sanam님께 부탁드렸다.

chunk를 파싱하는 과정에서 케이스 분기가 제대로 진행되지 않은 것을 확인하여 수정하였다. 그리고 sanam님이 발견한 성능개선 포인트들.. 불필요한 memset 삭제, request, response init 효율화를 해보았으나 이상하게 오류가 더 발생하였다. 이 문제의 원인을 끝까지 찾지 못한 와중에 제대로된 속도개선을 위해서는 결국 구조변경이 필요하므로 우선 구조변경을 하고 오류를 잡자는 의견, 구조변경 전에 오류를 잡고 구조변경을 해야 제대로 테스트해가며 개선하는 것이 가능하다는 의견을 나누었다.

우선 전자 의견을 채택하여 나와 yohai님이 client로부터 server에 보낸 data를 parsing하여 따로 저장하는 것이 아닌, 바로바로 CGI에게 보내는 구조로 변경하였다. 그러나 역시 앞서 발생했던 오류가 계속 터져나와서 참 곤란스럽다..

  1. 학습 내용에 대한 개인적인 총평

계속되는 오류에 단순 값 검사를 넘어서 디버그 모드로 직접 buf에 저장되는 값 등을 바로바로 확인해봐야겠다는 판단이 들었습니다. 이에 makefile을 활용하는 와중에 디버그하는 방법을 학습하였고, 만족스럽게 성공하였습니다. 오기가 생기네요. 꼭 잡고 말겠습니다 에러버그. 진짜 이쯤되면 누가이기나 끝장을 보자는 생각이 드네요ㅎㅎㅎㅎ

다음 학습 계획

  • Webserv 오류잡기

Last updated