--}}
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем

Вопрос о памяти в Линуксе

Серьёзная тема
8
13
С друзьями на NN.RU
В социальных сетях
Поделиться
Collins
07.12.2016
Кто-нибудь может человеческим языком объяснить, почему __get_free_pages() устанавливает page::_count в единицу только для первой аллокированной страницы, оставляя его равным 0 для всех остальных?
Drowt
07.12.2016
Надо контекст смотреть. По логике когда ты просишь странички, то тебе их только резирвируют, но алоцирована страница будет по мере использования. Т.е. у тебя первая страница алицируется, поэтому для нее _count стоит в 1, остальные реально не используются поэтому там стоит 0. Попробуй туда реально что то записать.
Зу
07.12.2016
Когда-то задавался подобным вопросом.
Может поможет вот это:
https://blog.ramses-pyramidenbau.de/?p=87
www.win.tue.nl/~aeb/linux/lk/lk-9.html#ss9.6
там в конце ещё ссылка на анекдот есть
Collins
07.12.2016
Похоже так и есть. Используя __get_free_pages в ядре, я почему-то совершенно упустил мысль о том, что с этой функцией так же легко могу нарваться на известную фишку, описанную по первой ссылке. Попробую проверить _count страницы после записи.
Collins
08.12.2016
Изначально планировал реализовать page fault хэндлер для своего memory mapped character device driver-а и подсовывать пользовательскому спейсу пэйджи ядра. Все прекрасно работало пока пэйджи аллокировались по одной. Это меня категорически не устраивало. При аллокировании последовательности пэйджей на любой имеющей индекс отличный от нуля происходил BUG_ON при вызове get_page из-за пресловутого reference counter-а. Суть проблемы ясна, что делать - тоже. Но в итоге нашел замечательную функцию ядра и решил кардинально все поменять, выделяя память из high memory с помощью vmalloc-а, а затем в mmap хэндлере просто перемапировать эту память ядра на пользовательское пространство. В результате все работает и летает без всяких page fault хэндлеров.
Зу
08.12.2016
ага, спасибо, может пригодится когда-нибудь
Collins
08.12.2016
Забыл указать название - remap_pfn_range()
Drowt
08.12.2016
А ты не прикидывал насколько все быстрее стало работать? Идея интересная
Collins
08.12.2016
Ес-но да, дернул тестовый gpio до и после транзакции. Когда избавился от copy_to_user/copy_from_user, заменив на работу с mmap, то общее время транзакции уменьшилось в 11 раз. Это с учетом той части, которая после доставки данных в ядро что-то с ними делает и которая не менялась.
Collins писал(а)
Когда избавился от copy_to_user/copy_from_user, заменив на работу с mmap, то общее время транзакции уменьшилось в 11 раз.

логично, что не копировать это быстрее, чем копировать.
хотя и копирование-то разное бывает: cpu жюжжит в цикле и по'cpuword'но перекладывает (fuuu!...), а может инструкции какие хитрые есть в этом cpu для копирования?, а где-то так вообще есть dma контроллер с поддержкой в т.ч. mem2mem copy...
Collins
10.12.2016
Спасибо, кэп. Если бы я предполагал использование DMA на другом конце, то наверное аллокировал бы память соответствующим образом. Теперь по поводу копировать/не копировать. Аппликуха же не может работать с памятью ядра, приходится обрабатывать page fault, чтобы подсунуть страницу кернела. Т.е. небольшие потери скорости все же есть.
может реализация https://en.wikipedia.org/wiki/Buddy_memory_allocation такая, что он помечает только первую страницу в contiguous block, т.к. один фиг остальные страницы никто не выхватит "из серединки" ?
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем
Последние темы форумов
Форум Тема (Автор) Последний ответ Ответов
Медицина Феринжект   -  LOE-NN 08.09.2024 в 18:38:45 3
Прибор Мультиметр Chauvin Arnoux c.A 5260

Мультиметр "chauvin arnoux c.A 5260"- франция Производитель: chauvin arnoux, франция гост реестр рф: 20275-07 лежал в...
Цена: 18 000 руб.

Подкладка КБ65 бу ГОСТ 16277-93 предлагаем к отгрузке

Подкладка КБ-65 ГОСТ 16277-2016, на складе в нескольких вариантах: новая, б/у. Доставка по России, или на самовывоз, с нашего...

Запасные части гусеничного хода буровых установок

Запасные части гусеничного хода буровых установок (станков) Sandvik, Tamrock, Atlas Copco, EPIROC, Ingersoll Rand, Caterpillar, SANY,...
Цена: 24 500 руб.

Конденсатор Ионистор Производитель: Elna

Ионистор Производитель: Elna America 22 штуки. Цена 250 рубшт. Супер конденсатор Ионисторы 1F*5,5 V ELNA 1 Ф, 5.5 В 1 фарад =...
Цена: 250 руб.

Программист-разработчик Full-Stack ГК "Kolobox"
70000 -
100000 руб.
Высшее образование, стаж работы более 5 лет, полная занятость
Разработчик .net Profit Search
70000 -
100000 руб.
Неполное среднее образование, стаж работы 3-5 лет, полная занятость
Frontend-разработчик Profit Search
40000 -
50000 руб.
Стаж работы 3-5 лет, частичная занятость
Программист 1С НПП ПРО-М
от 110 000 руб.
Высшее образование, стаж работы 3-5 лет, полная занятость