AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 686726
Accepted
Alex Baranowski
Alex Baranowski
Asked: 2022-01-18 07:41:24 +0800 CST2022-01-18 07:41:24 +0800 CST 2022-01-18 07:41:24 +0800 CST

Número máximo de arquivos de troca - bug de documentação do kernel?

  • 772

Estou escrevendo um artigo sobre swapfiles. Decidi verificar quantos arquivos de troca posso criar e usar. De acordo com man 2 swapon, eu sei que deve ser 29 - https://man7.org/linux/man-pages/man2/swapon.2.html . Eu verifiquei minhas opções de configuração do kernel com grep CONFIG_MIGRATION /boot/config-$(uname -r)e grep CONFIG_MEMORY_FAILURE /boot/config-$(uname -r). Mas quando escrevi um script simples para verificar:

for i in {1..33}; do 
    SWAP_FILE="/swapfile-$i"
    sudo dd if=/dev/zero of=$SWAP_FILE bs=1M count=10
    sudo chmod 600 $SWAP_FILE
    sudo mkswap $SWAP_FILE
    sudo swapon $SWAP_FILE
done

Consegui ativar apenas 27 deles.

[root@localhost ~]# swapon
NAME         TYPE SIZE USED PRIO
/swapfile-1  file  10M   0B   -2
(...)
/swapfile-27 file  10M   0B  -28

Isso significa que provavelmente há algo faltando na documentação.

Estou usando o EuroLinux 8 (apenas mais um clone do RHEL 8). Mas eu tentei também no Fedora com resultados idênticos. Eu tentei entender por que isso aconteceu examinando o arquivo do kernel swap.h ( https://github.com/torvalds/linux/blob/master/include/linux/swap.h ), mas isso me deixou ainda mais confuso é:

#ifdef CONFIG_DEVICE_PRIVATE
#define SWP_DEVICE_NUM 4
#define SWP_DEVICE_WRITE (MAX_SWAPFILES+SWP_HWPOISON_NUM+SWP_MIGRATION_NUM)
#define SWP_DEVICE_READ (MAX_SWAPFILES+SWP_HWPOISON_NUM+SWP_MIGRATION_NUM+1)
#define SWP_DEVICE_EXCLUSIVE_WRITE (MAX_SWAPFILES+SWP_HWPOISON_NUM+SWP_MIGRATION_NUM+2)
#define SWP_DEVICE_EXCLUSIVE_READ (MAX_SWAPFILES+SWP_HWPOISON_NUM+SWP_MIGRATION_NUM+3)
#else
#define SWP_DEVICE_NUM 0
#endif
#ifdef CONFIG_MIGRATION
#define SWP_MIGRATION_NUM 2
#define SWP_MIGRATION_READ  (MAX_SWAPFILES + SWP_HWPOISON_NUM)
#define SWP_MIGRATION_WRITE (MAX_SWAPFILES + SWP_HWPOISON_NUM + 1)
#else
#define SWP_MIGRATION_NUM 0
#endif
#ifdef CONFIG_MEMORY_FAILURE
#define SWP_HWPOISON_NUM 1
#define SWP_HWPOISON        MAX_SWAPFILES
#else
#define SWP_HWPOISON_NUM 0
#endif

#define MAX_SWAPFILES \
    ((1 << MAX_SWAPFILES_SHIFT) - SWP_DEVICE_NUM - \
    SWP_MIGRATION_NUM - SWP_HWPOISON_NUM)
  • (1<< SWAPFILES_SHIFT) = 32 (SWAPFILES_SHIFT=5)
  • SWP_DEVICE_NUM é 4 ou 0
  • SWP_MIGRATION é 2 ou 0
  • SWP_HWPOISON_NUM é 1 ou 0

32 - X = 27 adiciona somente quando SWP_DEVICE_NUM e SWP_HWPOISON_NUM são usados. Ao mesmo tempo, man 2 swapondiz que:

Since kernel 2.6.18, the  limit  is  decreased  by  2
       (thus:  30)  if  the  kernel is built with the CONFIG_MIGRATION

E as configurações estão definidas como sim.

[root@fedora ~]# grep CONFIG_MIGRATION /boot/config-$(uname -r)
CONFIG_MIGRATION=y
[root@fedora ~]# grep CONFIG_MEMORY_FAILURE  /boot/config-$(uname -r)
CONFIG_MEMORY_FAILURE=y

Qualquer ajuda para entender por que apenas 27 swaps estão disponíveis é apreciada.

rhel kernel
  • 1 1 respostas
  • 73 Views

1 respostas

  • Voted
  1. Best Answer
    MC68020
    2022-01-18T12:52:47+08:002022-01-18T12:52:47+08:00

    Absolutamente nada de errado com os documentos.

    Seu mal-entendido vem simplesmente do fato de você estar baseando seu cálculo em definições encontradas no swap.hgit do Linus, que é o swap.hrelacionado ao branch master , ou seja, hoje à frente do 5.17-rc-1

    Ao fazer seus experimentos no RHEL 8 que, AFAIK, é baseado no Linux- 4.18

    Em swap.h de 4.18.20 se ainda podemos ler a mesma fórmula:

    #define MAX_SWAPFILES \
        ((1 << MAX_SWAPFILES_SHIFT) - SWP_DEVICE_NUM - \
        SWP_MIGRATION_NUM - SWP_HWPOISON_NUM)
    

    SWP_MIGRATION_NUMno entanto, está assumindo um valor diferente:

    #define SWP_MIGRATION_NUM 2
    

    2 em vez de 4.

    Aplicando esse valor à fórmula levando em consideração suas configurações de configuração, obtém-se:

    MAX_SWAPFILES = 32 - 2 - 2 - 1 = 27

    Justificando os resultados de seus experimentos e a documentação.

    • 1

relate perguntas

  • Danos no kernel do Linux Mint

  • Como os desenvolvedores do kernel Linux lidam com seu trabalho com milhões de linhas de código? É um método? [fechado]

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

  • Acesse o sistema de arquivos como usuário root

  • Desativar a maximização automática de janelas no Gnome3

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve