Estou trabalhando na otimização dos kernels das minhas caixas para telefonia, o que envolve (entre outras coisas) o ajuste da taxa de HZ e do modelo de preempção.
Inicialmente, o kernel foi compilado com o padrão de 250 HZ e Preempção voluntária, e o cyclictest é atualmente mostrando uma latência máxima de 5859 , o que é bom, mas não é o ideal. Idealmente, eu gostaria de ter menos de 3000, e é por isso que decidi cavar mais fundo.
A coisa confusa é, no entanto, na tentativa de obter a freqüência de interrupção do temporizador real: quando eu façocat /proc/interrupts | grep LOC ; sleep 10; cat /proc/interrupts | grep LOC
Eu obtenho
LOC: 212 370 92 81 Local timer interrupts
LOC: 212 370 92 81 Local timer interrupts
E meus valores não mudam (acredito que a segunda linha deva ser incrementada em 250).
Além disso, quando tento medi-lo conforme descrito aqui , obtenho
kernel timer interrupt frequency is approx. 2518 Hz
Alguma idéia de como calculá-lo corretamente?
Talvez alguma outra sugestão sobre otimização de kernel para voz (RTC / SLAB / IO Scheduler)?
Atualização: Adicionando
CONFIG_HZ_1000=y
CONFIG_HZ=1000
CONFIG_PREEMPT_RCU=y
CONFIG_PREEMPT_NOTIFIERS=y
CONFIG_PREEMPT=y
CONFIG_PREEMPT_COUNT=y
CONFIG_DEBUG_PREEMPT=y
diminuiu minha latência para
T: 0 ( 4628) P:80 I:10000 C: 4059 Min: 13 Act: 33 Avg: 69 Max:
3634
Ainda estou procurando maneiras de melhorar isso ...
Tags cpu linux-kernel