◈ 이 책에서 다루는 내용 ◈
◆ CPU와 메모리, 디스크/SSD, 네트워크 그리고 자원들간의 간섭과 관련된 문제를 측정하고 해결한다.
◆ 항상 느리게 동작하는 프로그램을 수정하고 뚜렷한 이유 없이 간헐적으로 지연되는 프로그램을 수정한다.
◆ 기대치와 성능 데이터의 차이가 발생하는 이유를 확인한다.
◆ 과도한 실행과 느린 명령어의 실행, 자원 사용을 대기하고 소프트웨어 락 등으로 발생한 문제를 규명한다.
◈ 이 책의 대상 독자 ◈
프로그래밍 과제를 수행하며 설명된 소프트웨어 관찰 도구를 구현하고자 하는 독자에게 특히 권장되는 책이다.
이 책 전반에 걸쳐 현대의 복잡한 프로세서와 성능 향상 메커니즘에 관한 설명이 등장한다. 실수로 이런 메커니즘을 무력화한다면 더 큰 지연이 발생할 수 있다. 독자는 이 모든 것과 함께 컴퓨터 아키텍처와 마이크로 아키텍처에 대해 더 깊이 이해할 수 있을 것이다.
이 책은 소프트웨어 전문가와 수준 높은 학생을 위한 교과서다. 뿐만 아니라 컴퓨터 하드웨어 설계자, 운영체제 개발자, 시스템 아키텍처 IT 전문가, 실시간 시스템 설계자 및 게임 개발자가 관심을 가질 만한 내용도 다룬다. 사용자가 직면한 대기 시간에 집중해서 모든 프로그래머의 경력을 향상할 수 있는 기술을 얻게 될 것이다.
◈ 옮긴이의 말 ◈
소프트웨어 엔지니어라면 누구나 한 번쯤 내가 작성한 소프트웨어 성능을 의심하고 고민하며 밤을 지새워 본 적이 있을 것입니다. 고도화된 프레임워크와 수많은 오픈소스를 활용하며, 사용자 다수가 이용하는 소프트웨어를 개발하는 엔지니어에게는 더욱 민감한 문제가 아닐 수 없을 것입니다. 역자의 짧은 경력 안에서도 소프트웨어를 개발하면서 안개가 낀 듯 관측하기 어렵고, 원인을 집어내기 까다로운 성능 문제들을 만나 두려움에 가슴이 뛰었던 날을 기억합니다. 모순적이게도 원인을 관측하기 어렵고 해결법이 모호해 나아가기 힘든 상황일수록 오히려 자연히 해소되는 천운은 더욱 피하고 싶었습니다.
저자는 우리가 피하고 싶은 이 안개가 걷히는 방법을 책 속에서 제시합니다. 소프트웨어 성능에 영향을 주는 4가지 근본이 되는 하드웨어 자원을 설명하고 이들의 상호작용의 이해와 구조적인 분석을 통해 성능의 병목을 가시적으로 확인하는 방법과 더불어 해결법을 서술합니다. 그뿐만 아니라, 다양한 커널 도구들과 함께 KUtrace를 활용해 잠재적인 문제를 찾아내는 방법도 독자에게 제공합니다.
이 책은 저자가 하드웨어와 소프트웨어의 상호작용을 이해하며 성능을 개선하기 위해 보내온 수많은 세월의 결과를 집대성한 책이기도 합니다. 추상적인 개념만을 소개하는 것이 아닌, 구체적인 사례를 제시함으로써 독자들은 이 글을 통해 저자의 경험에 공감하며 행간에 담긴 내용을 이해할 수 있을 것입니다.
이 책을 한국어로 옮기는 과정 자체만으로도 짧은 제 경력에 큰 영향을 주는 값진 경험이 됐습니다. 안개가 낀 듯한 제 소프트웨어는 현재도 다름이 없겠지만, 그 안개 속을 나아가는 방법을 알게 됐고, 뿌연 상황 속에서 어떤 곳에 초점을 맞춰야 할지 생각할 수 있는 힘을 얻게 됐습니다. "A man should look for what is, and not for what he thinks should be(존재할 것이라고 믿는 것이 아니라 찾아내야 한다)."라고 저자가 책 속에 인용했던 알베르트 아인슈타인의 말처럼 흔적을 남기고 그 흔적을 통해 원인을 찾아 개선해내는 유능한 엔지니어가 가는 길을 이 경험과 함께 좇고자 합니다.