quando acordado do hibernate, a coluna VIRT do comando top mostrará o espaço de troca usado pelo processo?

2
top - 10:43:31 up 8 days,  1:28,  4 users,  load average: 0.72, 0.57, 0.44
Tasks: 180 total,   1 running, 177 sleeping,   0 stopped,   2 zombie
%Cpu(s):  8.9 us,  2.1 sy,  0.0 ni, 88.9 id,  0.0 wa,  0.0 hi,  0.2 si,  0.0 st
KiB Mem:   8078124 total,  3815444 used,  4262680 free,   108300 buffers
KiB Swap:  9437180 total,  2448032 used,  6989148 free,   446248 cached

PID  USER      PR  NI  VIRT SWAP  RES CODE DATA  SHR S  %CPU %MEM    TIME+  COMMAND                      
3274 root      20   0  160m 4392 6808 2400  80m 1684 S  13.2  0.1 245:09.29 wicd                         
3451 root      20   0 79684 4900 2328 2400 6124  764 S   7.9  0.0 150:21.43 wicd-monitor                 
2804 messageb  20   0 30200  232  856  392  756  408 S   6.6  0.0 128:20.46 dbus-daemon                  
3856 cifer     20   0  411m 7524  28m 2400 150m 5904 S   1.3  0.4  20:34.23 wicd-client                  
4226 cifer     20   0 1499m 197m  52m  86m 1.0g 6504 S   1.3  0.7 227:24.62 chromium   
1087 cifer     20   0 1556m 458m 166m  86m 1.2g 9980 D   2.3  2.1   4:27.35 chromium 

como você pode ver, eu tenho 8G de memória física e usei apenas 3.8G, estou certo de que eu nunca ultrapassei os espaços de 8G, então acho que os espaços de troca de 2.4G usados são apenas por causa da hibernação

agora, no comando top, a coluna VIRT e SWAP mostra que todo processo usou o espaço de troca, eu adicionei toda a coluna SWAP do processo, parece um pouco menor que 2.4G.

Estou certo? O uso de swap é causado pela hibernação?

Eu tenho outra pergunta que as colunas VIRT DATA dos dois processos crromos parecem tão altas, isso é possível?

    
por cli__ 17.09.2013 / 05:04

3 respostas

0

Dê uma olhada na página de manual de top :

o: VIRT  --  Virtual Image (kb)
   The  total amount of virtual memory used by the task.  It includes all code, 
   data and shared libraries plus pages that have been swapped out. (Note: you 
   can define the STATSIZE=1 environment variable and the VIRT will be 
   calculated  from the /proc/#/state VmSize field.)

   VIRT = SWAP + RES.

p: SWAP  --  Swapped size (kb)
   The swapped out portion of a task's total virtual memory image.

Além disso, aqui está um comentário do Wiki ArchLinux, intitulado: Suspender e Hibernar .

trecho

  • Suspend to RAM method cuts power to most parts of the machine aside from the RAM, which is required to restore the machine's state. Because of the large power savings, it is advisable for laptops to automatically enter this mode when the computer is running on batteries and the lid is closed (or the user is inactive for some time).
  • Suspend to disk method saves the machine's state into swap space and completely powers off the machine. When the machine is powered on, the state is restored. Until then, there is zero power consumption.

Com base nesses comentários, presumo que sua lógica esteja correta. Eu geralmente nunca uso o hibernate e opto apenas por usar o método suspend to RAM, e assim eu nunca vi um pico em meu uso de swap, e isso faz sentido, dado o acima.

Exemplo

$ top
top - 23:40:12 up 15:33,  5 users,  load average: 2.49, 2.62, 2.70
Tasks: 307 total,   3 running, 304 sleeping,   0 stopped,   0 zombie
Cpu(s): 47.6%us,  4.6%sy,  0.0%ni, 47.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   7987492k total,  7528920k used,   458572k free,   161664k buffers
Swap:  5963772k total,    40156k used,  5923616k free,  1100816k cached
    
por 17.09.2013 / 05:40
0

Eu não penso assim. A hibernação não tem nada a ver com a troca do uso de swap como área para armazenar os dados - você pode até mesmo desabilitar o swap (desmontar todas as partições / arquivos de swap) e montá-lo novamente apenas quando o sistema estiver em hibernação (há uma pequena janela para uma condição de corrida, é claro).

Dito isso, acho que é muito mais provável que, em algum momento antes da hibernação, o kernel tenha decidido que seria mais sensato em termos de desempenho trocar algumas páginas de código de programas que não estavam em execução no momento (ou partes dele). aqueles que não foram usados recentemente) para disponibilizar alguma memória para dados (seja memória allocaetd através de malloc() , memmap() ou apenas caches para o sistema de arquivos). Isso depende dos seus padrões de uso e pode ser controlado, por ex. ajustando a tendência de trocar por /proc/sys/vm/swappiness .

    
por 17.09.2013 / 10:33
0

VIRT é o tamanho da memória virtual alocada pelo processo. Isso inclui tudo o que o processo está mapeando: páginas na RAM, em swap, compartilhadas com outros processos, arquivos mapeados na memória e mais alguns tipos.

A hibernação funciona escrevendo todos os dados do processo no espaço de troca. Dependendo do mecanismo de hibernação (o Linux passou por alguns), quando você retoma, alguns ou a maioria dos dados podem ser mantidos na troca. As páginas só são carregadas quando são necessárias, o que torna a retomada mais rápida.

Observe que a troca pode acontecer mesmo se seus processos não estiverem usando toda a RAM. A RAM não é apenas para memória de processo, é também para o cache de disco e buffers. Em um sistema típico em que a quantidade de RAM disponível é razoavelmente próxima do necessário para a carga de trabalho, cerca de metade da RAM deve ser usada por processos e metade por cache a qualquer momento. Aqui, você acabou de retomar, para que seu cache esteja quase vazio, ele será preenchido em breve.

    
por 18.09.2013 / 03:26

Tags