powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тяпничный Новогодний mmap
7 сообщений из 7, страница 1 из 1
Тяпничный Новогодний mmap
    #39754729
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

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

В продолжение 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
Тяпничный Новогодний mmap
    #39754735
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

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

в остальном это выглядит как костыль, нужны тесты
...
Рейтинг: 0 / 0
Тяпничный Новогодний mmap
    #39754736
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За исключением случая собственного кэширования на запись.
...
Рейтинг: 0 / 0
Тяпничный Новогодний mmap
    #39754887
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот с тестами вопрос. Я пока прикидываю так и эдак и не нахожу постановки.
Что была в тренде. И использовала mmap.
...
Рейтинг: 0 / 0
Тяпничный Новогодний mmap
    #39758644
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Тяпничный Новогодний mmap
    #39758655
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Тяпничный Новогодний mmap
    #39758664
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyА какой смысл мерять printf("%02X ", ((byte*)p)[i]) если printf("%02X "), на несколько порядков медленнее чем ((byte*)p)[i] ?

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

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

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


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