스왑하는 동안 Linux에서 데스크탑 응답 성을 향상시킵니다.


15

지금까지 테스트 한 모든 GNU / Linux 배포판은 램이 채워지고 시스템이 스와핑되기 시작할 때마다 때때로 데스크탑과 그래픽 사용자 인터페이스 전체가 지옥처럼 응답하지 않는 경우가 있습니다. 마우스 포인터가 실제로 움직일 때까지 물리적 마우스를 움직였습니다.

이것은 램이 적은 시스템에서 특히 성가신 행동입니다.

데스크톱 환경 등과 같은 일부 응용 프로그램 / 작업에 다른 응용 프로그램보다 램에 우선 순위를 두어 실제로 모든 메모리를 호핑하는 응용 프로그램이 데스크톱 환경 등 전에 스왑되도록 할 수있는 방법이 있습니까?

편집 : 전체 RAM을 사용하는 경우에 대해 이야기하고 있으므로 비활성화하지 않으면 항상 스왑을 시작합니다 (프로세스가 임의로 종료되는 것을 원하지 않습니다). 램 환경이 낮을뿐 아니라 데스크톱 시스템의 8GiB 램 (부분적으로 메모리 누수로 인해 많은 VM이 원인)에서이 문제가 발생했습니다. ZRAM은 문제를 지연시키기 때문에 해결책이 아닙니다. 내가이 문제에 대해 생각할 수있는 유일한 해결책은 특정 작업이 전혀 교환되지 않거나 최소한 가능성이 거의없는 사용자 공간 유틸리티 또는 커널 API입니다. 다른 솔루션을 알고 있거나 존재하거나 계획중인 도구 또는 API에 대해 아는 사람이 있습니까?

두 번째 편집 : https://aur.archlinux.org/packages/ulatencyd-git/https://wiki.archlinux.org/index.php/Ulatencyd 에 따르면 ulatencyd 는 최신 버전의 systemd에서 작동하지 않는 것 같습니다. . systemd가 올바르게 이해하면 사용자 공간 관점에서 cgroup을 완전히 제어하기 때문일 수 있습니다.


3
cgroups (메모리 cgroup을 활성화하고 스왑 계정을 활성화 한 경우 ( cgroup_enable=memory swapaccount=1커널 명령 줄에서), 약간의 성능 비용이 있음에 유의하십시오). 구현 예 : ulatencyd .
derobert

@derobert Great 이것은 내가 찾던 것과 정확히 똑같습니다. 시간이 되 자마자 이것으로 실험을 시작하겠습니다.
FSMaxB

훌륭하고, ulatencyd는 AUR 패키지도 가지고 있습니다. 아키 리눅스 사용자 인 것이 운이 좋다고 생각합니다.
FSMaxB


이 Q를 더 많이 투표 할 수 있다면 더 좋을 것입니다! 실제로 GUI에 알려주는 직접적인 방법이 없으며 RAM에 머물러야 할 주요 프로그램이 거의 없어서 반응을 유지합니까? 리눅스 사용자 에게이 옵션을 제공하는 최악의 시나리오는 무엇입니까? 컴퓨터 충돌? 그 전에 누구를하지 않았습니까? :) 때때로, 실수로 너무 많은 VM을 시작하여 (RAM 번호)를 올바르게 추가 할 수 없어서 다시 제어 할 수있게됩니다. GUI와 터미널에 RAM을 유지하라고하면 문제가 해결 될까요?! 누군가 대답하십시오!
Damon

답변:


1

내가 아는 한 이것은 Linux에만 해당되는 문제가 아니며 SWAP (또는 가상 메모리)가 작동하는 방식입니다. OS가 RAM이 아닌 하드 드라이브에서 데이터를 찾아야하는 경우 속도가 느려집니다. 디스크에 액세스하는 것이 RAM에 액세스하는 것보다 속도가 느립니다.

프로세스가 스왑되는 우선 순위를 설정할 수 없습니다. 즉 효율성을 최대화하려고 시도하는 커널에 의해 결정되므로 더 잘 할 수 없습니다. 당신이 일은 세트는 프로세스의 CPU 우선 순위와 그 힘의 도움이됩니다. SWAP에서 읽고 쓰는 데 걸리는 시간으로 인해 시스템의 성능이 저하되고 있습니다. 즉, CPU가 요청하기 전에 프로세스가 관련 데이터가 검색되기를 기다려야 계속할 수 있습니다. DE가 CPU 액세스의 우선 순위를 높게 설정하면 작업이 맨 위로 이동하고 속도가 약간 빨라집니다.

따라서 CPU 우선 순위는 nicerenice명령으로 설정됩니다 .

 Renice alters the scheduling priority of one or more running processes.
 The following who parameters are interpreted as process ID's, process
 group ID's, or user names.  Renice'ing a process group causes all pro‐
 cesses in the process group to have their scheduling priority altered.
 Renice'ing a user causes all processes owned by the user to have their
 scheduling priority altered.  By default, the processes to be affected
 are specified by their process ID's.

우선 순위는 -20 (가장 높은 우선 순위)에서 20 (가장 낮은 우선 순위)으로 이동합니다. 실행중인 프로세스의 우선 순위를 변경하려면 다음을 수행하십시오.

renice -15 $PID

우선 순위를 높이려는 프로세스 $PIDPID 는 어디에 있습니까 ? pgrep어느 것이 있는지 알아낼 수 있습니다 . 예를 들면 다음과 같습니다.

renice -15 $(pgrep gnome-session)

다른 옵션은 시스템의 설정하는 것 'swappiness' 이 스와핑 시작시기를 결정합니다. swappiness 값이 1이면 메모리 부족 오류를 방지하기 위해서만 스왑됩니다. 값이 클수록 여전히 사용 가능한 실제 메모리가있는 경우에도 스왑이 시작됩니다. 시스템 스왑을 가능한 한 적게하기 위해이 값을 상대적으로 낮은 값으로 설정할 수 있습니다. 이 줄을 /etc/sysctl.conf다음에 추가하십시오 .

vm.swappiness=1

주의 : RAM이 많지 않은 경우 스왑은 일반적으로 좋은 일입니다. 시스템에 적절한 균형을 찾으려면 약간의 값을 가지고 놀아야합니다.


당신이 말했듯이 이것은 커널 공간에서 해결할 수 있습니다. 즉, 리눅스에 매우 적합합니다. 전체 RAM을 사용할 때 시스템이 어쨌든 스와핑되므로 스왑을 변경해도 아무런 변화가 없습니다. 프로세스 우선 순위에 영향을 미치더라도 메모리 관리에 대한 내용은 변경되지 않지만 CPU 스케줄러 및 CPU 시간의 동작만으로 디스크 액세스 속도를 높이는 데 실제로 도움이되지는 않습니다.
FSMaxB

@FSMaxB CPU 우선 순위는 DE 우선 순위를 정하기 때문에 도움이 될 수 있습니다. DE 자체가 스왑중인 경우에는 도움이되지 않지만 CPU를 잡고있는 다른 것이 있으면 시스템 속도가 느려집니다.
terdon

DE가 얼마 동안 유휴 상태 일 때 필자의 경험에 따르면 메모리가 부족할 때 DE는 항상 교체됩니다.
FSMaxB

@FSMaxB 예, DE는 메모리 호그이므로 의미가 있습니다. 여전히 우선 순위를 높이는 것이 도움이 될 수 있습니다. 최소한 스케줄러가이를 보류하지는 않습니다.
terdon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.