요즘 리눅스 커널 공부에 한창이다.
대학원에서 OS를 작년에 배운지라. OS에 대한 개념을 그때 확실히 세워둬서 아주 보기가 좋다. 오늘 내내 코드 보고 테스트 프로그램 짜보고 하면서 왜 검색엔진 개발자에게 커널에 대한 개념이 필요한지를 어렴풋이 알았다. (솔직히 두근거리기까지 했다. 실험해보고 싶은 욕구까지해서..)
1. 검색엔진에 최적화된 OS를 구비하기 위함
2. 색인시 빈번히 일어나는 파일 쓰고 읽기에 대한 접근성 향상을 꾀할수 있다.
3. 검색시 메모리 및 파일 접근성 향상을 꾀할 수 있다.
엔진 개발시 알고리즘에 대한 고민을 정말 다 했다면 커널에 대한 고민을 하는것도 좋다고 생각한다. 엔진에 최적화된 커널 이미지를 유지하고 커널 내의 시스템 함수를 사용하는 모듈을 만들어 사용함으로서 C라이브러리 함수를 통한 시스템 호출에 소요되는 리소스를 상당히 줄일 수 있다는 것이다.
일반적으로 시스템 함수 호출의 순서는
1. 사용자 프로세스에서 시스템 함수 호출이렇게 된다.
2. libc에서 시스템 호출 준비
– 시스템 호출에 필요한 인자를 register stack에 넣음
– 시스템 호출 번호 저장
– 인터럽트 발생(실제로는 trap) context-change가 일어남
3. system_call()
– IDT에 의해 인터럽트 시작
– sys_call_table 사용
– 인터럽트 서비스 루틴 실행
4. 결과값 사용자에게 반환
엔진에서 빈번하게 쓰이는 모듈을 커널에 넣어서 쓴다면 위의 루틴의 상당 부분을 줄일수 있고 이것은 엔진의 퍼포먼스 향상에 기여를 할것이기 분명하다.(IO계열의 함수를 커널모듈로 대체하면 좋겠군)
물론 커널단에 쓰이는 함수는 C표준 함수가 아니기 때문에 이것들에 대한 주의를 꼭 필요하고 시스템 라이브러리가 보장해 주는 안정성에 대한 많은 부분을 직접 책임을 져야 하지만 간단하고 많이 쓰이는 부분에 대해서 이런 교체 작업을 한다면 성능향상에 기여하리라 믿는다.
하지만 실제 커널 모듈을 만들어 프로그램을 만들어본적이 없으니 위와 같은 잇점 이외에 생각치 못한 단점이 있으리라 생각이 된다.
기업형 솔루션 기반 엔진이 아닌 포털에 들어가는 엔진을 포털에서 직접 만든다면 위와같이 특화시켜서 만들어 봄직도 할것같다.(기업형은 저렇게 하면 패키징이 더욱 어렵고 유지보수 하기 힘들겠지..ㅋㅋ )
검색엔진용 커널 이미지 + 엔진에 필요한 커널 모듈 + 검색엔진
위와같이 떡하니 하나 만들어보면 소원이 없겠넹…
ps. 김정은님이 주신 커널 자료모음 감사합니다. ^^
검색 엔진 개발자에게 OS 커널 프로그램 능력이 필요한 이유? by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.