Por que os computadores demoram a voltar do hibernar?

22

A hibernação deve gravar o conteúdo da RAM no disco, e o retorno da hibernação deve preencher a RAM com o conteúdo salvo. Por que o retorno da hibernação é lento, por exemplo, o sistema não responde em geral por algum tempo?

Entradas
fonte
11
Você deve tentar um computador que use uma unidade de estado sólido (SSD), como um MacBook Pro. É quase instantâneo, na maioria das vezes.
Stewart
11
capturar um rastreamento de hibernação / currículo com xbootmgr e analisar o que é lento: msfn.org/board/index.php?showtopic=140247
magicandre1981
Eu uso hibernate no meu laptop de trabalho, mas para acelerá-lo eu fechar todos os meus aplicativos primeiro (usando um pequeno utilitário chamado CloseAll ntwind.com/software/utilities/close-all.html )
Morgan T.

Respostas:

19

A principal causa é a E / S do disco. Ler e gravar em um disco físico é muito mais lento que na RAM. Quando o computador sai do disco (hibernação), ele também precisa ligar os componentes, o que pode causar lentidão. Isso é altamente dependente do computador. Um SSD terá quase a mesma velocidade de currículo do disco que da RAM. Alguns computadores permitem que você mova o mouse antes que a ram seja completamente preenchida novamente, causando baixos tempos de resposta.

Nota: Suponha que você tenha 8 GB de RAM e um SSD com taxa de transferência de 400 MB / s. Ainda serão necessários 8 * 1024MB / 400MB / s = 20.48s. Esta não é a mesma velocidade que o resumo da RAM.

Supondo uma taxa de transferência de RAM de 15.000 MB / s, o tempo de retomada é de 0,55 segundos.

Wolfizen
fonte
5
Reading and writing to a physical disk is much slower than from RAM. Sim, mas a leitura é mais rápida que a escrita, então por que levaria muito mais tempo para ler o disco rígido do que para escrevê-lo?
Synetech
11
@Synetech é isso? Se você está apenas cronometrando a hibernação de pressionar a opção para que a tela apague (em oposição à interrupção da atividade da unidade), o sistema operacional provavelmente está apagando cedo, para que pareça que não parou. Se você estiver medindo o desligamento por tempo de IO, existem algumas possibilidades. Com um SDD, eu verificaria se o arquivo de paginação está fragmentado porque os SSDs são mais rápidos em gravações aleatórias do que em leituras aleatórias. Caso contrário, eu especularia que o dehibernate é mais lento devido a atrasos na reinicialização de alguns componentes de hardware que foram desligados, não devido ao desempenho de E / S.
Dan Neely
@ DanNeely, na verdade eu sei o que você quer dizer. Eu sempre me incomodei com o fato de, quando clico em Hibernate, a tela desliga rapidamente, mas a unidade em si ainda está se debatendo por algum tempo (geralmente um minuto ou dois mais). Isso é realmente irritante, porque você não pode simplesmente pegar um laptop e jogá-lo na bolsa, já que a unidade ainda está girando e se movendo, aumentando as chances de um acidente de cabeça (espera é melhor para um desligamento rápido). No entanto, eu também sei o que enthrops está dizendo; Às vezes, um currículo leva muito tempo (o Windows retoma rapidamente, mas o LED do disco rígido permanece aceso por um longo tempo).
Synetech
A @Synetech é outra razão para desejar que os SSDs sejam baratos o suficiente para serem universais.
Dan Neely
3

Enquanto a RAM é muito rápida, o disco rígido é exatamente o oposto. Imagine que você precise copiar o conteúdo da RAM, que pode ter cerca de 16 GB, do disco rígido. São 4 DVDs. Vejo?

KamikazeCZ
fonte
3

É uma troca. Colocamos tudo o que havia na RAM antes da hibernação de volta do disco para a RAM de uma só vez, ou apenas um pouco de cada vez, conforme necessário?

Todos sabemos que ler um setor a partir de um disco giratório leva praticamente a mesma quantidade de tempo que gravar esse setor no mesmo disco giratório - o tempo de busca + rotação. Portanto, podemos esperar que a gravação de informações da RAM no disco (no hibernate) leve o mesmo tempo que a leitura da mesma RAM do disco (retomar do hibernate). Mas isso não acontece assim, por causa da paginação por demanda.

Se o sistema operacional puxasse tudo de uma vez, o resumo do hibernado levaria dezenas de segundos, mas depois disso seria o mesmo que se você nunca tivesse hibernado.

Os programadores de SO normalmente escolhem a paginação por demanda . Em outras palavras, o sistema operacional extrai apenas um pouco de cada vez do disco, conforme necessário. Isso tem a vantagem de que o retorno do hibernate leva muito menos tempo antes de começar a responder ao teclado e aos cliques do mouse. Por outro lado, quando você usa algo pela primeira vez após a hibernação, há um pequeno mas perceptível atraso quando o sistema operacional finalmente consegue carregá-lo. Isso acontece mesmo quando "a primeira vez" que você usa algo pode demorar vários minutos após o hibernar. Portanto, depois de retomar a partir de um hibernar (ou seja, depois de ver uma tela que parece ser mais ou menos idêntica à tela logo antes do hibernar), trabalhar com a máquina pode parecer lento por um tempo.

Como apontou a Synetech, há um pouco de psicologia humana também envolvida: como a tela desliga imediatamente no início da hibernação, parece que ela desliga rapidamente. E o usuário pode continuar imediatamente com o que mais você deseja fazer. Mas, após um resumo da hibernação, o usuário está tentando fazer algo, e os pequenos atrasos são irritantes porque atrapalham o que o usuário está tentando fazer.

David Cary
fonte
2

Eu sei o que você quer dizer. De fato, parece que o LED do HDD pisca por um longo tempo após o retorno da hibernação.

Algumas explicações razoáveis ​​foram dadas sobre atrasos devido à inicialização do hardware (e aceleração do driver?) E fragmentação (você notará que um sistema recém-saído da fábrica geralmente hiberna e recomeça rapidamente, enquanto um que foi usado por algum tempo irá ser muito mais lento para fazê-lo). Há mais algumas explicações para esse comportamento.

Quando você hiberna, o Windows libera a RAM para a unidade. Apesar das altas velocidades de leitura de RAM e gravação em disco (mesmo com um arquivo de hibernação desfragmentado em uma unidade grande e vazia), ainda demora um pouco para escrever vários gigabytes (você notará que hibernando e reiniciando um sistema com pequenas quantidades de RAM é muito rápido). A tela apaga-se rapidamente, mas a unidade (e a placa-mãe, ventoinhas etc.) permanecem em funcionamento por um tempo até terminar de liberar a RAM para o disco. (Não jogue um laptop com um disco rígido até que ele termine e desligue completamente a unidade).

Você pode fazer alguns testes experimentais para medir o tempo que leva para clicar em Hibernate até que o sistema seja desligado e o tempo que leva desde o momento em que você vê a tela Reiniciando o Windows até o LED do HDD parar de piscar. Eles provavelmente serão aproximadamente iguais. (O Windows tenta fazer com que pareça retomar a hibernação muito rápido escrevendo e depois lendo o kernel e outras coisas no arquivo de hibernação primeiro, para que possa voltar a funcionar imediatamente e continuar a carregar o restante no diretório segundo plano e conforme necessário até que tudo tenha sido retomado - você pode ver esse comportamento em ação porque a tela de login é mostrada muito rapidamente.)

Por que, então, parece que a retomada leva mais tempo? Há duas explicações para isso.

  1. É psicológico . Como Dan apontou, porque a tela desliga imediatamente quando você hiberna, parece que ela desliga rapidamente, enquanto você vê todo o processo de retomada (tela de abertura e LED do HDD piscando).

  2. É paginação. Como a maioria das pessoas usa o hibernate em vez de o desligamento porque deseja evitar a saída de programas, para que possam continuar de onde pararam, isso significa que, quando o Windows for reiniciado, já haverá vários programas em execução e já consumindo memória. Como uma quantidade significativa de tempo se passou desde a última vez em que o gerenciador de memória do Windows verificou o sistema, ele provavelmente acabará trocando várias memórias, pois, sob a perspectiva dele, alguns programas estão inativos por um tempo e outros tornar-se ativo. Essa troca, é claro, leva um tempo e agita a unidade por algum tempo.

O resultado final provavelmente é uma combinação de fatores e interações entre ativação de hardware, paginação, psicologia e fragmentação.

Se você estiver disposto a fazê-lo, poderá descobrir definitivamente (pelo menos no seu sistema) qual é o gargalo executando alguns testes simples, como o Process Monitor para observar a atividade da unidade / arquivo enquanto o Windows hiberna e continua para ver se tudo isso debulhar é devido ao acesso a hiberfil.sysou pagefile.sys.

Synetech
fonte
11
Eu gosto da abordagem psicológica. A hibernação em discos rígidos antigos simples é mal projetada de maneira UX ou nunca deveria ter existido.
smonff