Гость
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тяпничный Новогодний mmap / 7 сообщений из 7, страница 1 из 1
28.12.2018, 22:11
    #39754729
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Новогодний mmap
Привет.

С Наступающим ВСех.

В продолжение 18155192 , 21299029

Итак коллеги. Системный вызов mmap. . Я не буду давать ссылок. Их полно. Приведу шапку
мануала чтоб было понятно всем прочим кто не в теме.

man
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
NAME
       mmap, munmap - map or unmap files or devices into memory

SYNOPSIS
       #include <sys/mman.h>

       void *mmap(void *addr, size_t length, int prot, int flags,
                  int fd, off_t offset);
       int munmap(void *addr, size_t length);

       See NOTES for information on feature test macro requirements.



Я решил оставить 4 базовых вопроса. И не по самой функции ядра а по практическому применению.

1) Ограничения. Сколько можно выделить практически с учотом диска.
2) Реализации в Windows/Unix
3) Практическое применение кроме традиционного (загрузка кода). SQLite? Другие DBMS?

Поделитесь где и как вы использовали mmap? Какие цели были достигнуты?
Какие были недостатки? Как фиксили. Или как оптимизировали.[/i]

(Спасибо колобку. Он уже отписал в топиках ранее)
...
Рейтинг: 0 / 0
28.12.2018, 22:43
    #39754735
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Новогодний mmap
mayton,

mmap использует механизмы вытеснения страниц - и будет эффективен на чтение 4к-страниц.

в остальном это выглядит как костыль, нужны тесты
...
Рейтинг: 0 / 0
28.12.2018, 22:44
    #39754736
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Новогодний mmap
За исключением случая собственного кэширования на запись.
...
Рейтинг: 0 / 0
29.12.2018, 12:59
    #39754887
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Новогодний mmap
Вот с тестами вопрос. Я пока прикидываю так и эдак и не нахожу постановки.
Что была в тренде. И использовала mmap.
...
Рейтинг: 0 / 0
11.01.2019, 22:51
    #39758644
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Новогодний mmap
Up. ПОциент не жив и не мёртв а где-то в лимбе. Но я выкину кусок тестового кода который
я начал писать до нового года и забросил.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
#include <stdio.h>
#include <unistd.h>
#include <sys/mman.h>
#include <fcntl.h> 

#include "zlog.h"

typedef unsigned char byte;

zlog_category_t *c;

int app_init_zlog() {	    
	    int rc = zlog_init("zlog.conf");
		if (rc) {
			printf("init failed\n");
			return -1;
		}

		c = zlog_get_category("my_cat");
		if (!c) {
			printf("get cat fail\n");
			zlog_fini();
			return -2;
		}
		return 0;
}


int main(int argc, char **argv, char **env) {
	
		long length = 1024 * 1024;

		if (app_init_zlog()!=0) return -1;
	
		zlog_info(c, ":: Begin");

		int pageSize = getpagesize();

		int fd = open("~/fias_xml.rar", O_RDWR);

		if (fd == -1) {
			zlog_error(c, ":: Error");
			return -1;
		}

		zlog_info(c, ":: pagesize = %d", pageSize);

		zlog_info(c, ":: mmap(...) begin ");

		// void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);
		// 
		void * p = mmap(0, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

        if (p == MAP_FAILED) {
			zlog_error(c, ":: MAP_FAILED!");
			return -1;
		}

		zlog_info(c, ":: mmap(...) end ");

		for(int i=0; i < 100 ; i++) {
			printf("%02X ", ((byte*)p)[i]);
			if ((i + 1) % 16 == 0) {
				printf("\n");
			}
		}
		printf("\n");

		zlog_info(c, ":: OK!");

		zlog_fini();

		close(fd);


	return 0;
}
...
Рейтинг: 0 / 0
12.01.2019, 00:16
    #39758655
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Новогодний mmap
mayton,

А какой смысл мерять printf("%02X ", ((byte*)p)[i]) если printf("%02X "), на несколько порядков медленнее чем ((byte*)p)[i] ?

Лучше суммируйте байты переменую, а потом в конце выводите.

Siemarglmmap использует механизмы вытеснения страниц - и будет эффективен на чтение 4к-страниц.

в остальном это выглядит как костыль, нужны тесты
Ну, память выделенную в mmap можно тюнить под разные задачи. См. http://man7.org/linux/man-pages/man2/madvise.2.html
...
Рейтинг: 0 / 0
12.01.2019, 00:57
    #39758664
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Новогодний mmap
Anatoly MoskovskyА какой смысл мерять printf("%02X ", ((byte*)p)[i]) если printf("%02X "), на несколько порядков медленнее чем ((byte*)p)[i] ?

Сюда не смотрите. Это вообще не бенчмарк а просто тест на корректность. Я хотел убедится что
содержимое соотвествует шапке архива.

По поводу бенчмарка. Я сижу как медведь в зоопарке и раскачиваюсь взад-вперед. Не знаю какую
постановку для теста взять. Пару лет назад у нас была унификация записей (sort -u) в толстых терабайтных
файлах. Може ее приспособить. Здесь должна быть работа с диском и памятью. Но я не знаю как.

Либо какой-то key-value механизм наподобие дисковой хеш-таблички.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тяпничный Новогодний mmap / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]