Por que limitar a quantidade total de memória compartilhada disponível?

2

Eu tenho alguns grandes processos de memória que compartilham memória em um sistema CentOS 7. Eu estou ajustando o sistema de memória para eles. Para kernel.shmmax e kernel.shmall, os estados da documentação do RedHat:

kernel.shmmax defines the maximum size in bytes of a single shared memory segment that a Linux process can allocate in its virtual address space.

kernel.shmall sets the total amount of shared memory pages that can be used system wide.

Por que existem tais limites na memória compartilhada? Eu posso limitar a memória total que um usuário ou processo usa com limites ou cgroups. Por que eu desejaria limitar o total de memória compartilhada disponível no sistema? O sistema sofre um impacto no desempenho quando tem muita memória compartilhada para gerenciar?

    
por Jeff Kubina 04.08.2016 / 17:30

1 resposta

3

Faz parte da higiene do sistema e um pouco de legado. Os controles cgroup são relativamente novos no Linux (2.6.24 e posterior), onde shmmax / shmall estavam presentes no kernel desde a série 1.2.x:

ipc/shm.c

    {
            struct shminfo shminfo;
            if (!buf)
                    return -EFAULT;
            shminfo.shmmni = SHMMNI;
            shminfo.shmmax = SHMMAX;
            shminfo.shmmin = SHMMIN;
            shminfo.shmall = SHMALL;
            shminfo.shmseg = SHMSEG;
            err = verify_area (VERIFY_WRITE, buf, sizeof (struct shminfo));
            if (err)
                    return err;
            memcpy_tofs (buf, &shminfo, sizeof(struct shminfo));
            return max_shmid;
    }

A filosofia limitante do Linux evoluiu nos últimos 21 anos. Naquela época, o padrão de design dos limites globais era dominante. Você não queria usar toda a sua memória RAM para IPC, então você precisava definir uma marca d'água para garantir que houvesse espaço suficiente para todo o resto. Isso pode funcionar com os cgroups modernos também; limites individuais para seus processos, com um limite global para garantir que o swap seja evitado e todo o sistema ainda funcione bem.

    
por 05.08.2016 / 20:02