{"id":21223,"date":"2026-09-01T08:32:24","date_gmt":"2026-09-01T06:32:24","guid":{"rendered":"https:\/\/webhosting.de\/ksm-linux-kernel-samepage-merging-virtualisierung-effizient-speichercloud\/"},"modified":"2026-09-01T08:32:24","modified_gmt":"2026-09-01T06:32:24","slug":"ksm-kernel-do-linux-fusao-de-paginas-iguais-virtualizacao-eficiencia-memoria-nuvem","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pt\/ksm-linux-kernel-samepage-merging-virtualisierung-effizient-speichercloud\/","title":{"rendered":"Kernel Samepage Merging: KSM para um melhor desempenho na virtualiza\u00e7\u00e3o"},"content":{"rendered":"<p><strong>Virtualiza\u00e7\u00e3o KSM<\/strong> reduz a necessidade f\u00edsica de RAM, uma vez que o kernel do Linux agrupa p\u00e1ginas de mem\u00f3ria id\u00eanticas entre m\u00e1quinas virtuais e as partilha de forma eficiente atrav\u00e9s do mecanismo \u00abCopy-on-Write\u00bb. Desta forma, aumento a densidade das m\u00e1quinas virtuais, atenuei os estrangulamentos de RAM e mantenho a <strong>Desempenho<\/strong> em equil\u00edbrio.<\/p>\n\n<h2>Pontos centrais<\/h2>\n<p>As seguintes ideias-chave ajudam-me a compreender rapidamente o KSM e a utiliz\u00e1-lo de forma espec\u00edfica:<\/p>\n<ul>\n  <li><strong>Desduplica\u00e7\u00e3o<\/strong> A elimina\u00e7\u00e3o de p\u00e1ginas de mem\u00f3ria id\u00eanticas reduz significativamente o consumo de RAM.<\/li>\n  <li><strong>Copy-on-Write<\/strong> mant\u00e9m as p\u00e1ginas leg\u00edveis em conjunto e s\u00f3 as separa quando s\u00e3o feitas altera\u00e7\u00f5es.<\/li>\n  <li><strong>Ajuste fino<\/strong> Os par\u00e2metros ksmd equilibram a carga da CPU e as poupan\u00e7as.<\/li>\n  <li><strong>Localiza\u00e7\u00e3o NUMA<\/strong> evita lat\u00eancias desnecess\u00e1rias em anfitri\u00f5es com v\u00e1rios soquetes.<\/li>\n  <li><strong>Seguran\u00e7a<\/strong> exige uma partilha seletiva em ambientes multi-tenant.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/rechenzentrum-ksm-7425.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>O que \u00e9 o KSM? Princ\u00edpios b\u00e1sicos e processo<\/h2>\n\n<p>Com <strong>Fus\u00e3o de p\u00e1ginas iguais do kernel<\/strong> A thread do kernel ksmd analisa regularmente p\u00e1ginas privadas an\u00f3nimas marcadas como \u201emergeable\u201c e agrupa conte\u00fados com bits id\u00eanticos. Beneficio do facto de, frequentemente, muitas m\u00e1quinas virtuais manterem na mem\u00f3ria bibliotecas, c\u00f3digos de programa ou componentes do sistema operativo id\u00eanticos. O KSM marca as p\u00e1ginas agrupadas como <strong>C\u00f3pia na escrita<\/strong>, o que faz com que todos os utilizadores leiam a mesma p\u00e1gina f\u00edsica at\u00e9 que um deles escreva. S\u00f3 quando ocorre um acesso de escrita \u00e9 que o kernel cria uma p\u00e1gina pr\u00f3pria para esse processo, enquanto a p\u00e1gina original continua a ser partilhada. Importante: o KSM n\u00e3o desduplica p\u00e1ginas do sistema de ficheiros nem do cache de p\u00e1ginas, e tenho de libertar explicitamente mem\u00f3ria para a fus\u00e3o.<\/p>\n\n<h2>Utiliza\u00e7\u00e3o em ambientes de virtualiza\u00e7\u00e3o<\/h2>\n\n<p>Em hosts com muitas m\u00e1quinas virtuais semelhantes, ocorre <strong>KSM<\/strong> tem o maior impacto, porque as p\u00e1ginas redundantes ocorrem com frequ\u00eancia. Em configura\u00e7\u00f5es KVM e na nuvem, a fus\u00e3o reduz significativamente a carga efetiva de RAM por convidado, aumentando assim a densidade de m\u00e1quinas virtuais por servidor. Relatos pr\u00e1ticos referem at\u00e9 300 % sistemas convidados adicionais com um ajuste adequado, sem perdas percet\u00edveis no tempo de resposta. Se eu combinar o KSM com <a href=\"https:\/\/webhosting.de\/pt\/excesso-de-ocupacao-de-memoria-virtualizacao-ram-optimus\/\">Compromisso excessivo de mem\u00f3ria<\/a>, consigo manter os servidores mais bem aproveitados e utilizar a mem\u00f3ria dispon\u00edvel de forma mais direcionada. Ao partilhar p\u00e1ginas id\u00eanticas, reduzo o risco de picos de swap e obtenho um funcionamento mais suave <strong>Curva de pot\u00eancia<\/strong> ao longo de v\u00e1rias inst\u00e2ncias.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/virtualisierungksm4523.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Configura\u00e7\u00e3o no Linux e no KVM<\/h2>\n\n<p>Eu ativo <strong>KSM<\/strong> atrav\u00e9s do CONFIG_KSM no kernel e controlo o comportamento via Sysfs em \/sys\/kernel\/mm\/ksm\/. A\u00ed, inicio a verifica\u00e7\u00e3o (run), defino a intensidade (pages_to_scan, sleep_millisecs) e observo os ganhos de p\u00e1ginas (pages_sharing). Nas distribui\u00e7\u00f5es empresariais, utilizo servi\u00e7os como o ksm e o ksmtuned, que aumentam ou reduzem automaticamente a intensidade com base em limiares de RAM livre. Para um controlo granular, marco \u00e1reas de mem\u00f3ria como \u00abmerge\u00e1veis\u00bb de forma espec\u00edfica com madvise(MADV_MERGEABLE) ou prctl(PR_SET_MEMORY_MERGE). Em ambientes din\u00e2micos, gosto de combinar o KSM com <a href=\"https:\/\/webhosting.de\/pt\/balao-de-memoria-do-servidor-virtualizacao-gestao-da-memoria-ram-dinamica\/\">Bal\u00e3o de mem\u00f3ria<\/a>para otimizar o <strong>Aloca\u00e7\u00e3o de RAM<\/strong> manter a flexibilidade.<\/p>\n\n<h2>Desempenho e afina\u00e7\u00e3o: o equil\u00edbrio certo<\/h2>\n\n<p>O ganho \u00e9 maior, sobretudo nos casos em que a RAM constitui o verdadeiro gargalo e os n\u00facleos da CPU ficariam sem ser utilizados \u2013 \u00e9 a\u00ed que se nota a diferen\u00e7a <strong>KSM<\/strong> o desempenho geral, porque tenho mais m\u00e1quinas virtuais a funcionar em paralelo. No entanto, o thread do ksmd consome tempo de CPU, pelo que par\u00e2metros de an\u00e1lise demasiado agressivos podem reduzir essas vantagens. Come\u00e7o de forma conservadora, me\u00e7o os valores de pages_sharing e pages_scanned e observo as lat\u00eancias sob carga, antes de aumentar a taxa de verifica\u00e7\u00e3o. Se houver RAM livre suficiente, mantenho o ksmd menos ativo e s\u00f3 aperto o cerco quando os hosts come\u00e7am a escassear. Assim, mantenho um bom equil\u00edbrio entre <strong>ganho de mem\u00f3ria<\/strong> e sobrecarga da CPU.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/ksvm-virtualization-performance-8273.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Seguran\u00e7a e isolamento numa perspetiva objetiva<\/h2>\n\n<p>Como v\u00e1rios h\u00f3spedes partilham um espa\u00e7o f\u00edsico, tenho em conta os potenciais <strong>Canais laterais<\/strong>, que poderiam extrair informa\u00e7\u00f5es atrav\u00e9s do tempo de execu\u00e7\u00e3o ou de padr\u00f5es de acesso. Em configura\u00e7\u00f5es multi-tenant sens\u00edveis, desativo seletivamente a partilha de p\u00e1ginas para determinadas inst\u00e2ncias ou anfitri\u00f5es. Por outro lado, para cargas de trabalho menos sens\u00edveis com muitos convidados semelhantes, o KSM \u00e9 um m\u00e9todo fi\u00e1vel para reduzir custos e aumentar a densidade. Documento a decis\u00e3o por cluster e mantenho uma lista de exce\u00e7\u00f5es para m\u00e1quinas virtuais particularmente cr\u00edticas. Desta forma, garanto <strong>Transpar\u00eancia<\/strong> e reduzir os pontos vulner\u00e1veis sem comprometer o ganho de efici\u00eancia.<\/p>\n\n<h2>NUMA, p\u00e1ginas enormes e intera\u00e7\u00e3o<\/h2>\n\n<p>Nos sistemas NUMA, presto aten\u00e7\u00e3o a <strong>Local de armazenamento<\/strong> e, idealmente, fa\u00e7o com que o KSM seja mesclado apenas dentro de um n\u00f3, para que os acessos n\u00e3o sejam encaminhados por percursos lentos. Isto reduz as lat\u00eancias e mant\u00e9m elevada a largura de banda por socket. Em combina\u00e7\u00e3o com as Huge Pages, reduzo as falhas de TLB, mas tenho de ter em conta que as p\u00e1ginas de grande dimens\u00e3o alteram as probabilidades de conte\u00fados com bits id\u00eanticos. Algumas cargas de trabalho beneficiam mais das Huge Pages, outras beneficiam mais da deduplica\u00e7\u00e3o; valido isso atrav\u00e9s de benchmarks. O objetivo continua a ser maximizar o acesso local e <strong>Mem\u00f3ria remota<\/strong> a evitar.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/ksm_virtualisierung_3485.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Compreender o acompanhamento e os indicadores-chave<\/h2>\n\n<p>Avalio o efeito de <strong>KSM<\/strong> com base em alguns indicadores, mas significativos: pages_sharing, pages_shared, pages_scanned, pages_unshared e full_scans. Se o pages_sharing aumentar de forma est\u00e1vel e a carga da CPU se mantiver moderada, significa que a minha configura\u00e7\u00e3o est\u00e1 a evoluir na dire\u00e7\u00e3o desejada. Se os valores permanecerem est\u00e1veis, verifico se os convidados marcam a mem\u00f3ria como \u00abmergeable\u00bb. Al\u00e9m disso, observo o Host-Swap, as lat\u00eancias das m\u00e1quinas virtuais e o IO-Wait, para detetar efeitos secund\u00e1rios atempadamente. Os pain\u00e9is com s\u00e9ries temporais mostram-me as tend\u00eancias, para que eu <strong>Ajustamentos<\/strong> tomo decis\u00f5es com base em dados.<\/p>\n\n<h2>Exemplos pr\u00e1ticos e potencial de poupan\u00e7a<\/h2>\n\n<p>Em clusters de teste com dezenas de m\u00e1quinas virtuais Linux semelhantes, pude constatar, gra\u00e7as a <strong>KSM<\/strong> em alguns casos, poupan\u00e7as de RAM na ordem das duas cifras em pontos percentuais e, consequentemente, uma densidade sensivelmente superior. As cargas de trabalho Java com muitas classes e bibliotecas id\u00eanticas proporcionaram ganhos particularmente consistentes. Quanto mais homog\u00e9neas forem as inst\u00e2ncias, maior ser\u00e1 a redu\u00e7\u00e3o da pegada de mem\u00f3ria; pilhas heterog\u00e9neas proporcionam resultados menores, mas ainda assim \u00fateis. Em combina\u00e7\u00e3o com um overcommit bem configurado, mantenho os custos por inst\u00e2ncia baixos e opero mais servi\u00e7os no mesmo hardware. Desta forma, surge uma clara <strong>Impacto econ\u00f3mico<\/strong> com uma qualidade previs\u00edvel.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/ksm_virtualisierung_3127.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>KSM vs. Alternativas: Diferencia\u00e7\u00e3o e intera\u00e7\u00e3o<\/h2>\n\n<p>Apostaria num <strong>Carteira<\/strong> t\u00e9cnicas de mem\u00f3ria complementares, que funcionam de forma diferente consoante o objetivo. O KSM elimina a redund\u00e2ncia no conte\u00fado da RAM, enquanto o \u00abballooning\u00bb recupera dinamicamente mem\u00f3ria para os convidados e as \u00abHuge Pages\u00bb aumentam a efici\u00eancia da CPU. Nenhuma t\u00e9cnica substitui a outra; combino-as de forma espec\u00edfica, consoante o perfil da carga de trabalho e o objetivo de densidade. Para principiantes, a seguinte vis\u00e3o geral ajuda a fazer a escolha mais rapidamente. Como pr\u00f3ximo passo, vale a pena dar uma vista de olhos em <a href=\"https:\/\/webhosting.de\/pt\/virtualizacao-de-servidores-kvm-xen-openvz-hosting-kernelboost\/\">KVM e Xen<\/a> em compara\u00e7\u00e3o, para determinar a <strong>Escolha da plataforma<\/strong> classificar corretamente.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Tecnologia<\/th>\n      <th>Tarefa<\/th>\n      <th>Vantagem<\/th>\n      <th>Desvantagem<\/th>\n      <th>Adequado para<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>KSM<\/td>\n      <td>Desduplica\u00e7\u00e3o de p\u00e1ginas de RAM id\u00eanticas<\/td>\n      <td>Elevado <strong>Poupan\u00e7a de RAM<\/strong> no caso de m\u00e1quinas virtuais semelhantes<\/td>\n      <td>Carga adicional na CPU devido \u00e0s verifica\u00e7\u00f5es<\/td>\n      <td>Muitos convidados semelhantes, anfitri\u00f5es KVM<\/td>\n    <\/tr>\n    <tr>\n      <td>Bal\u00e3o de mem\u00f3ria<\/td>\n      <td>Recupera\u00e7\u00e3o din\u00e2mica do armazenamento de g\u00e1s<\/td>\n      <td>Melhor <strong>Utiliza\u00e7\u00e3o<\/strong> em caso de cargas de trabalho vari\u00e1veis<\/td>\n      <td>\u00c9 necess\u00e1rio um condutor de bal\u00e3o por convidado<\/td>\n      <td>Perfis de utiliza\u00e7\u00e3o mistos<\/td>\n    <\/tr>\n    <tr>\n      <td>P\u00e1ginas enormes<\/td>\n      <td>P\u00e1ginas de maior tamanho para reduzir as falhas de TLB<\/td>\n      <td>Mais alto <strong>Efici\u00eancia da CPU<\/strong> em aplica\u00e7\u00f5es que consomem muita mem\u00f3ria<\/td>\n      <td>Menor probabilidade de deduplica\u00e7\u00e3o<\/td>\n      <td>Bases de dados, JVMs, motores em mem\u00f3ria<\/td>\n    <\/tr>\n    <tr>\n      <td>NUMA-Pinning<\/td>\n      <td>Liga\u00e7\u00e3o de m\u00e1quinas virtuais a n\u00f3s de armazenamento locais<\/td>\n      <td>constante <strong>Lat\u00eancia<\/strong> e largura de banda<\/td>\n      <td>Menos flexibilidade na programa\u00e7\u00e3o<\/td>\n      <td>Hosts com v\u00e1rios sockets, cargas de trabalho sens\u00edveis \u00e0 lat\u00eancia<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/virtualisierung-ksm-7429.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Ativa\u00e7\u00e3o pr\u00e1tica e guias de procedimentos do anfitri\u00e3o<\/h2>\n<p>Ao n\u00edvel do host, adoto uma abordagem pragm\u00e1tica: inicio o ksm\/ksmtuned e defino valores padr\u00e3o que se revelaram eficazes em funcionamento. Exemplo:<\/p>\n<pre><code>Ativar os servi\u00e7os # (dependendo da distribui\u00e7\u00e3o)\nsystemctl enable --now ksm ksmtuned\n\nAjuste manual do # (entra em vigor imediatamente, at\u00e9 ao rein\u00edcio)\necho 1 &gt; \/sys\/kernel\/mm\/ksm\/run\necho 1000 &gt; \/sys\/kernel\/mm\/ksm\/pages_to_scan\necho 50 &gt; \/sys\/kernel\/mm\/ksm\/sleep_millisecs\n<\/code><\/pre>\n<p>No libvirt, controlo a partilha por cada VM. Por predefini\u00e7\u00e3o, o QEMU marca a RAM do convidado como \u00abmergeable\u00bb. Para VMs particularmente sens\u00edveis, desativo explicitamente a partilha:<\/p>\n<pre><code><!-- Desativar o KSM para esta VM -->\n<\/code><\/pre>\n<p>Assim, mantenho uma linha clara: ativa\u00e7\u00e3o generalizada em hosts com cargas de trabalho homog\u00e9neas e exclus\u00f5es espec\u00edficas para exce\u00e7\u00f5es.<\/p>\n\n<h2>Ajuste preciso dos par\u00e2metros KSM em pormenor<\/h2>\n<ul>\n  <li><strong>executar<\/strong>: 0 = desativado, 1 = ativado, 2 = desativado e desligar as p\u00e1ginas j\u00e1 mescladas. Utilizo o \u201e2\u201c apenas para testes espec\u00edficos ou quando pretendo reverter a partilha de forma segura antes dos per\u00edodos de manuten\u00e7\u00e3o.<\/li>\n  <li><strong>p\u00e1ginas_a_digitalizar<\/strong>: O n\u00famero de p\u00e1ginas verificadas por ciclo. Valores mais elevados aceleram a dete\u00e7\u00e3o de p\u00e1ginas id\u00eanticas, mas aumentam a carga da CPU.<\/li>\n  <li><strong>sleep_millisecs<\/strong>: Pausa entre ciclos. Pausas mais longas reduzem a sobrecarga, mas demoram mais tempo a atingir o patamar de poupan\u00e7a.<\/li>\n  <li><strong>merge_across_nodes<\/strong>: Em hosts NUMA, defino este valor como 0, para que a fus\u00e3o ocorra apenas dentro de um n\u00f3 NUMA. Isto preserva a localidade.<\/li>\n  <li><strong>use_zero_pages<\/strong>: Se esta op\u00e7\u00e3o estiver ativada, os processos partilham p\u00e1ginas nulas de forma eficiente com a p\u00e1gina nula do kernel. Isto proporciona poupan\u00e7as \u201eseguras\u201c sem custos de COW.<\/li>\n<\/ul>\n<p>Com o ksmtuned, regulo dinamicamente com base em limiares de RAM. Assim que a mem\u00f3ria livre come\u00e7a a escassear, o ksmtuned aumenta a velocidade de varredura (Npagen-Boost); quando a press\u00e3o diminui, volta a reduzir essa velocidade. Isto resulta numa configura\u00e7\u00e3o adaptativa e \u201erespirante\u201c, sem interven\u00e7\u00f5es manuais.<\/p>\n\n<h2>Intera\u00e7\u00e3o com o THP, Huge Pages e Ballooning (an\u00e1lise aprofundada)<\/h2>\n<p><strong>P\u00e1ginas enormes transparentes (THP)<\/strong> e <strong>P\u00e1ginas enormes<\/strong> otimizam a efici\u00eancia da CPU, enquanto o KSM reduz a redund\u00e2ncia na RAM. Para tal, tenho em conta:<\/p>\n<ul>\n  <li>O KSM funciona com p\u00e1ginas regulares de 4 KB. As p\u00e1ginas THP (na maioria das vezes de 2 MB) n\u00e3o podem ser desduplicadas. Quanto mais o THP for utilizado, menos \u00abmat\u00e9ria-prima\u00bb fica dispon\u00edvel para o KSM.<\/li>\n  <li>Para cargas de trabalho em que a lat\u00eancia \u00e9 cr\u00edtica ou que dependem da CPU, opto por utilizar principalmente o THP\/Huge Pages. Para hosts com pouca mem\u00f3ria RAM e m\u00e1quinas virtuais homog\u00e9neas, dou prioridade ao KSM.<\/li>\n  <li>O Ballooning complementa o KSM: o controlador Balloon devolve a mem\u00f3ria de g\u00e1s livre ao anfitri\u00e3o. Paralelamente, o KSM reduz a procura ao consolidar p\u00e1ginas id\u00eanticas. Juntos, suavizo os picos de carga e evito o swapping prematuro.<\/li>\n<\/ul>\n<p>Tomo a minha decis\u00e3o com base em dados emp\u00edricos: os testes de desempenho com e sem THP\/Huge Pages, bem como com o KSM ativado, mostram-me qual a combina\u00e7\u00e3o que oferece a melhor rela\u00e7\u00e3o custo-desempenho global.<\/p>\n\n<h2>Modelos de seguran\u00e7a e funcionalidades modernas da CPU<\/h2>\n<p>Em ambientes com <strong>separa\u00e7\u00e3o estrita de clientes<\/strong> Desativo sistematicamente a partilha por VM\/host. Isso minimiza os canais de informa\u00e7\u00e3o laterais decorrentes de p\u00e1ginas partilhadas e simplifica as verifica\u00e7\u00f5es de conformidade. As modernas <strong>Encripta\u00e7\u00e3o de armazenamento<\/strong> Ao n\u00edvel do anfitri\u00e3o\/convidado (por exemplo, por chave de VM), isto impede, na pr\u00e1tica, que o KSM consiga realizar uma fus\u00e3o eficaz entre convidados, uma vez que os conte\u00fados id\u00eanticos j\u00e1 n\u00e3o est\u00e3o presentes na RAM f\u00edsica com id\u00eantica precis\u00e3o bin\u00e1ria. Nesses clusters, evito a an\u00e1lise agressiva e mantenho o ksmd numa atitude mais passiva, para n\u00e3o desperdi\u00e7ar recursos da CPU.<\/p>\n<p>Para stacks menos sens\u00edveis, mas homog\u00e9neos, mantenho o KSM como padr\u00e3o. Documento a pol\u00edtica para cada cluster: \u201ePadr\u00e3o ativado, exce\u00e7\u00f5es atrav\u00e9s de nosharepages\u201c ou \u201ePadr\u00e3o desativado, partilha apenas para pools definidos\u201c \u2014 ambas as op\u00e7\u00f5es s\u00e3o v\u00e1lidas, desde que sejam implementadas de forma transparente e reproduz\u00edvel.<\/p>\n\n<h2>Adequa\u00e7\u00e3o \u00e0 carga de trabalho e anti-padr\u00f5es<\/h2>\n<p>O KSM destaca-se em cargas de trabalho uniformes e com muitas bibliotecas (por exemplo, muitos servidores de aplica\u00e7\u00f5es id\u00eanticos, servi\u00e7os baseados em JVM, agentes). Os que beneficiam menos:<\/p>\n<ul>\n  <li><strong>Aloca\u00e7\u00f5es de curta dura\u00e7\u00e3o e com grande variabilidade<\/strong> (por exemplo, muitos buffers pequenos que mudam rapidamente), uma vez que a probabilidade de COW \u00e9 elevada.<\/li>\n  <li><strong>Dados comprimidos, encriptados ou pseudoaleat\u00f3rios<\/strong> \u2013 raramente surgem p\u00e1ginas id\u00eanticas.<\/li>\n  <li><strong>Grandes bases de dados na mem\u00f3ria<\/strong> com reciclagem agressiva de p\u00e1ginas, quando os dados mudam rapidamente. Nestas situa\u00e7\u00f5es, as vantagens das Huge Pages\/THP s\u00e3o frequentemente superiores.<\/li>\n<\/ul>\n<p>Nas \u00abcontainer farms\u00bb, o KSM tamb\u00e9m pode funcionar, desde que os processos marquem as mem\u00f3rias como \u00abmergeable\u00bb. Na pr\u00e1tica, por\u00e9m, concentro o KSM principalmente nas m\u00e1quinas virtuais (VMs), porque a\u00ed o QEMU j\u00e1 define os sinalizadores madvise necess\u00e1rios.<\/p>\n\n<h2>Resolu\u00e7\u00e3o de problemas e obst\u00e1culos t\u00edpicos<\/h2>\n<ul>\n  <li><strong>O \u00abpages_sharing\u00bb est\u00e1 estagnado<\/strong>: Vou verificar se o QEMU\/VMs criam realmente mem\u00f3ria \u00abmergeable\u00bb (sem a diretiva \u00abnosharepages\u00bb no XML do libvirt) e se o ksmd est\u00e1 a funcionar. Se os resultados forem nulos, \u00e9 prov\u00e1vel que a carga de trabalho seja demasiado heterog\u00e9nea.<\/li>\n  <li><strong>Carga da CPU demasiado elevada<\/strong>: Aumento o valor de `sleep_millisecs` e\/ou reduzo o valor de `pages_to_scan`. Al\u00e9m disso, posso desativar a fus\u00e3o entre NUMA para reduzir o espa\u00e7o de pesquisa.<\/li>\n  <li><strong>Picos de lat\u00eancia inesperados<\/strong>: Verifico se os eventos COW est\u00e3o correlacionados com picos de carga. Nesses casos, reduzo a frequ\u00eancia de verifica\u00e7\u00e3o ou excluo temporariamente as m\u00e1quinas virtuais afetadas da partilha.<\/li>\n  <li><strong>O overcommit escala para o swap<\/strong>: O KSM n\u00e3o substitui o planeamento de capacidade. Mantenho sempre uma reserva de RAM livre e regulo o ksmd apenas como um amortecedor, n\u00e3o como uma solu\u00e7\u00e3o de emerg\u00eancia.<\/li>\n<\/ul>\n\n<h2>Planeamento, dimensionamento e automatiza\u00e7\u00e3o<\/h2>\n<p>Para obter resultados previs\u00edveis, defino m\u00e9tricas-alvo para cada host:<\/p>\n<ul>\n  <li><strong>espa\u00e7o livre<\/strong>: Uma margem percentual fixa de RAM livre, abaixo da qual o ksmtuned se torna mais agressivo. \u00c9 assim que eu passo a deduplica\u00e7\u00e3o para fases de necessidade real.<\/li>\n  <li><strong>Equidade<\/strong>: Quando as cargas de trabalho s\u00e3o desiguais, separo os conjuntos (por exemplo, por projeto\/ambiente), para que as m\u00e1quinas virtuais homog\u00e9neas beneficiem em conjunto e as heterog\u00e9neas n\u00e3o \u201ediluam\u201c os resultados.<\/li>\n  <li><strong>Valores-limite<\/strong>: Estabele\u00e7o limites para as taxas m\u00e1ximas de an\u00e1lise e verifico regularmente se as poupan\u00e7as justificam a utiliza\u00e7\u00e3o da CPU.<\/li>\n<\/ul>\n<p>Na \u00e1rea da automatiza\u00e7\u00e3o, considero o KSM como um manual de procedimentos repet\u00edvel e com vers\u00f5es (por exemplo, drop-ins do Systemd ou snippets do Cloud-Init). Desta forma, garanto que os novos hosts entrem em funcionamento com um conjunto de par\u00e2metros id\u00eantico e que quaisquer diverg\u00eancias sejam rapidamente detetadas.<\/p>\n\n<h2>Resumo para administradores<\/h2>\n\n<p>Eu uso <strong>KSM<\/strong>, quando os anfitri\u00f5es alojam muitas m\u00e1quinas virtuais semelhantes e a RAM \u00e9 o recurso mais escasso. Nesse caso, a deduplica\u00e7\u00e3o proporciona o maior impacto, enquanto controlo com precis\u00e3o os custos de CPU atrav\u00e9s do ksmtuned e dos par\u00e2metros do sysfs. Em configura\u00e7\u00f5es NUMA, mantenho a fus\u00e3o a n\u00edvel local, combino o KSM com o \u00abballooning\u00bb e as \u00abHuge Pages\u00bb e avalio o impacto atrav\u00e9s do \u00abpages_sharing\u00bb e de m\u00e9tricas de lat\u00eancia. Para m\u00e1quinas virtuais sens\u00edveis, desativo o partilhamento de forma seletiva e documento as exce\u00e7\u00f5es de forma transparente. \u00c9 assim que aumento <strong>densidade<\/strong>, garantir tempos de resposta e reduzir de forma sustent\u00e1vel os custos em euros por inst\u00e2ncia.<\/p>","protected":false},"excerpt":{"rendered":"<p>Descubra como o Kernel Samepage Merging (KSM) no kernel do Linux otimiza a utiliza\u00e7\u00e3o da RAM e permite executar mais m\u00e1quinas virtuais no mesmo hardware. O artigo explica o funcionamento, a configura\u00e7\u00e3o e os efeitos no desempenho da virtualiza\u00e7\u00e3o \u2013 incluindo dicas pr\u00e1ticas para administradores.<\/p>","protected":false},"author":1,"featured_media":21216,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[676],"tags":[],"class_list":["post-21223","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server_vm"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"125","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"KSM Virtualisierung","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"21216","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/21223","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/comments?post=21223"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/21223\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media\/21216"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media?parent=21223"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/categories?post=21223"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/tags?post=21223"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}