una solicita sistema proceso operativo llamadas llamada hijo como linux-kernel system-calls mmap

linux-kernel - solicita - llamadas al sistema en c



La llamada al sistema madvise con llamada MADV_SEQUENTIAL tarda demasiado en terminar (0)

En mi código, estoy usando una biblioteca C externa y las llamadas a la biblioteca madvise con la opción MADV_SEQUENTIAL que tarda demasiado en terminar. En mi opinión, solo llamar a Madvise con MADV_SEQUENTIAL es suficiente para nuestro trabajo. Mi primera pregunta es, ¿por qué se hacen múltiples llamadas al sistema de locos? ¿Existe una lógica en llamar a madison con diferentes opciones secuencialmente? Mi segunda pregunta es, ¿tienes alguna idea de por qué madvise con MADV_SEQUENTIAL lleva demasiado tiempo, a veces alrededor de 1-2 minutos?

[root@mymachine ~]# strace -ttT my_compiled_code ... 13:11:35.358982 open("/some/big/file", O_RDONLY) = 8 <0.000010> 13:11:35.359060 fstat64(8, {st_mode=S_IFREG|0644, st_size=953360384, ...}) = 0 <0.000006> 13:11:35.359155 mmap2(NULL, 1073741824, PROT_READ, MAP_SHARED, 8, 0) = 0x7755e000 <0.000007> 13:11:35.359223 madvise(0x7755e000, 1073741824, MADV_NORMAL) = 0 <0.000006> 13:11:35.359266 madvise(0x7755e000, 1073741824, MADV_RANDOM) = 0 <0.000006> 13:11:35.359886 madvise(0x7755e000, 1073741824, MADV_SEQUENTIAL) = 0 <0.000006> 13:11:53.730549 madvise(0x7755e000, 1073741824, MADV_RANDOM) = 0 <0.000013> ...

Estoy usando núcleo de Linux de 32 bits: 3.4.52-9

[root@mymachine ~]# free -lk total used free shared buffers cached Mem: 4034412 3419344 615068 0 55712 767824 Low: 853572 495436 358136 High: 3180840 2923908 256932 -/+ buffers/cache: 2595808 1438604 Swap: 4192960 218624 3974336 [root@mymachine ~]# cat /proc/buddyinfo Node 0, zone DMA 89 23 9 4 5 4 4 1 0 2 0 Node 0, zone Normal 9615 7099 3997 1723 931 397 78 0 0 1 1 Node 0, zone HighMem 7313 8089 2187 420 206 92 41 15 8 3 6