Bug 14264 - Вызов posix_fadvise в ld.so
: Вызов posix_fadvise в ld.so
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/glibc)
: unstable
: all Linux
: P2 enhancement
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2008-01-31 16:24 by
Modified: 2008-11-07 20:50 (History)


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


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2008-01-31 16:24:22
Приложенный патч добавляет вызов posix_fadvise в ld.so на все подгружаемые
библиотеки. Это позволяет ядру предварительно загрузить библиотеки в кэш, и тем
самыс ускорить запуск программ. Патч взят из SuSe, и немного модифицирован под
Альт ( вызов getenv заменен на __secure_getenv), прикладывать его нужно
последним.
------- Comment #1 From 2008-01-31 16:25:15 -------
Created an attachment (id=2402) [details]
Сам патч
------- Comment #2 From 2008-03-24 14:00:50 -------
(In reply to comment #1)
> Created an attachment (id=2402) [edit] [details]
> Сам патч

Не похоже, чтобы он делал что-то осмысленное:
$ 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 From 2008-03-24 14:03:41 -------
Вот ещё информация к размышлению:
$ 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 From 2008-03-24 15:19:10 -------
а какое ядро?
у меня выдаёт следующее:
[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 From 2008-03-24 15:47:14 -------
отрабатывает нормально с 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 From 2008-03-24 16:53:52 -------
(In reply to comment #4)
> а какое ядро?

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

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

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