Da origem do time-sharing ao seu VPS
Entenda como CTSS, Multics, Unix, IBM VM/370, Xen e KVM deram origem ao VPS atual e por que isolamento, CPU e faturamento por hora continuam iguais.
De onde vem o seu VPS
A história da computação, do mainframe à cloud, é a história de uma ideia que ficou mais barata. Essa ideia é o time-sharing: permitir que várias pessoas utilizem a mesma máquina dispendiosa ao mesmo tempo e dar a cada uma delas uma visão privada dessa máquina. Foi inventado por volta de 1960 porque um computador custava mais do que as pessoas que o utilizavam. Todos os componentes do VPS que aluga atualmente foram desenvolvidos para resolver esse problema: o isolamento entre utilizadores, o escalonador que distribui o tempo de CPU, o hypervisor e a faturação que contabiliza as horas. O problema nunca desapareceu. O hardware ficou barato, por isso uma fatia que antes exigia um financiamento de investigação custa agora alguns dólares por mês.
1959 a 1961: por que o time-sharing foi inventado
Um computador dos anos 1950 funcionava em processamento em lote. O utilizador perfurava o programa em cartões, entregava o conjunto a um operador e voltava mais tarde para recolher a impressão. Um único carácter introduzido incorretamente podia custar um dia. A máquina permanecia ocupada, que era o objetivo, porque uma máquina como o IBM 7090 custava milhões de dólares e o tempo das pessoas que esperavam por ela não aparecia em nenhuma fatura.
Em janeiro de 1959, John McCarthy apresentou o argumento oposto num memorando no MIT. A máquina devia esperar pela pessoa. Christopher Strachey descreveu uma forma de time-sharing numa conferência da UNESCO no mesmo ano, embora se referisse a um programador a depurar enquanto outros trabalhos eram executados, e não a várias pessoas a escreverem ao mesmo tempo. Ao discursar no centenário do MIT, em 1961, McCarthy foi mais longe: a computação podia ser vendida como um serviço público, medida como a eletricidade.
A objeção na época era que o time-sharing desperdiçava a máquina. Alternar entre utilizadores consumia ciclos, e os ciclos eram o recurso caro. A objeção estava correta, mas deixou de ser relevante, porque o preço de um ciclo caiu durante sessenta anos, enquanto o preço de uma hora de atenção humana não diminuiu.
O que o CTSS teve de inventar
O grupo de Fernando Corbató no MIT Computation Center criou o Compatible Time-Sharing System (CTSS) para resolver a discussão. O sistema foi demonstrado pela primeira vez em novembro de 1961 num IBM 709, servindo quatro utilizadores e transferindo o trabalho de cada utilizador para a sua própria unidade de fita magnética. “Compatible” significava que a máquina ainda podia executar o antigo sistema de processamento em lote, porque ninguém compra um computador que só faz a coisa nova.
Quatro utilizadores é um número pequeno. A lista de problemas que tiveram de ser resolvidos para chegar a esse número não é pequena, e é a mesma lista que o seu kernel processa neste momento. O CTSS precisava de um escalonador, para que um trabalho longo não bloqueasse todos os outros terminais. Precisava de proteção de memória, para que um programa em falha afetasse apenas um utilizador, e não todo o sistema. Precisava de armazenamento que sobrevivesse ao logout, razão pela qual o CTSS tinha um dos primeiros sistemas de ficheiros que um utilizador moderno reconheceria. E precisava de palavras-passe, para que um utilizador não pudesse ler os ficheiros de outro.
Renomeie essas partes e terá uma máquina Linux. O escalonador é o EEVDF, que substituiu o CFS no Linux 6.6. A proteção de memória é fornecida pela MMU (memory management unit), que atribui a cada processo o seu próprio espaço de endereçamento virtual. O armazenamento que sobrevive ao logout é o seu diretório pessoal. O ficheiro de palavras-passe ainda se chama /etc/passwd.
Multics e o serviço informático
O sistema seguinte do MIT pretendia ser o serviço informático descrito por McCarthy. O Project MAC começou em 1963, assinou a aquisição de um General Electric GE-645 em agosto de 1964 e publicou os primeiros artigos sobre o Multics em 1965. O nome resume o conceito: Multiplexed Information and Computing Service. Serviço no sentido de algo que se compra à hora.
O Multics demorou muito mais do que o previsto. As máquinas GE-645 de protótipo chegaram ao MIT e aos Bell Labs em janeiro de 1967. Os Bell Labs abandonaram o projeto em abril de 1969. O Multics foi disponibilizado aos clientes do MIT Information Processing Center em 1 de outubro de 1969 e, posteriormente, esteve em produção durante trinta e um anos. O último sistema Multics ativo, no Canadian Department of National Defence em Halifax, Nova Escócia, foi desligado em 30 de outubro de 2000.
O Multics é frequentemente classificado como um fracasso porque chegou tarde e funcionava lentamente. A terminologia mostra o contrário. O sistema introduziu o sistema de ficheiros hierárquico, com diretórios dentro de diretórios, uma lista de controlo de acesso em cada ficheiro, memória virtual segmentada que permitia a um programa endereçar um ficheiro como se fosse memória e anéis de proteção que classificavam o código de acordo com o nível de confiança. Os anéis continuam no silício à sua frente. O anel 0 para o kernel e o anel 3 para o código de utilizador são terminologia do Multics. Mais tarde, a virtualização por hardware acrescentou um modo abaixo do anel 0 para o hypervisor, que é informalmente chamado anel -1.
Unix: tempo compartilhado numa máquina que podia comprar
Ao deixar o Multics, Ken Thompson ficou na Bell Labs sem um sistema que quisesse usar. Em 1969, começou um sistema muito mais pequeno num PDP-7 descartado. O primeiro Unix Programmer's Manual tem a data de novembro de 1971. Nessa altura, o trabalho já tinha sido transferido para um PDP-11. Em 1973, Thompson e Dennis Ritchie reescreveram o kernel em C. Assim, o sistema podia ser transferido para novo hardware sem ser reescrito manualmente.
É por isso que escreve num descendente do Unix, e não num descendente do Multics. O Multics precisava de hardware construído para o Multics. O Unix funcionava no hardware barato e disponível. Essa acabou por ser a característica decisiva.
"The UNIX Time-Sharing System", de Ritchie e Thompson, foi publicado na Communications of the ACM em julho de 1974. O artigo descreve o seu VPS: processos, um sistema de ficheiros hierárquico, ficheiros como fluxos simples de bytes, fork, utilizadores e grupos com bits de permissões, e uma shell que é um programa normal, e não parte do kernel. Cinquenta e dois anos depois, essa interface foi ampliada, mas nunca substituída.
Os mainframes realmente executavam máquinas virtuais em 1972?
Sim, e esta é a parte da história que a maioria das pessoas não conhece. Enquanto o MIT desenvolvia o Multics, o Cambridge Scientific Center da IBM abordava o mesmo objetivo pelo lado oposto. Em vez de um sistema operativo servir muitos utilizadores, Robert Creasy e Les Comeau desenvolveram um programa de controlo que fornecia a cada utilizador um computador simulado completo. O CP-40 entrou em produção em janeiro de 1967. Cada utilizador recebia um System/360 virtual e executava dentro dele um pequeno sistema operativo de utilizador único, o CMS.
O CP-40 tornou-se o CP-67 no System/360-67 em 1968, e a IBM anunciou o VM/370 em 2 de agosto de 1972. Tratava-se de um hypervisor comercial, vendido a clientes pagantes, há cinquenta e quatro anos. Um programa de controlo multiplexava o hardware real, e os sistemas operativos convidados eram executados sem modificações dentro de máquinas virtuais que acreditavam ser proprietárias da máquina.
A teoria surgiu dois anos depois, no mesmo número de julho de 1974 da Communications of the ACM que publicou o artigo sobre Unix. O artigo "Formal Requirements for Virtualizable Third Generation Architectures", de Gerald Popek e Robert Goldberg, estabeleceu o que um processador tem de fazer para ser virtualizável. A regra principal é simples. Todas as instruções que possam ler ou alterar o estado da máquina têm de gerar uma exceção quando um convidado as executa fora do modo kernel, para que o hypervisor assuma o controlo e responda com a versão privada desse estado pertencente ao convidado. Isto chama-se trap and emulate. O hardware da IBM cumpria esta regra.
Por que o minicomputador rompeu o modelo
A DEC lançou o PDP-8 em 22 de março de 1965, por cerca de $18,000 em dólares de 1965. Foi o primeiro minicomputador com preço inferior a $20,000 e acabou por vender mais de 50,000 unidades. O microprocessador reduziu novamente o preço. Quando um departamento passou a poder comprar a sua própria máquina e, mais tarde, quando isso se tornou possível para uma pessoa, partilhar um computador central pareceu um problema resolvido que já não precisava de ser resolvido. Durante as décadas de 1980 e 1990, a computação passou para a secretária e para racks com pequenos servidores x86.
O desperdício regressou sob uma forma diferente. Ter uma aplicação por servidor é simples de compreender, mas deixa a maior parte do hardware inativa, enquanto a energia e o espaço no rack são pagos na totalidade. É novamente o problema do CTSS, agora a outra escala. O recurso dispendioso passou a ser a sala e a eletricidade, e não o processador. A resposta era a antiga resposta: partilhar a máquina.
Por que era tão difícil virtualizar x86?
Porque x86 violava a regra de Popek e Goldberg. No 9º USENIX Security Symposium, em agosto de 2000, John Scott Robin e Cynthia Irvine analisaram o conjunto de instruções do Pentium e encontraram 17 instruções que liam ou alteravam o estado privilegiado sem gerar uma exceção quando executadas por código em modo de utilizador. popf é o exemplo padrão. Execute-a em modo de utilizador e o processador ignora silenciosamente os bits que o programa não tem autorização para definir, em vez de gerar uma exceção. Assim, um hypervisor baseado em trap and emulate nunca fica a saber que o guest tentou executar a instrução.
Surgiram duas soluções antes de o hardware ser corrigido. A VMware, fundada em 1998 a partir da investigação Disco de Stanford, inspecionava o código do kernel do guest e reescrevia as instruções problemáticas antes de serem executadas. Esta técnica chama-se binary translation. O Xen, do Computer Laboratory da University of Cambridge, alterava o guest. O artigo "Xen and the Art of Virtualization", apresentado no SOSP em outubro de 2003, descrevia a paravirtualisation: um kernel de guest modificado chama o hypervisor deliberadamente, em vez de executar instruções que o hypervisor não consegue intercetar.
Depois, o hardware foi corrigido, tal como a IBM o tinha corrigido na década de 1960. A Intel lançou o VT-x em dois modelos Pentium 4 em 14 de novembro de 2005, e a AMD lançou o AMD-V em maio de 2006. Ambos acrescentam um modo do processador abaixo do modo do kernel do guest. Assim, o guest executa o seu próprio kernel à velocidade normal, enquanto o hypervisor mantém o controlo dos eventos que deve intercetar. Isto tornou possível um hypervisor suficientemente pequeno para funcionar dentro de um sistema operativo comum. Avi Kivity fez exatamente isso com o KVM na Qumranet: transformou o próprio kernel Linux no hypervisor. O KVM foi integrado no Linux 2.6.20, lançado em fevereiro de 2007, e continua a ser utilizado atualmente por uma grande parte dos hosts de VPS.
Como o VPS recebeu esse nome
Duas linhas convergiram no início dos anos 2000. Uma era a máquina virtual completa em x86, com um sistema convidado a arrancar o seu próprio kernel. A outra era a virtualização ao nível do sistema operativo: um único kernel Linux partilhado, dividido em ambientes separados, cada um com o seu próprio utilizador root e a sua própria tabela de processos. Linux-VServer e Virtuozzo da SWsoft surgiram em 2001, e a SWsoft lançou parte do Virtuozzo como o OpenVZ de código aberto em 2005. A expressão "servidor privado virtual" vem desse ramo, formada por analogia com rede privada virtual.
A Amazon transformou o aluguer numa chamada de API. O S3 foi lançado em 14 March 2006, e o EC2 abriu como beta público limitado em 25 August 2006 com um único tipo de instância, executado no Xen. A compra de capacidade computacional deixou de ser um contrato com um prestador de serviços e passou a ser um pedido que devolve resultados num minuto.
As duas linhas continuam a existir, e essa divisão ainda determina o que pode fazer com o servidor que aluga. Um VPS KVM arranca o seu próprio kernel, por isso pode carregar módulos do kernel e até executar um hypervisor dentro do seu VPS. Um plano baseado em contentores partilha o kernel do host e não pode fazê-lo. Sessenta anos de história estão por trás dessa única linha numa página de preços. Por isso, é importante compreender as diferenças entre um VPS, uma VM e uma VPC antes de escolher.
O que mudou do mainframe para o seu VPS e o que não mudou
Quatro coisas mudaram. A máquina não está no seu edifício. O terminal é um programa, não uma peça de mobiliário. A unidade que aluga é um computador completo com o seu próprio kernel, e não uma conta no sistema operativo de outra pessoa. E o preço baixou o suficiente para que a compra seja um pagamento com cartão, e não um processo de aquisição.
O mecanismo não mudou de todo.
- A sua sessão ssh é um terminal de time-sharing. Obtém um login e uma shell, e um scheduler decide quando o seu processo volta a executar.
- O isolamento continua a ser imposto pelo hardware. A MMU e os níveis de privilégio do processador fazem o trabalho, exatamente como era necessário para o CP-40 em 1967.
- Continua a pagar por uma parte de uma máquina com base no tempo decorrido, tal como os service bureaus faturavam as horas de ligação.
- Continua a sentir os outros tenants. Quando um host está sobrecarregado, o seu guest espera por uma CPU física, e o Linux regista essa espera como tempo de CPU roubado por um vizinho ruidoso.
Este último ponto é o resumo honesto de toda a história. Partilhar uma máquina é uma troca. Foi aceite em 1961 porque o computador custava mais do que as pessoas, e é aceite em 2026 porque um servidor a funcionar a dez por cento da sua capacidade representa dinheiro desperdiçado. Se preferir estar do lado do operador nessa troca, executar o Proxmox em hardware que possui dá-lhe o hypervisor e os problemas do operador em conjunto.
Tenha esta proporção em mente. O CTSS servia quatro utilizadores numa máquina que custava milhões de dólares de 1961 e ocupava uma sala. O seu VPS, por alguns dólares por mês em 2026, é um computador muito melhor do que aquele que a equipa de Corbató tinha de racionar, e está disponível apenas para si. A razão pela qual pode alugá-lo é uma ideia com sessenta e cinco anos que finalmente encontrou hardware barato. Se está a decidir o que instalar nele, comece por o que um VPS realmente lhe fornece e depois veja o que as pessoas executam num VPS.
FAQ
Qual foi o primeiro sistema informático de time-sharing?
O CTSS, Compatible Time-Sharing System, foi desenvolvido pelo grupo de Fernando Corbató no MIT Computation Center. Foi demonstrado pela primeira vez em novembro de 1961 num IBM 709 e atendia quatro utilizadores, cada um com o seu processo transferido para uma unidade de fita separada. O primeiro serviço de time-sharing destinado a uma comunidade inteira foi o Dartmouth Time-Sharing System: em 1 de maio de 1964, John Kemeny e um programador estudante executaram programas BASIC ao mesmo tempo em dois terminais, e ambos receberam respostas corretas.
As máquinas virtuais foram realmente inventadas na década de 1960?
Sim. O IBM Cambridge Scientific Center colocou o CP-40 em produção em janeiro de 1967, dando a cada utilizador um System/360 virtual completo, com o sistema operativo CMS a ser executado no seu interior. O CP-67 surgiu em 1968 no System/360-67, e a IBM anunciou o VM/370 em 2 de agosto de 1972. Eram hipervisores reais que executavam sistemas operativos convidados sem modificações e eram vendidos comercialmente, décadas antes de o hardware x86 conseguir fazer o mesmo.
Por que era difícil virtualizar x86 quando os mainframes não tinham esse problema?
A regra de Popek e Goldberg, de 1974, estabelece que todas as instruções que podem ler ou alterar o estado da máquina têm de gerar uma trap quando um convidado as executa fora do modo kernel. O x86 violava essa regra. Robin e Irvine identificaram dezassete instruções do Pentium que falham silenciosamente no modo de utilizador em vez de gerar uma trap. Por isso, um hipervisor clássico baseado em trap-and-emulate nunca as deteta, e popf é o exemplo habitual. O VMware contornou o problema com tradução binária, e o Xen com paravirtualização, até que o Intel VT-x, em novembro de 2005, e o AMD-V, em maio de 2006, acrescentaram um modo de hardware para o hipervisor.
Alugar um VPS é o mesmo que ter uma conta de time-sharing?
O modelo de faturação e o problema do isolamento são os mesmos. A unidade é diferente. Num sistema de time-sharing, o utilizador tinha uma conta num sistema operativo partilhado com todos os outros, pelo que o administrador era alguém do centro informático. Um VPS KVM fornece uma máquina virtual com o seu próprio kernel e a sua própria conta root, pelo que o administrador é o próprio utilizador. Um VPS baseado em contentores fica entre os dois, porque partilha o kernel do host, mas continua a fornecer root dentro do seu próprio ambiente.