Приложенный патч добавляет вызов posix_fadvise в ld.so на все подгружаемые библиотеки. Это позволяет ядру предварительно загрузить библиотеки в кэш, и тем самыс ускорить запуск программ. Патч взят из SuSe, и немного модифицирован под Альт ( вызов getenv заменен на __secure_getenv), прикладывать его нужно последним.
Created attachment 2402 [details] Сам патч
(In reply to comment #1) > Created an attachment (id=2402) [edit] > Сам патч Не похоже, чтобы он делал что-то осмысленное: $ strace -qe fadvise64 ls /var/empty fadvise64(3, 0, 29204, POSIX_FADV_WILLNEED) = -1 EINVAL (Invalid argument) fadvise64(3, 0, 91768, POSIX_FADV_WILLNEED) = -1 EINVAL (Invalid argument) fadvise64(3, 0, 27652, POSIX_FADV_WILLNEED) = -1 EINVAL (Invalid argument) fadvise64(3, 0, 1214724, POSIX_FADV_WILLNEED) = -1 EINVAL (Invalid argument) fadvise64(3, 0, 86496, POSIX_FADV_WILLNEED) = -1 EINVAL (Invalid argument) fadvise64(3, 0, 16044, POSIX_FADV_WILLNEED) = -1 EINVAL (Invalid argument) $
Вот ещё информация к размышлению: $ strace -qe open,fstat64,fadvise64 echo open("/lib/libc.so.6", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0755, st_size=1208640, ...}) = 0 fadvise64(3, 0, 1214724, POSIX_FADV_WILLNEED) = -1 EINVAL (Invalid argument)
а какое ядро? у меня выдаёт следующее: [14:16:40 warlock@maaneheim work]$strace ./ld-2.5.so /bin/ls 2>&1 | grep fad mmap2(NULL, 29236, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7fad000 fadvise64(3, 0, 29236, POSIX_FADV_WILLNEED) = 0 fadvise64(3, 0, 91768, POSIX_FADV_WILLNEED) = 0 fadvise64(3, 0, 27652, POSIX_FADV_WILLNEED) = 0 fadvise64(3, 0, 1214724, POSIX_FADV_WILLNEED) = 0 fadvise64(3, 0, 86496, POSIX_FADV_WILLNEED) = 0 fadvise64(3, 0, 16044, POSIX_FADV_WILLNEED) = 0
отрабатывает нормально с 2.6.24 и 2.6.18, результат из чрута с ALD и пропатченой glibc-2.5-alt4: [14:43:38 root@tunglheim /]#cat /etc/redhat-release ALT Linux 4.0 Desktop (Ajuga) [14:43:52 root@tunglheim /]#strace -qe fadvise64 ls /var/empty fadvise64(3, 0, 85752, POSIX_FADV_WILLNEED) = 0 fadvise64(3, 0, 170276, POSIX_FADV_WILLNEED) = 0 fadvise64(3, 0, 1202436, POSIX_FADV_WILLNEED) = 0 fadvise64(3, 0, 86496, POSIX_FADV_WILLNEED) = 0 fadvise64(3, 0, 37520, POSIX_FADV_WILLNEED) = 0 [14:46:49 root@tunglheim /]#strace -qe open,fstat64,fadvise64 echo open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=113233, ...}) = 0 open("/lib/libc.so.6", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0755, st_size=1192256, ...}) = 0 fadvise64(3, 0, 1202436, POSIX_FADV_WILLNEED) = 0 fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
(In reply to comment #4) > а какое ядро? $ uname -rm 2.6.18-ovz-smp-alt22 x86_64
> 2.6.18-ovz-smp-alt22 x86_64 уж не _64 всё портит, мои результаты на 32-битной системе
(In reply to comment #7) > > 2.6.18-ovz-smp-alt22 x86_64 > уж не _64 всё портит, > мои результаты на 32-битной системе Нет, это ovz не даёт. Приложено в 2.8.90-alt3