Qual é o suporte máximo para descritores de arquivos baseados em minha CPU?

2

Estamos usando uma instância do Amazon EC2 executando o Ubuntu 14.04 e estamos presos a algumas perguntas.

Qual é o número máximo de arquivos abertos que posso ter baseado na configuração da CPU que estamos executando atualmente?

Existe um cálculo para isso? Ou um algoritmo?

Nossa configuração da CPU (CPUs duplas):

processor   : 0 
vendor_id   : GenuineIntel
cpu family  : 6
model       : 62
model name  : Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
stepping    : 4
microcode   : 0x415
cpu MHz     : 2494.046
cache size  : 25600 KB
physical id : 0
siblings    : 2
core id     : 0
cpu cores   : 1
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm xsaveopt fsgsbase smep erms
bogomips    : 4988.09
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

Para maior clareza, não estou perguntando como definir esses limites, e sim como calcular o limite máximo para nossa configuração.

    
por Justin Erswell 08.12.2016 / 19:47

1 resposta

2

Tenho certeza que o limite que você atingirá é que você ficará sem RAM para as estruturas de dados do kernel envolvidas. É possível que a arquitetura da CPU seja importante (por exemplo, porque as estruturas de dados são de tamanho diferente ou precisam ser alinhadas de maneira diferente), mas qual CPU x86_64 em particular você não deve importar.

Uma plataforma de 32 bits pode limitar você a 2 31 -1 (isto é, MAXINT), mas você certamente ficaria sem RAM primeiro - um descritor de arquivo ocupa mais de dois bytes de RAM. (Claro, você está em uma plataforma de 64 bits - e 2 63 -1 é um número absurdo de arquivos para abrir)

Confesso que não sei como calcular o número - e certamente depende do tipo de descritor de arquivo; O uso de memória do kernel é certamente diferente se for um soquete TCP, abrir um arquivo local (pode até ser diferente por sistema de arquivos), pipe, etc.

Honestamente, sugiro que você ative uma instância EC2 temporária (com o mesmo tipo de máquina), defina o limite como um valor absurdamente alto e teste.

    
por 08.12.2016 / 21:40