참고글
메모리 사용량이 크게 개선된 8.1 Update에 대해서 알아보자
http://www.ilbe.com/3452464207 본문
http://www.ilbe.com/3623366180 보충 : 5년정도 된 구형컴퓨터에 Windows 8.1 Update를 설치해봤다
알아두면 좋은 글
따끈따끈한 최신 운영체제를 써야하는 이유를 알아보자
http://www.ilbe.com/2625154624 본문
http://www.ilbe.com/2626718164 보충 : 구형과 신형 운영체제, 윈도 업데이트와 성능에 관하여
http://www.ilbe.com/2748863206 보충 : Disk I/O Speed로 알아보는 역대 윈도의 입출력 성능 (NT6.0~6.3)
닉값하는중이다. 이번에 설명할 원리의 실질적 효과에 대해서는 참고글에서 충분히 설명해뒀으니 그걸보면 되겠고 여기서는 원리설명만 한다.
이 원리들은 윈도8 계열 전부에서 지원하는 기능이고, 윈도8.1에서는 메모리 반환속도를 비롯해서 전반적인 수준이 더 향상됐다고 보면 된다.
메모리에 포커스를 맞추면서 그에 연관된 몇가지 개선사항에 대해서 알아보도록 하자.
1. 메모리 관리자 : 메모리 내용분석을 통한 효율적인 재분배
프로그램을 실행하면 프로그램은 자기한테 필요한 메모리를 OS에게 할당해달라고 요청한다. 그러면 OS는 메모리의 일정부분을 그 프로그램에게 할당해준다.
프로그램은 자신의 코드가 메모리에 복사될만한 칼같은 정확한 용량이 아니라 나중에 사용할 어느정도의 예비 여유공간도 포함해서 요청을 하게되는데
이것은 프로그램의 구동속도를 높이기위한 당연한 기법이지만 메모리의 낭비가 발생하게 된다. 여유롭게 할당받은 메모리중 상당부분이 그냥 놀게되는 것이다.
멀티태스킹을 하면서 서로 다른 프로그램들을 동시에 켜놓고 사용할텐데 그러면서 이러한 현상이 누적된다. 그리고 기존의 윈도는 이것을 그냥 방치했다.
하지만 윈도8부터는 메모리 관리자 수준에서 트릭을 사용한다. 프로그램 레벨에서의 차이점은 없고 이전과 동일하게 메모리를 요청하고 할당받아서 사용하는데
이때 할당받은 메모리를 메모리 관리자가 분석을 통해서, 프로그램이 실제적인 점유는 하지않고 놔두고 있다면 다시 회수해서 여유공간으로 편입시켜 두는것이다.
프로그램에서 이것을 감지할수는 없고 이전과 똑같이 동작하다가 메모리를 사용하려하면 메모리 관리자가 아무일도 없었던것처럼 유동적으로 다시 할당해준다.
성능하락이 있을것 같지만 '따끈따끈한 최신 운영체제를 써야하는 이유를 알아보자'를 보면 알겠지만 그런거 없고, 이것으로 수백MB를 절약할 수 있다.
2. 메모리 관리자 : 메모리할당 등급제 도입
설명에 앞서, 컴퓨터활용 가정을 해보자.
3D랜더링을 돌리는 중인데 백그라운드로 안티바이러스(백신)의 실시간감시가 켜져있고 웹하드에서 파일을 다운받으면서 동영상 플레이어로 UHD영상도 틀어놨다.
이전버전 메모리 관리자의 작업방식을 살펴보자.
메모리 관리자는 모든 작업에 대해 동일한 등급으로 메모리를 할당해준다. 3D랜더링도, 실시간감시도, 웹하드 다운로더도, 동영상 플레이어도 전부 똑같다.
이 와중에 3D랜더링 프로그램이 추가메모리를 갑자기 요청했는데 시스템 메모리가 부족하다 치자. 그러면 메모리 관리자는 메모리를 요청한 프로그램만 제외하고
나머지 모든 프로그램에 대해서 할당메모리를 삭감시키고 pagefile.sys(페이지파일)의 사용을 늘린다. 이렇게 만든 메모리 여유분을 요청한 프로그램에게 할당한다.
페이지파일의 개입으로 하드입출력이 늘어날거고 플레이어의 재생도 차질을 빚을 것이다. 실시간감시와 다운로더도 약간의 영향은 받겠지만 눈에 띄지는 않겠지.
윈도8 계열 메모리 관리자의 작업방식을 살펴보자.
메모리 관리자는 모든 할당요청에 대하여 '낮은순위'로 메모리를 할당해준다. 그리고 프로그램이 메모리를 지속적으로 사용하면 등급을 '보통순위'로 높여준다.
3D랜더링은 CPU와 메모리를 굉장히 갈구겠지. 그러면 할당받은 메모리는 등급이 '보통순위'로 상승할 것이다. 플레이어도 메모리를 자주 쓴다면 순위가 높아진다.
실시간감시는 다운받는 파일을 스캔할텐데, 메모리를 요청해서 일회성으로 사용하고 다시 쓰지는 않을거다. 마찬가지로 다운로더도 디스크에 주기적으로 접근할뿐
메모리를 자꾸 쓰지는 않을거다. 이처럼 사용량이 적으니 이런저런 이유로 공백메모리가 즉시 회수되지 못하더라도 메모리의 등급은 '낮은순위'를 벗어나지 못한다.
이 와중에 3D랜더링 프로그램이 추가메모리를 갑자기 요청했는데 시스템 메모리가 부족하다 치자. 메모리 관리자는 먼저 '낮은순위'등급의 메모리를 회수한다.
그리고 그것을 추가요청한 프로그램에게 할당해준다. 즉, 순간적으로 메모리가 삭감되도 진행에 차질이 없는 작업들을 선별해서 메모리관리에 차별을 두는것이다.
플레이어는 메모리를 뺏기지 않아서 재생이 원활할테고, 실시간감시와 다운로더는 일시적으로 메모리를 삭감당해도 작업수준이 미미해서 별 차이는 없을것이며,
3D랜더링 프로그램은 요청대로 메모리를 받아서 사용할 것이다. 따라서, 페이지파일의 개입을 최대한 줄여주며 시스템 반응속도가 이전보다 나아지는 효과가 있다.
물론 메모리가 아주 부족한 상황이라면 이전버전의 윈도처럼 공격적인 메모리 확보작업을 진행할 수밖에 없다. 이것은 메모리의 점유율 절감 보다는
효율적인 자원활용과 등급적용으로 작업수준의 정도를 메모리 관리자가 인지해서 능동적으로 대처하며 시스템 반응속도를 올려준다고 이해하면 된다.
3. 서비스 관리자 : 서비스의 능동적인 개입
운영체제는 '체제'를 운용하고 유지하기 위한 이런저런 서비스들을 가지고있다. 그리고 기존의 윈도는 서비스 항목 중 필수요소들은 항상 실행상태로 있어야 했다.
물론 윈도8 계열도 예외는 아니라서 필수서비스는 항상 켜져있어야 한다. 하지만 그중에서도 일부 항목들은 할일이 끝나면 별 필요가 없는 것들도 분명히 있다.
그래서 완전히 새로운 능동적인 개입방식을 적용했는데 그것이 '트리거모드'라는 것이다. 어떤 서비스가 필요없어지면 그것을 자동으로 실행을 중단시키는 거다.
이것은 하드웨어나 소프트웨어적인 시스템의 상황에 따라 유동적으로 달라지는거라 좋아지는 수치정도가 딱 찝어서 얼마라고 말할수는 없다. 다만 확실한 것은
이 방식을 적용하면 서비스를 다 켜두고 있는것에 비해 나빠지는건 없고, 정도의 차이는 있지만 여건에 따라 시스템의 여유리소스가 유동적으로 확보된다는 것이다.
비스타부터 8.1까지 직접 살펴보자. [참고] 전부 VMware에서 구동했으며 부팅직후에 캡쳐했고 서비스갯수에는 VMTool용 서비스가 한개 포함되어 있다.
Windows Vista SP2 / 6.0.6002.18005
서비스 수가 70개에 육박한다. 이래서 메모리를 많이 먹을수밖에 없었다.
Windows 7 SP1 / 6.1.7601.17514
최적화를 통해 60개 수준까지 줄였다.
비스타와 비교시 상당히 가벼워졌지만 온갖 서비스가 동시에 실행중이라는 근본적인 문제는 그대로다.
Windows 8 / 6.2.9200.16384
데스크탑과 메트로라는 독립된 레이어가 공존하면서 두 환경을 관리하는 서비스가 생기면서 서비스 수가 오히려 늘어났다.
'트리거 시작'이라는 문구가 생겼다. 저렇게 설정된 서비스는 요청이 있을때만 실행되고 역할이 끝나면 자동으로 종료된다.
가변적인 서비스 개입덕분에 윈도7보다 서비스 수는 늘었지만 무거워지지는 않았다.
Windows 8.1 Update / 6.3.9600.17031
메트로의 기능적 확장에 의해 이를 관리해주는 서비스가 추가되고
Windows Defender가 완전히 서비스 실행방식으로 변경되면서 수가 더 늘어났다.
오히려 비스타보다 많아졌지만 여전히 가변적으로 동작하므로 시스템 운영에 있어서 크게 부담을 주지는 않는다.
8.1 Update에서 메모리 관리자가 강력해지면서 서비스가 늘어난 것에 대한 부담을 상쇄시켜주고 있다. 그렇지 않았다면 서비스 수가 늘어난만큼 무거워졌겠지.
그리고 이런식으로 역할이 끝난 서비스들은 실행이 중단된다.
4. Desktop Window Manager(dwm.exe)의 랜더링 부하 감소
Windows 8로 넘어오면서 Aero가 삭제되었는데, 덕분에 GPU의 2D랜더링 부하가 감소되었다. 에어로 랜더링에 많은 파워가 필요한 것은 아니지만
윈도 데스크탑 환경에서 투명한 유리효과를 지원하기 위해 뒤에 가려진 창도 지속적으로 그려야 했었는데 모던UI로 변경하면서 투명기능을 없앴다.
DWM의 랜더링 기능에도 한가지 트릭을 적용했는데, 그것은 뒤로 숨은 창을 랜더링하지 않는 것이다. 눈에 직접적으로 보이는 창만 Refresh 해주는 것이다.
이번에 발표된 안드로이드L의 기능중 '배터리 세이버'라는 것이 있는데 화면랜더링을 줄여서 AP의 부담을 덜어주는 방법으로 에너지를 절감하는 트릭이 있다.
이와 유사한 기능이라고 보면 된다. 얼마 안되지만 지속적으로 소비되는 GPU의 2D랜더링 에너지를 줄이는 효과를 보인다. 메모리 절감효과는 약 25MB정도 된다.
3D랜더링할때 가려진 물체는 연산에서 제외해서 프레임을 상승시키는 트릭과 유사하며, 메모리절감 보다는 전력효율 상승에 초점이 있다고 할수있다.
요즘 감사인사를 안붙이는데, 할일하면서 이거까지 쓰느라 바쁘고 정신없어서 그러는거 같다.
항상 양질의 정보글을 쓰기위해 노력중이고, 이번 글은 여기까지다. 매번 읽어줘서 고맙다. 즐거운 주말 보내자.





