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

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

Серьёзная тема
9
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, т.к. один фиг остальные страницы никто не выхватит "из серединки" ?
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем
Цифровой мультиметр BENNING MM 1-2

Цифровой мультиметр BENNING MM 1-2 MADE IN GERMANY Отправка в регионы после оплаты В работе не был. Цена 15000 руб. Торга...
Цена: 15 000 руб.

Мощный трансформатор ТПП-317-127/220-50

Трансформатор ТПП-317-127/220-50 Мощный трансформатор до 18 ампер Особенность данного трансформатора большой ток 18А Сердечник:...
Цена: 2 200 руб.

Колесотокарный станок 1ак200 для обточки колес вагонов и тепловозов

Прайс-лист на изготовление колесотокарных станков 1ак200 для обточки колесных пар вагонов и тепловозов без выкатки в 2024г 1.Мобильный...
Цена: 3 360 200 руб.

Трансформатор ОСМ1-0.16у3

Трансформатор ОСМ1-0.16у3 160 ватт. Новый. Цена 2000 руб . Отправка в регионы после оплаты. Трансформаторы серии ОСМ1 мощностью 160...
Цена: 2 000 руб.

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