Eu tenho uma situação em que preciso criar centenas de milhares de arquivos de bloqueio de 0 byte para controle de concorrência.
Eu testei criá-los usando:
for i in 'seq 1 50000'; do touch "/run/lock/${i}.lock"; done
Como os arquivos são 0 bytes, eles não criam nenhum espaço na partição. Olhando para df -h
:
Filesystem Size Used Avail Use% Mounted on
tmpfs 50M 344K 49M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 246M 0 246M 0% /run/shm
none 100M 0 100M 0% /run/user
A figura 0%
não é alterada na linha /run/lock
.
No entanto, o tamanho da memória aumenta em uma média de aproximadamente 1 KB por arquivo de bloqueio. Descobri isso comparando free -h
antes e depois de criar 70.000 arquivos de bloqueio dentro de /run/lock
. Esse aumento de memória foi refletido no uso da memória real (memória virtual menos os buffers / cache).
Mais tarde, descobri que esse aumento de 1 KB é mais provável devido aos inodes. Então eu verifiquei o uso do inodo usando df -i
:
Filesystem Inodes IUsed IFree IUse% Mounted on
tmpfs 62729 322 62407 1% /run
none 62729 50001 12728 80% /run/lock
none 62729 1 62728 1% /run/shm
none 62729 2 62727 1% /run/user
Como você pode ver, os arquivos de bloqueio aumentam os inodes dentro da partição /run/lock
.
Atualmente, estou no Ubuntu e as /run
montagens não são refletidas em /etc/fstab
. A execução de mount
me dá:
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
none on /run/user type tmpfs (rw,noexec,nosuid,nodev,size=104857600,mode=0755)
Eu tenho algumas perguntas sobre isso (mas a primeira é a mais importante):
- Como eu aumento o limite de inode permanentemente para
/run/lock
? Então esse limite sobrevive a reinicializações?
- Seria melhor para mim criar meu próprio diretório e montar o tmpfs nele para usá-lo, em vez de usar
/run/lock
?
- O limite de tamanho de cada partição é completamente independente um do outro? Isso é armazenar arquivos em
/run
não parece afetar /run/lock
e vice-versa.
- O 1KB é derivado do inode? Percebi que ao criar arquivos não vazios, o bloco básico é de 4KB para cada arquivo.
- Por que
/run
recebe o tipo de sistema de arquivos tmpfs
, mas /run/lock
, /run/shm
, /run/user
fornece "nenhum" ao tipo de sistema de arquivos, especialmente porque todos eles são suportados pelo TMPFS? Por que eles não são todos lidos como tmpfs
na coluna Filesystem
?
- Se todos os diretórios forem restringidos de maneira independente, como o assassino OOM manipula uma situação em que há várias partições TMPFS completas, cada uma delas dimensionada para 50% da RAM e onde também há processos disputando RAM bem. Obviamente, não se pode usar mais de 100% da RAM. De acordo com o link , ele menciona que o sistema estará em deadlock. Como isso funciona?