|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Igor Sysoev 2:5020/400 17 Nov 2005 18:56:57 To : Sergey Skvortsov Subject : Re: httpd в ядре -------------------------------------------------------------------------------- Sergey Skvortsov <skv@protey.ru> wrote: > Igor Sysoev wrote: >> >>>>> А как он их будет кэшировать, если он их сам не читает, а отправляет по >>>>> sendfile() ? Делать mmap() и надеяться, что оно останется в кэше >>>>> системы? >>>> Файлы меньше страницы лучше считать в память (не mmap) и отдавать writev(). >>> Почему не mmap? Каждой файл mmap'ить - это, конечно, будут тормоза. >>> >>> Hо отчего бы не один большой mmap, расшаренный между всеми worker'ами? >> >> Hу это понятно, что такой кэш нужно делать разделяемым. >> Я имел ввиду mmap() каждого файла. > > Честно говоря, не очень ясно, почему sendfile() тут будет хуже чем > writev. Более компактное расположение контента в памяти? > > Чем же stat/?readv/writev будет лучше open/sendfile? > > Разве что в последнем случае нужен еще close(). Hу так в sendfile() есть > неиспользуемый параметр flags. Сделать бы флажок типа CLOSE_ON_SUCCESS - > так всё было бы прекрасно. > > Или жизнь существенно сложнее? Во-первых, дескрипторы частоиспользуемых файлов можно держать открытыми и использовать в sendfile(). stat() не нужен, так как изменение файла можно получать через kqueue. Что касается разницы в использовании writev() vs sendfile() для частоиспользуемых мелких файлов, то тут есть момент: sendfile() привязывает страницу файла к виртуальному адресу (sfbuf). Это, как минимум, требует инструкции invplg на UP и IPI на SMP. Простое копирование 200-2000 байт в mbuf cluster может быть быстрее. -- Игорь Сысоев http://sysoev.ru --- ifmail v.2.15dev5.3 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/6577494a4125.html, оценка из 5, голосов 10
|