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 / 787070
Accepted
Wad
Wad
Asked: 2024-11-23 05:48:34 +0800 CST2024-11-23 05:48:34 +0800 CST 2024-11-23 05:48:34 +0800 CST

Envio de socket do kernel Linux vs gravação de arquivo

  • 772

Entendo que quando escrevo em um arquivo no meu disco rígido, um thread do kernel (pdflush em kernels anteriores a 3.6) irá, em algum momento, realmente liberar isso para o arquivo. Tenho lido sobre redes em "Understanding the Linux Kernel, Second Edition" (desculpe, não há nenhum e-book para o qual eu possa vincular) e parece sugerir que, ao chamar send(), descemos direto para o kernel, terminando com os dados sendo colocados na fila de saída da placa de rede.

Não há menção de nenhum outro tópico.

Alguém pode esclarecer que não interpretei mal ou entendi mal, e que para cada chamada send() que faço, o thread que faz a chamada no meu processo vai direto para o ponto em que o kernel a coloca na fila TX da NIC?

Se for esse o caso, estou confuso sobre como isso acontece com envios assíncronos; ou, neste caso, assíncrono significa simplesmente que recebemos uma notificação posteriormente de que o envio ocorreu?

Confuso.

(Eu já perguntei isso no SO normal, mas me disseram que essa era a melhor área para isso.)

linux
  • 1 1 respostas
  • 28 Views

1 respostas

  • Voted
  1. Best Answer
    Sotto Voce
    2024-11-23T15:58:10+08:002024-11-23T15:58:10+08:00

    Você está discutindo a técnica de gravar dados em um dispositivo com os dados sendo armazenados em cache na memória antes de serem entregues ao dispositivo. Em seus dois exemplos, os dispositivos são um "disco rígido" (que pode usar tecnologia SSD para maior velocidade) e uma interface de rede (geralmente Ethernet com ou sem fio).

    Nos livros/sites que você tem lido, as gravações em um disco rígido são armazenadas em cache na memória e um thread em segundo plano move os dados do cache para o disco físico. As gravações em um dispositivo de rede não são armazenadas em cache na mesma extensão (há cache, mas é muito menor). Por que isso acontece?

    Os discos rígidos são lentos . Esta resposta em um tópico da lista de discussão do Redis sobre velocidade de memória/disco ilustra a diferença entre as velocidades de memória, SSD e HD. Os programas vivem na memória e quando trabalham com código, variáveis ​​e estruturas de dados na memória, eles podem ser executados em velocidades de memória. Mas quando os programas precisam gravar no disco, a velocidade mais lenta do dispositivo - sem buffer - faz o programa parar bruscamente. Como a comparação na resposta da lista de discussão mostra, é a diferença entre cerca de um segundo (gravando na memória) e esperar vários dias (gravando no HD) antes que você possa fazer qualquer outra coisa. O SSD é melhor, mas ainda representa esperas que prejudicarão qualquer programa. E não são apenas gravações no disco; as leituras sofrem tanto.

    Não é tolerável deixar os programas tão lentos, então, por décadas, os sistemas operacionais colocaram um buffer de memória (cache) entre o disco e os programas. As gravações vão para o buffer de memória rapidamente, permitindo que o programa continue sua função. Os threads do kernel liberam os dados armazenados no buffer para o disco na taxa mais lenta do disco, mas isso é feito em segundo plano, onde não prejudica o desempenho. Ao ler do disco, o sistema operacional tenta ler dados extras no cache de leitura para que o programa que solicita os dados espere menos. Não é perfeito, e quando o programa solicita dados do disco que não estão no cache, o programa tem que esperar por eles.

    Com dispositivos de rede, também há buffer de dados para ajudar os programas a terem um bom desempenho, mas o buffer é menor e mais simples. Livros e sites não entram na mesma quantidade de detalhes que entram com buffer de disco.

    • 1

relate perguntas

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

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

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