O Varnish parece usar um arquivo mapeado na memória para sua memória compartilhada (em vez de, por exemplo, POSIX shm_open
). De a fonte :
loghead = mmap(NULL, heritage.vsl_size,
PROT_READ|PROT_WRITE,
MAP_HASSEMAPHORE | MAP_NOSYNC | MAP_SHARED,
heritage.vsl_fd, 0);
No BSD, MAP_NOSYNC
solicita que o kernel não grave os dados compartilhados no disco, a menos que seja forçado (por exemplo, para liberar memória). Quando é mlocked também, isso quase nunca deveria acontecer. Infelizmente, o Linux não suporta MAP_NOSYNC
.
Assim, o Linux acabará rotineiramente escrevendo páginas sujas (alteradas) do cache para o disco. Colocar o cache em um tmpfs evitará isso. Assim também o Varnish usaria memória compartilhada POSIX ou SysV (na verdade, a memória compartilhada POSIX é implementada no Linux com um tmpfs montado em /dev/shm
, portanto, o uso do tmpfs deve ser bom).