LVS

커널 소켓 프로그래밍

2010. 11. 20. 21:13
1. 서론

이번주는 CPU 점유율을 고려한 Round Robin 알고리즘 수정을 진행하였는데요, 그 중 핵심은 커널 소켓 프로그래밍이 되겠습니다. 제가 주중에 시험을 보는관계로, 여기에 내용을 정리해 두도록 하겠습니다.

2, 방법

Round Robin 알고리즘을 담고있는 ip_vs_rr.c 파일에, tcp_vs_h_dslb.c 의 일부 코드를 이식하는 작업을 진행해 나가면 됩니다.

2.1 이식되어야 할 주요 함수

가장 중요한 함수로는 sock_recvmsg()함수를 담고 있는
example_thread()

Thread 방식(?) 이기 때문에, thread를 시작하고 종료해주는
launch_thread()
kill_thread()
이 세 함수 정도가 가장 중요하다고 볼수 있겠구요, 나머지 연결된 함수들은 make 를 하시면서 하나씩 첨부해 주시면 되겠습니다.

연결된 함수들은 기본적으로 tcp_vs_h_dslb.h 내에서 참고하여 이식하는 방법이 가장 좋으며, 없을 경우 해당 함수를 품고있는 헤더파일을 찾아 include 시켜주는 방법이 좋겠습니다.

커널이 2.4에서 2.6으로 업그레이드 되면서 몇가지 struct 구조에 변화가 생겼습니다. 그것들은 에러가 났을경우 구글링을 통해 검색하셔서 조금씩 수정해주시면 되겠습니다.(argument 문제가 두곳, struct의 변화가 두군데 정도 되었던것으로 기억이 납니다;;)

이식을 끝내신후에는 ip_vs_rr.c 모듈에 시작 함수(module_init 부분 참조) launch_thread()를 첨부하여 thread를 동작하게 만들어 주시고, 종료 함수(module_exit(?) 부분 참조) 에는 kill_thread()를 첨부하여 모듈이 종료되었을 경우 thread또한 종료될수 있도록 만들어 주시기 바랍니다.

P.S. : kill_thread()내부의 kill_proc() 함수가 커널버젼이 바뀌면서 적용이 되지 않고있는데, 아직 이문제는 해결이 되지않았습니다. 때문에 모듈제거가 안되요..ㅠㅠ 해결해 주세요!

3, 결과 확인

최종적으로 만드신 ip_vs_rr 모듈을 실제로 올려보시고, host_info로 만든 어플리케이션을 동작시킨 후 실제로 커널에서 메세지를 수신하고 있는지 dmesg 확인합니다. (printk()는 example_thread() 함수 내부에 주석 처리되어있는 두 곳중 cpu_use 관련 내용을 출력하는 곳의 주석을 해제하시면 되겠습니다.)

NCLab 화이팅!

'LVS' 카테고리의 다른 글

LVS 구축에 관한 이론 (NAT 부터 WLC 까지)  (2) 2010.12.23
RR 알고리즘 개선 -> N번째 N번 부하 분산  (0) 2010.12.20
모듈 프로그래밍  (1) 2010.11.10
ipvsadm 소스 파일 make하기  (1) 2010.11.09
LVS server 구축  (2) 2010.11.06
 

New Post