Bug 14264 - Вызов posix_fadvise в ld.so
Summary: Вызов posix_fadvise в ld.so
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: glibc (show other bugs)
Version: unstable
Hardware: all Linux
: P2 enhancement
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-01-31 16:24 MSK by Gleb Stiblo
Modified: 2008-11-07 20:50 MSK (History)
3 users (show)

See Also:


Attachments
Сам патч (2.40 KB, patch)
2008-01-31 16:25 MSK, Gleb Stiblo
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Gleb Stiblo 2008-01-31 16:24:22 MSK
Приложенный патч добавляет вызов posix_fadvise в ld.so на все подгружаемые
библиотеки. Это позволяет ядру предварительно загрузить библиотеки в кэш, и тем
самыс ускорить запуск программ. Патч взят из SuSe, и немного модифицирован под
Альт ( вызов getenv заменен на __secure_getenv), прикладывать его нужно последним.
Comment 1 Gleb Stiblo 2008-01-31 16:25:15 MSK
Created attachment 2402 [details]
Сам патч
Comment 2 Dmitry V. Levin 2008-03-24 14:00:50 MSK
(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)
$ 
Comment 3 Dmitry V. Levin 2008-03-24 14:03:41 MSK
Вот ещё информация к размышлению:
$ 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)
Comment 4 Gleb Stiblo 2008-03-24 15:19:10 MSK
а какое ядро?
у меня выдаёт следующее:
[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
Comment 5 Gleb Stiblo 2008-03-24 15:47:14 MSK
отрабатывает нормально с 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
Comment 6 Dmitry V. Levin 2008-03-24 16:53:52 MSK
(In reply to comment #4)
> а какое ядро?

$ uname -rm
2.6.18-ovz-smp-alt22 x86_64
Comment 7 Gleb Stiblo 2008-03-24 17:17:34 MSK
> 2.6.18-ovz-smp-alt22 x86_64
уж не _64 всё портит,
мои результаты на 32-битной системе
Comment 8 Dmitry V. Levin 2008-11-07 20:50:09 MSK
(In reply to comment #7)
> > 2.6.18-ovz-smp-alt22 x86_64
> уж не _64 всё портит,
> мои результаты на 32-битной системе

Нет, это ovz не даёт.

Приложено в 2.8.90-alt3