Короче, Линус сказал, что O_DIRECT - это плохо и неправильно
(http://lkml.org/lkml/2007/1/10/233), посему у меня вопрос: как это
делать правильно сэмулировать на posix_fadvise? Требуется сделать так,
чтобы ядро НЕ кэшировало файл при его чтении.
Следующий код не работает:
if ((fd_in = open64(argv[1], O_RDONLY | O_LARGEFILE)) == -1) {
printf("Error: source file can't be open\n");
perror("open() ");
return 3;
}
posix_fadvise(fd_in, 0, filesize(argv[1]), POSIX_FADV_NOREUSE);
Далее файл читается в память, но ядро всё равно забивает пямять его
кэшем.
Зато работает следующий код:
if ((fd_in = open64(argv[1], O_RDONLY | O_LARGEFILE | O_DIRECT)) == -1) {
printf("Error: source file can't be open\n");
perror("open() ");
return 3;
}
(filesize можно заменить на 0 на ядрах > 2.6.6)
Ответ на:
комментарий
от fghj
Ответ на:
комментарий
от birdie
Ответ на:
комментарий
от birdie
Ответ на:
комментарий
от fghj
Ответ на:
комментарий
от tailgunner
Ответ на:
комментарий
от birdie
Ответ на:
комментарий
от birdie
Ответ на:
комментарий
от fghj
Ответ на:
комментарий
от tailgunner
Ответ на:
комментарий
от birdie
Ответ на:
комментарий
от birdie
Ответ на:
комментарий
от fghj
Ответ на:
комментарий
от fghj
Ответ на:
комментарий
от fghj
Ответ на:
комментарий
от birdie
Ответ на:
комментарий
от tailgunner
Ответ на:
комментарий
от tailgunner
Ответ на:
комментарий
от birdie
Ответ на:
комментарий
от birdie
Ответ на:
комментарий
от tailgunner
Ответ на:
комментарий
от birdie
Ответ на:
комментарий
от tailgunner
Ответ на:
комментарий
от birdie
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум ftruncate64(): Invalid argument, Error code: 22 (2012)
- Форум Не могу разобраться с ошибкой сегментирования (2017)
- Форум Вывести содержание бинарного файла (2013)
- Форум кэш, O_DIRECT и sync (2004)
- Галерея Эмуляция (2005)
- Галерея Эмуляция (2002)
- Форум Эмуляция iOS (2016)
- Форум Эмуляция NumPad (2012)
- Форум Эмуляция хопов (2011)
- Форум [CUDA] эмуляция (2010)