디스크 최적화 - 배경과 Windows 7 개발 개선

 

 

여러분이 잘 알고 있는 주제의 하나는 ( 100개 이상의 전자 메일을 받았습니다!) Windows 7 의 디스크 최적화 유틸리티를 개선입니다. 저희는 개선을 위해 많은 노력을 했습니다. 또, 블로그 커뮤니케이션에서 여러분의 지적에서 몇 가지를 이해했습니다. 그것은 훌륭한 일입니다. 이것은 생각만큼 간단한 일은 아닙니다. 우리는 최적화에 오랜 역사가 있다는 것을 알고 있습니다. 그리고 「훨씬 이전에는」그것이 대부분의 사용자에서 얼마나 중요한 성능 문제점이었는지 그리고, 한층 더 큰 미스터리였는지 알고 있습니다. 컴퓨터 동작이 늦은 경우에 특수한 최적화 프로세스를 거치지 않으면 안 된다는 것이 널리 알려지게 되었습니다. Windows Vista에서는 사용자 여러분에게 불필요한 염려를 주지 않기, 프로세스를 자동 조종하에 두는 것을 결정했습니다. 실제로, 이것은 구현되었지만, 적어도 프로세스의 자동 실행이라는 제한이 있습니다 (즉, 매일 저녁 컴퓨터의 전원이 꺼지면, 동작하지 않습니다).실행중의 최적화 상태에 대해 보다 많은 정보를 원하는 지식이 풍부한 분들로 부터 많은 피드백을 받았습니다. 또, 프로세스 관리 전체에 관해, 보다 많은 유연성을 원하는 분들로 부터 피드백을 받았습니다. 이 글에서는 그 피드백에 근거하여 변경된 세부 사항을 설명합니다. 또, 주신 메일과 댓글을 읽으면서 프로세스, 성능 향상의 인식과 현실, 그리고 특정 향상점에 관해서 보다 자세하게 아는 것은 가치가 있는 것이라고 생각했습니다. 이 글은 우리 파일시스템 기능 팀의 프로그램 관리자인 Rajeev Nagar 과 Matt Garson이 쓴 글입니다. --Steven

이 블로그에서는 Windows 7 의 디스크 최적화에 초점을 맞췄습니다. Windows 7 에서 변화된 점을 설명하기 전에 조각화란 무엇인가 그리고, 그 적용에 대해 간단하게 설명하겠습니다.

하드 디스크와 CPU 사이의 하드웨어 파이프라인을 포함한 저장소 및 메모리 계층 내에서는 하드 디스크는 동작이 늦고, 대기시간이 길어집니다. 하드 디스크간의 읽기/쓰기 시간은 밀리초 단위로 측정됩니다 (일반적으로 2~5ms). 이것은 데이터가 프로세서의 L1 메모리 캐쉬에 보관되면 (평균) 10 나노초 미만으로 데이터를 계산할 수 있는 2 GHz CPU 와 비교하면 매우 빠릅니다.

이 성능 차이가 증가하는 것은 과거 20 년간에 한정됩니다. 아래와 같은 그림은 주목해 주세요.

Graph of Historical Trends of CPU and IOPS Performance

 

Chart of Performance Improvements of Various Technologies

요컨대, 이러한 그림은 디스크 용량은 증가하고 있지만, 데이터를 전송하거나 새로운 데이터를 쓰는 능력은 같은 비율로 증가하지 않는다는 것을 보여줍니다. 따라서, 디스크는 보다 많은 데이터를 입수 할 수 있도록, 읽고 쓰는데 보다 많은 시간이 소요합니다. 그 결과, 고속 CPU 는 데이터를 처리할 수 있을 때까지 기다리게 되고, 비교적 유휴 상태가 길어집니다.

컴퓨터 과학의 중요한 연구에서는 시스템 전체의 I/O 성능을 향상에 초점을 맞췄습니다. 그 결과, 다음 두가지 원칙을 세우고, 운영 체제는 이 원칙에 따르기로 했습니다.

  1. I/O동작을 적게하여, 즉  디스크의 읽기/쓰기 요청 회수를 최소화하도록 시도한다.
  2. I/O가 발행되는 경우, 가능한 다량의 데이터를 전송 한다, 즉 대량으로 읽고 쓰기 한다.

두 가지 규칙은 합리적으로 생각하면, 간단히 이해되는 다음과 같은 논리적 근거가 있습니다.

  1. I/O 가 CPU 에 의해서 발행될 때마다, 여러 소프트웨어 및 하드웨어의 구성요소가 요청을 만족하기 위해 처리해야 합니다. 이것은 대기시간 (즉, 요청이 만족 댈 때까지의 시간 길이) 증가에 기여합니다. 데이터를 읽을 때, 사용자는 대기시간에 자주 직면하여, 기대가 채워지지 않은 경우에는 사용자 불만이 증가됩니다.
  2. 기계 목표 부품의 움직임은 발생하는 대기시간에 본질적으로 기여합니다. 하드 디스크의 경우, 「회전 시간」(디스크헤드의 아래에 디스크의 적절한 부분이 오도록, 디스크 플래터가 회전하는데 필요로 하는 시간) 및 「검색 시간」(헤드를 위치 결정하여 대상 트럭을 읽기/쓰기 할 수 있도록 하기 위해서, 헤드가 이동하는데 필요로 하는 시간)이 큰 요인이 됩니다. 대량으로 읽고 쓰기하여, 발생한 비용이 줄어들어  많은 양의 데이터가 전송됩니다. 바꿔 말하면 「1개의 유닛 당」데이터 전송 비용이 감소합니다.

NTFS 등의 파일시스템은 위의 규칙을 지키기 위해  매우 신속히 동작합니다. 예로서 이글스 ( 지금까지로 가장 즐겨 찾는 밴드 중 하나)의 「호텔 캘리포니아」라는 노래를 들을 때를 생각해 봅니다. NTFS 볼륨에 5MB  파일을 처음 저장할 때, 파일시스템은 디스크 위에 5MB 데이터를 「요약」하여 배포 할 수 있도록 충분한 인접한 비어 있는 영역을 찾아내려고 합니다. 왜냐하면, 논리적으로 관련된 데이터 (예를 들면 같은 파일 또는 디렉터리 컨텐츠)는 거의 동시에 로드 하거나 써질 가능성이 높기 때문입니다. 예를 들어, 일반적으로 「호텔 캘리포니아」 노래의 일부 뿐만이 아니라 노래 전체를 재생합니다. 노래가 재생되는 3 분간에 파일 전체가 소비될 때까지, 컴퓨터는 디스크에서  「관련 컨텐츠」(즉 파일의 서브 부분) 부분을 가져옵니다. 데이터가 요약이라고 배포된 것을 확인하여, 시스템은 대량의 읽기 요청 (많은 경우, 곧 사용될 것이라고 하는 예상되는 읽기 전 데이터)을 발행하여, 하드 디스크드라이브 구성요소의 기계적인 움직임을 최소한으로 억제하여 발행되는 I/O 를 줄일 수도 있습니다.

파일시스템이 데이터를 인접시켜 배포하는 것을 시도한다면, 조각화는 언제 생길까요? 보관된 데이터로 변경을 하면 (예를 들면, 컨텐츠 추가 변경, 삭제), 디스크 위의 데이터 레이아웃에 변화가 생겨 조각화로 연결될 가능성이 있습니다. 예를 들어, 파일 삭제를 실시하면, 필연적으로, 영역 할당이 해제되어 결과적으로 매핑 영역에 「구멍」이 생깁니다. 이것이 우리가 「사용 가능한 비어 있는 영역의 조각화」라고 부르는 상태입니다. 시간이 지나면, 인접한 비어 있는 영역은 찾아내는 것이 곤란해져, 새롭게 보관된 컨텐츠의 조각화로 연결됩니다. 분명한 일이지만, 삭제가 조각화의 유일한 원인이 아닙니다. 전에 말한 것처럼, 컨텐츠 위치의 변경이나, 기존의 파일에의 데이터 추가 등의 다른 파일 조작에 의해서, 최종적으로 같은 상태가 될 가능성이 있습니다.

그렇다면, 최적화는 어떻게 도움이 되는 것입니까. 본질적으로 최적화란, 데이터를 여기저기로 이동하고, 한번 더 하드 디스크 위에 보다 최적으로 배포 하는 것으로, 아래와 같은 이점을 제공합니다.

  1. 조각화 된, 논리적으로 관련하는 어떤 컨텐츠라도 인접시켜 배포 할 수 있다
  2. 비어 있는 영역을 요약이라고, 디스크에의 새로운 컨텐츠 쓰기를 매우 효율적으로 실시할 수 있다

아래 밑그림은 지금 설명하고 있는 내용을 도식화한 것입니다. 첫번째 그림은 디스크의 이상적인 상태를 나타내고 있습니다. 3개 파일, A, B 및 C 가 있고 모두 인접한 장소에 보관됩니다. 즉, 조각화는 없습니다. 두번째 그림은 조각화된 디스크를 나타내고 있습니다. 파일 A 에 관련된 데이터의 일부는 현재 인접하지 않는 장소에 배포됩니다 (파일 증가 방법에 의해). 세번째의 그림은 일단, 디스크가 최적화되었을 경우, 디스크 위의 데이터가 어떻게 보이는지 보여줍니다.

 

Example of disk blocks being defragmented.

 

최신 파일시스템은 거의 모두, 최적화를 지원하고 있습니다. 차이점은 최적화의 메커니즘에 있습니다. 예를 들어, Windows 의 경우와 같이 개별 스케줄 가능한 작업인지 또는 그 메커니즘은 보다 암시적으로 관리되어 파일시스템 내부의 것인지 등입니다. 설계 결정 사항에는 단지, 시스템 및 필요한 절충의 특정의 설계목표가 반영됩니다. 또한 조각화가 생기지 않도록, 일반 파일시스템이 설계될 가능성은 별로 없습니다.

최근 몇년간 최적화가 매우 강조되어 왔습니다. 역사적으로, 조각화가 매우 큰 영향을 가져올 가능성이 있는 문제였기 때문입니다. 퍼스널 컴퓨팅의 초기의 시기에는 디스크 용량이 메가바이트로 측정 되어, 디스크는 곧바로 가득 차서 조각화도 빈번히 발생하고 있었습니다. 또한 메모리 캐쉬는 큰폭으로 제한되어 시스템응답 성은 더욱 더 디스크 I/O 성능에 근거하게 되었습니다. 이 결과, 일부의 사용자는 최적화 도구를 매주, 혹은 그 이상의 페이스로 실행하게 되었습니다! 현재, 매우 큰 디스크드라이브를 싸게 살 수 있지만, 평균적인 소비자-대상의 디스크 사용율 (%)은 보다 낮아져, 그 결과 비교적 조각화의 발생은 적게 됩니다. 또한 컴퓨터는 보다 많은 RAM 를 싸게 (많은 경우, 사용중의 데이터 집합을 액티브하게 캐시 하는데 충분한 수준으로) 이용할 수 있습니다. 거기에 추가하여, 파일시스템 매핑 방침이나 캐싱과 프리펫팅의 알고리즘을 개선하여, 전체적인 응답성을 향상시킬 수 있습니다. 따라서, CPU 와 디스크의 사이의 성능 차이가 계속 커져 조각화가 생기는 한편으로, 다른 영역에서 하드웨어와 소프트웨어가 일체화하여 진보되어 Windows 조각화의 영향 감소와 보다 좋은 응답성이 구현됩니다.
그렇다면, 우리는 현재의 소프트웨어 및 하드웨어를 사용하는 것을 전제로 했을 경우, 어떻게 조각화를 평가하면 좋은 것일까요. 첫번째 질문은 다음과 같이 될지도 모릅니다 : 「조각화는 실제 어느 정도의 빈도로 발생하고 어느 정도까지 생기는 것인가」. 조각화가 1% 의 500 GB의 데이터와 조각화가 50% 의 500GB 의 데이터에서는 같은 크기의 데이터에서 만나도, 큰폭으로 다르기 때문입니다. 두번째 질문은 「현재의 하드웨어 및 소프트웨어를 사용하는 것을 전제로 했을 경우, 조각화에 의한 실제의 성능 위의 패널티는 어떤 것이 됩니까」가 될지도 모릅니다. 여러분 중에서 꽤 다수의 사람이 과거 20년간에 걸쳐 도입된 다양한 제품을 생각날지도 모릅니다. 이것들은 당시 , 다양한 성능 향상 (예를 들면 RAM 최적화, 디스크 압축 등) 을 가져왔지만, 그 이후 그 대부분은 하드웨어와 소프트웨어의 진보에 의해 낡은 것이 되어 버렸습니다.

평균적인 가정용 컴퓨터의 조각화 발생율 및 범위는 사용 가능한 디스크 용량, 디스크 소비량 및 사용 패턴에 의해서 크게 바뀝니다. 바꿔 말하면, 일반적인 대답은 없습니다. 조각화에 의한 실제 성능에 대한 영향은 재미있는 질문이지만, 정확하게 측정하려면 너무나 복잡합니다. 조각화에 의한 성능 위의 패널티의 평가를 의미 있는 것으로 하려면 , 아래와 같이 요청 되겠지요.

  • 일반적으로 목표 또는 대표적인 방식으로 조각화를 생성 하는데 「오래된」시스템의 가용성. 그러나,  앞에서 말한 것처럼, 단일한 대표적인 방식은 없습니다. 예를 들어, 주로 웹 브라우징을 위해서 사용되는 컴퓨터의 조각화 빈도와 범위는 파일서버로서 사용되는 컴퓨터와 다릅니다.
  • 의미가 있는 디스크에 관련하는 지표 선택, 예를 들면, 부팅 및 첫 응용 프로그램을 실행한 후의 부팅.
  • 통계적으로 관련되어 있을 가능성이 있는 반복된 측정

조각화 범위를 사용자를 이해할 수 있는 성능과 직접 관련지을 때의 복잡함을 보여주는데 도움이 되는 예를 보고 갑시다.

Windows XP에서는 여러개의 조각에 분할된 파일은 모두, 조각화되어 보여집니다. Windows Vista에서는 조각(fragment)이 충분히 큰 경우, 조각화되어 있다고 보여지지 않습니다. 최적화 알고리즘이 64 MB 보다 큰 파일 조각을 무시하도록, (Windows XP에서) 변경되었기 때문에입니다. 그 결과, XP 최적화와 Vista 최적화에서는 동일 볼륨상의 조각화 양이 다르게 보고됩니다. 그렇다면, 어느 쪽이 맞는 것 일까요? 이 질문에 답하기 전에 우리는 Vista 에서 최적화가 변경된 이유를 이해해야 합니다. Vista 에서 우리는 최적화의 영향을 분석한 결과, 다음과 같은 것을 알게 되었습니다. 즉, 최적화에 의해서 가장 큰 성능 향상을 얻을 수 있는 것은 파일의 여러개 조각이 "충분히 큰 데이터 정리" 로 일체화했을 경우로, 디스크 검색 대기 시간의 영향은 연속된 파일을 읽기와 관련된 대기시간과 의미있는 관련은 없다고 판단했습니다. 이것은 임계점을 넘으면, 조각화된 여러개의 파일을 조합하는 것은 눈에 띄는 이점이 없어지는 것을 의미합니다. 실제, 그렇게 하여 부정적인 결과가 얻어지고 있습니다. 예를 들어, 최적화에 의해 64 MB 이상의 조각(fragment)를 조합하는 경우, 다량의 디스크 I/O 를 필요로 합니다. 이것은 위에서 설명한 I/O 를 최소화한다는 원칙에 반해 (사용자가 시작한 I/O 용으로 사용 가능한 합계의 디스크 대역폭이 줄이기 위해) 시스템에 대해서 비어 있는 영역이 큰 인접한 차단을 찾아낸다는 큰 압력을 가하게 됩니다. 여기에 특정 양의 데이터 조각화가 정확히 좋다는 시나리오가 있습니다. 즉, 이 조각화를 감소시키기 위해서는 아무것도 하지 않는 것이 올바른 방법이라고 판명되었습니다!

조각화의 양과 그 영향과 같은 비교적 이해하기 쉬운 개념은 실제로는 매우 복잡하고, 그 진짜 영향은 정확하게 대응해야 할 시스템 전체의 종합적인 평가를 요청하는 것에 주의해 주세요. Windows XP 와 Vista 가 다른 설계상의 결정 사항에는 사용자가 사용하는 일반적인 하드웨어와 소프트웨어 환경에 관한 이 평가가 반영됩니다. 마지막으로 최적화에서 시스템응답은 기존의 조각(fragment)의 단순한 수 이상으로, 고려해야 할것들이 많다는 것을 이해하는 것이 중요합니다.

Windows 7 의 최적화 엔진 및 경험은 시스템응답 성에 대한 영향의 연속 한 전체적인 분석에 근거해 개선 되었습니다.

Windows Vista에서는 우리는 세부 사항최적화 상태를 표시하는 UI 를 모두 삭제했습니다. 우리는 이 결정이 마음에 들지 않는다는 피드백을 받았습니다. 여기서, 우리는 다양한 절충에 대해 조사를 하여 평가하고, 최적화를 위한 새로운 GUI를 구축했습니다. 그 결과, Windows 7에서는 상태를 보다 용이하고 직관적으로 감시할 수 있습니다. 또한 최적화는 프로세스 내에서 언제라도, 모든 볼륨으로 (필요하면) 매우 간단하게, 안전하게 종료시킬 수 있습니다. 아래와 같은 스크린 샷은 감시의 용이함을 나타내고 있습니다.

 

New Windows 7 Defrag User Interface

 

New Windows 8 Defrag User Interface

 

Windows XP에서는 최적화는 사용자가 시작하는 (수동) 조작이 아니면 안됩니다. 즉, 그것을 스케줄 할 수 없었습니다 Windows Vista 는 최적화를 스케줄 하기 위해서 기능을 추가했습니다. 다만, 최적화할 수 있는 볼륨은 항상 1 만이었습니다. Windows 7에서는 이 제한을 없앴습니다. 현재는 여러 개의 볼륨을 병렬하여 최적화할 수 있습니다. 볼륨의 최적화가 완료할 때까지, 다른 볼륨상에서 같은 조작을 시작하기를 기다릴 필요가 없어졌습니다. 아래와 같은 스크린 샷은 여러개의 볼륨에 대해서, 어떻게 동시에 최적화를 스케줄 하는지를 보여줍니다.

 

Windows 7 Defrag Schedule

 

Windows 7 Defrag Disk Selection

그외 Windows 7에서 달라진 변경에는 아래와 같습니다.

  • Windows 7 의 최적화는 보다 포괄적입니다. Windows Vista 또는 이전 버전에서다시 배포할 수 없었던 많은 파일은 이제 최적으로 다시 배포 할 수 있습니다. 특히, 다양한 NTFS 메타데이터 파일을 이동 가능하게 하기 위해서, 많은 작업을 했습니다. NTFS 메타데이터 파일을 다시 배포 하는 이 기능은 볼륨의 축소를 촉진합니다. 왜냐하면, 시스템에 의해, 모든 파일과 파일시스템 메타데이터가 보다 긴밀히 압축되어 「마지막 부분」을 필요한 때에 다시 사용할 수 있습니다.
  • 반도체 미디어가 검색 되었을 경우, Windows 는 그 디스크에 대한 최적화를 무효로 합니다. 반도체 미디어는 그 물리적인 특성에 의해, 최적화를 할 필요 없고, 실제 특정 경우에서는 미디어 전체 수명동안 감소할 수 있습니다.
  • 기본값에서는 최적화는 Windows Server 2008 R2 (Windows 7 서버 출시)에서는 무효가 되어 있습니다. 서버 작업 부담량의 격차를 고려하면, 이러한 작업의 부담량을 파악하고 있는 관리자가 최적화를 유효하게 하기 위해 스케줄링 해야합니다.

Windows 7  최적화를 사용하는 방법은 간단입니다. 아무것도 할 필요는 없습니다! 최적화는 자동적으로, 정기적으로 백그라운드에서 실행되도록 스케줄하여,  전경 액티비티에 영향은 최소한으로 억제됩니다. 이것에 의해, 하드 디스크드라이브 위의 데이터가 효율적으로 배포 되어 시스템이 최적으로 반흥할 수 있도록 하였습니다.

Rajeev 와 Matt

Published Tuesday, February 17, 2009 1:09 AM by e7blog

Filed under: Storage