Введение [*]У меня есть собственный драйвер (/dev/DRIVER), использующий DMA. Разработчик драйвера предоставляет несколько тестов, и все выглядит круто. Вы можете создать файловый дескриптор (fd) и отобразить зону с помощью флагов MAP_SHARED и ONLY_READ. Проблема возникает, когда вы добавляете в уравнение CUDA. После выполнения этого примера кода я получаю множество сообщений об ошибках, связанных с плохими страницами и утечкой памяти (2348810240, то же самое, что было отображено).
int main() { std::string filename = "/dev/DRIVER"; size_t file_size = 2348810240; //много места int fd = open(filename.c_str(), O_RDONLY); char* mmap_pointer = (char*)(mmap(nullptr, file_size, PROT_READ, MAP_PRIVATE, fd, 0)); cudaError_t RegisterStatus = cudaHostRegister(mmap_pointer,file_size,cudaHostRegisterPortable | cudaHostRegisterReadOnly); cudaError_t unregisterStatus = cudaHostUnregister(mmap_pointer); munmap(pointer_to_mmap_zone, file_size); закрыть (ФД); вернуть 0; } 1 ноября 16:54:18 ядро asm-m1: трассировка вызовов: 1 ноября 16:54:18 ядро asm-m1: dump_stack+0x5c/0x80 1 ноября 16:54:18 ядро asm-m1: bad_page.cold.111+0x9b/0xa0 1 ноября 16:54:18 ядро asm-m1: __free_pages_ok+0x376/0x3e0 1 ноября 16:54:18 ядро asm-m1: __free_pages+0x33/0x70 1 ноября 16:54:18 ядро asm-m1: vDrxpReleaseGrpBuf+0xa2/0xd0 [drxpd] 1 ноября 16:54:18 ядро asm-m1: iDrxpRls+0x113/0x230 [drxpd] 1 ноября 16:54:18 ядро asm-m1: __fput+0xbe/0x250 1 ноября 16:54:18 ядро asm-m1: Task_work_run+0x8a/0xb0 1 ноября 16:54:18 ядро asm-m1: exit_to_usermode_loop+0xeb/0xf0 1 ноября 16:54:18 ядро asm-m1: do_syscall_64+0x198/0x1a0 1 ноября 16:54:18 ядро asm-m1: запись_SYSCALL_64_after_hwframe+0x65/0xca 1 ноября 16:54:18 ядро asm-m1: RIP: 0033:0x7f879571ba77 1 ноября 16:54:18 ядро asm-m1: Код: 12 b8 03 00 00 00 0f 05 48 3d 00 f0 ff ff 77 3b c3 66 90 53 89 fb 48 83 ec 10 e8 e4 fb ff ff 89 df 89 c2 b8 03 00 00 00 0f 05 3d 00 f0 ff ff 77 2b 89 d7 89 44 24 0c e8 26 fc ff ff 8b 44 24 1 ноября 16:54:18 ядро asm-m1: RSP: 002b: 00007ffe002ec960 EFLAGS: 00000293 ORIG_RAX: 0000000000000003 1 ноября 16:54:18 ядро asm-m1: RAX: 0000000000000000 RBX: 0000000000000003 RCX: 00007f879571ba77 1 ноября 16:54:18 ядро asm-m1: RDX: 0000000000000000 RSI: 00007f8794bd3870 RDI: 0000000000000003 1 ноября 16:54:18 ядро asm-m1: RBP: 00007ffe002eca00 R08: 00007f8794bd3870 R09: 00007f8795d47000 1 ноября 16:54:18 ядро asm-m1: R10: 0000000000000009 R11: 0000000000000293 R12: 0000000000403c90 1 ноября 16:54:18 ядро asm-m1: R13: 00007ffe002ecae0 R14: 0000000000000000 R15: 0000000000000000 1 ноября 16:54:18 ядро asm-m1: ОШИБКА: Плохое состояние страницы в процессе step_by_step_le pfn:5f3e63 1 ноября 16:54:18 ядро asm-m1: страница: ffffed46d7cf98c0 refcount: -1023 Mapcount: 0 отображение: 00000000c1ecc37c индекс: 0x0 1 ноября 16:54:18 ядро asm-m1: флаги: 0x17ffffc0000010 (грязный) 1 ноября 16:54:18 ядро asm-m1: raw: 0017ffffc0000010 0000000000000000 ffffed46d7cf98c8 0000000000000000 1 ноября 16:54:18 ядро asm-m1: raw: 0000000000000000 0000000000000000 fffffc01ffffffff 0000000000000000 1 ноября 16:54:18 ядро asm-m1: страница сброшена, потому что: ненулевой _refcount Интересно, что если я отключу cudaHostUnregister(), счетчик ссылок в трассировке будет равен 1, как и ожидалось, потому что cuda никогда не опубликует свою ссылку на страницы
1 ноября 16:59:11 ядро asm-m1: трассировка вызовов: 1 ноября 16:59:11 ядро asm-m1: dump_stack+0x5c/0x80 1 ноября 16:59:11 ядро asm-m1: bad_page.cold.111+0x9b/0xa0 1 ноября 16:59:11 ядро asm-m1: __free_pages_ok+0x376/0x3e0 1 ноября 16:59:11 ядро asm-m1: __free_pages+0x33/0x70 1 ноября 16:59:11 ядро asm-m1: vDrxpReleaseGrpBuf+0xa2/0xd0 [drxpd] 1 ноября 16:59:11 ядро asm-m1: iDrxpRls+0x113/0x230 [drxpd] 1 ноября 16:59:11 ядро asm-m1: __fput+0xbe/0x250 1 ноября 16:59:11 ядро asm-m1: Task_work_run+0x8a/0xb0 1 ноября 16:59:11 ядро asm-m1: do_exit+0x393/0xb00 1 ноября 16:59:11 ядро asm-m1: do_group_exit+0x3a/0xa0 1 ноября 16:59:11 ядро asm-m1: __x64_sys_exit_group+0x14/0x20 1 ноября 16:59:11 ядро asm-m1: do_syscall_64+0x5b/0x1a0 1 ноября 16:59:11 ядро asm-m1: запись_SYSCALL_64_after_hwframe+0x65/0xca 1 ноября 16:59:11 ядро asm-m1: RIP: 0033:0x7f0dfcc33026 1 ноября 16:59:11 ядро asm-m1: Код: невозможно получить доступ к байтам кода операции в RIP 0x7f0dfcc32ffc. 1 ноября 16:59:11 ядро asm-m1: RSP: 002b: 00007ffcb2771718 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7 1 ноября 16:59:11 ядро asm-m1: RAX: ffffffffffffffda RBX: 00007f0dfcf25880 RCX: 00007f0dfcc33026 1 ноября 16:59:11 ядро asm-m1: RDX: 0000000000000000 RSI: 000000000000003c RDI: 0000000000000000 1 ноября 16:59:11 ядро asm-m1: RBP: 0000000000000000 R08: 00000000000000e7 R09: ffffffffffffef60 1 ноября 16:59:11 ядро asm-m1: R10: 0000000000000000 R11: 0000000000000246 R12: 00007f0dfcf25880 1 ноября 16:59:11 ядро asm-m1: R13: 0000000000000014 R14: 00007f0dfcf2e388 R15: 0000000000000000 1 ноября 16:59:11 ядро asm-m1: ОШИБКА: плохое состояние страницы в процессе Memory_leak_sim pfn:bf7e3c 1 ноября 16:59:11 ядро asm-m1: страница: ffffed46efdf8f00 refcount: 1 Mapcount: 0 отображение: 00000000c1ecc37c индекс: 0x0 1 ноября 16:59:11 ядро asm-m1: флаги: 0x17ffffc0000000() 1 ноября 16:59:11 ядро asm-m1: raw: 0017ffffc0000000 ffffed46efdf8f08 ffffed46efdf8f08 0000000000000000 1 ноября 16:59:11 ядро asm-m1: raw: 0000000000000000 0000000000000000 00000001ffffffff 0000000000000000 1 ноября 16:59:11 ядро asm-m1: страница сброшена, потому что: ненулевой _refcount Запросы [*]Это проблема непосредственно в драйвере? Почему все работает отлично, когда cudaHostUnregister() не вызывается?
[*]
Как это отследить? Также, если кто-то может помочь мне узнать, как отслеживать значение каждого счетчика ссылок и какая функция изменяет значение на отрицательное. Спасибо, с:
[*]
Способы отслеживания переменной refcount в пространстве ядра. Какие функции могут быть задействованы
[*]
Объяснение того, как recount_t может получить отрицательное число? что вообще значит?
[*]
Это проблема драйвера, cuda или реализации?
Отрицательный счетчик ссылок после запуска cudaHostRegister-cudaHostUnregister в зоне DMA с использованием mmap (результ ⇐ C++
Программы на C++. Форум разработчиков
1698828538
Anonymous
Введение [*]У меня есть собственный драйвер (/dev/DRIVER), использующий DMA. Разработчик драйвера предоставляет несколько тестов, и все выглядит круто. Вы можете создать файловый дескриптор (fd) и отобразить зону с помощью флагов MAP_SHARED и ONLY_READ. Проблема возникает, когда вы добавляете в уравнение CUDA. После выполнения этого примера кода я получаю множество сообщений об ошибках, связанных с плохими страницами и утечкой памяти (2348810240, то же самое, что было отображено).
int main() { std::string filename = "/dev/DRIVER"; size_t file_size = 2348810240; //много места int fd = open(filename.c_str(), O_RDONLY); char* mmap_pointer = (char*)(mmap(nullptr, file_size, PROT_READ, MAP_PRIVATE, fd, 0)); cudaError_t RegisterStatus = cudaHostRegister(mmap_pointer,file_size,cudaHostRegisterPortable | cudaHostRegisterReadOnly); cudaError_t unregisterStatus = cudaHostUnregister(mmap_pointer); munmap(pointer_to_mmap_zone, file_size); закрыть (ФД); вернуть 0; } 1 ноября 16:54:18 ядро asm-m1: трассировка вызовов: 1 ноября 16:54:18 ядро asm-m1: dump_stack+0x5c/0x80 1 ноября 16:54:18 ядро asm-m1: bad_page.cold.111+0x9b/0xa0 1 ноября 16:54:18 ядро asm-m1: __free_pages_ok+0x376/0x3e0 1 ноября 16:54:18 ядро asm-m1: __free_pages+0x33/0x70 1 ноября 16:54:18 ядро asm-m1: vDrxpReleaseGrpBuf+0xa2/0xd0 [drxpd] 1 ноября 16:54:18 ядро asm-m1: iDrxpRls+0x113/0x230 [drxpd] 1 ноября 16:54:18 ядро asm-m1: __fput+0xbe/0x250 1 ноября 16:54:18 ядро asm-m1: Task_work_run+0x8a/0xb0 1 ноября 16:54:18 ядро asm-m1: exit_to_usermode_loop+0xeb/0xf0 1 ноября 16:54:18 ядро asm-m1: do_syscall_64+0x198/0x1a0 1 ноября 16:54:18 ядро asm-m1: запись_SYSCALL_64_after_hwframe+0x65/0xca 1 ноября 16:54:18 ядро asm-m1: RIP: 0033:0x7f879571ba77 1 ноября 16:54:18 ядро asm-m1: Код: 12 b8 03 00 00 00 0f 05 48 3d 00 f0 ff ff 77 3b c3 66 90 53 89 fb 48 83 ec 10 e8 e4 fb ff ff 89 df 89 c2 b8 03 00 00 00 0f 05 3d 00 f0 ff ff 77 2b 89 d7 89 44 24 0c e8 26 fc ff ff 8b 44 24 1 ноября 16:54:18 ядро asm-m1: RSP: 002b: 00007ffe002ec960 EFLAGS: 00000293 ORIG_RAX: 0000000000000003 1 ноября 16:54:18 ядро asm-m1: RAX: 0000000000000000 RBX: 0000000000000003 RCX: 00007f879571ba77 1 ноября 16:54:18 ядро asm-m1: RDX: 0000000000000000 RSI: 00007f8794bd3870 RDI: 0000000000000003 1 ноября 16:54:18 ядро asm-m1: RBP: 00007ffe002eca00 R08: 00007f8794bd3870 R09: 00007f8795d47000 1 ноября 16:54:18 ядро asm-m1: R10: 0000000000000009 R11: 0000000000000293 R12: 0000000000403c90 1 ноября 16:54:18 ядро asm-m1: R13: 00007ffe002ecae0 R14: 0000000000000000 R15: 0000000000000000 1 ноября 16:54:18 ядро asm-m1: ОШИБКА: Плохое состояние страницы в процессе step_by_step_le pfn:5f3e63 1 ноября 16:54:18 ядро asm-m1: страница: ffffed46d7cf98c0 refcount: -1023 Mapcount: 0 отображение: 00000000c1ecc37c индекс: 0x0 1 ноября 16:54:18 ядро asm-m1: флаги: 0x17ffffc0000010 (грязный) 1 ноября 16:54:18 ядро asm-m1: raw: 0017ffffc0000010 0000000000000000 ffffed46d7cf98c8 0000000000000000 1 ноября 16:54:18 ядро asm-m1: raw: 0000000000000000 0000000000000000 fffffc01ffffffff 0000000000000000 1 ноября 16:54:18 ядро asm-m1: страница сброшена, потому что: ненулевой _refcount Интересно, что если я отключу cudaHostUnregister(), счетчик ссылок в трассировке будет равен 1, как и ожидалось, потому что cuda никогда не опубликует свою ссылку на страницы
1 ноября 16:59:11 ядро asm-m1: трассировка вызовов: 1 ноября 16:59:11 ядро asm-m1: dump_stack+0x5c/0x80 1 ноября 16:59:11 ядро asm-m1: bad_page.cold.111+0x9b/0xa0 1 ноября 16:59:11 ядро asm-m1: __free_pages_ok+0x376/0x3e0 1 ноября 16:59:11 ядро asm-m1: __free_pages+0x33/0x70 1 ноября 16:59:11 ядро asm-m1: vDrxpReleaseGrpBuf+0xa2/0xd0 [drxpd] 1 ноября 16:59:11 ядро asm-m1: iDrxpRls+0x113/0x230 [drxpd] 1 ноября 16:59:11 ядро asm-m1: __fput+0xbe/0x250 1 ноября 16:59:11 ядро asm-m1: Task_work_run+0x8a/0xb0 1 ноября 16:59:11 ядро asm-m1: do_exit+0x393/0xb00 1 ноября 16:59:11 ядро asm-m1: do_group_exit+0x3a/0xa0 1 ноября 16:59:11 ядро asm-m1: __x64_sys_exit_group+0x14/0x20 1 ноября 16:59:11 ядро asm-m1: do_syscall_64+0x5b/0x1a0 1 ноября 16:59:11 ядро asm-m1: запись_SYSCALL_64_after_hwframe+0x65/0xca 1 ноября 16:59:11 ядро asm-m1: RIP: 0033:0x7f0dfcc33026 1 ноября 16:59:11 ядро asm-m1: Код: невозможно получить доступ к байтам кода операции в RIP 0x7f0dfcc32ffc. 1 ноября 16:59:11 ядро asm-m1: RSP: 002b: 00007ffcb2771718 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7 1 ноября 16:59:11 ядро asm-m1: RAX: ffffffffffffffda RBX: 00007f0dfcf25880 RCX: 00007f0dfcc33026 1 ноября 16:59:11 ядро asm-m1: RDX: 0000000000000000 RSI: 000000000000003c RDI: 0000000000000000 1 ноября 16:59:11 ядро asm-m1: RBP: 0000000000000000 R08: 00000000000000e7 R09: ffffffffffffef60 1 ноября 16:59:11 ядро asm-m1: R10: 0000000000000000 R11: 0000000000000246 R12: 00007f0dfcf25880 1 ноября 16:59:11 ядро asm-m1: R13: 0000000000000014 R14: 00007f0dfcf2e388 R15: 0000000000000000 1 ноября 16:59:11 ядро asm-m1: ОШИБКА: плохое состояние страницы в процессе Memory_leak_sim pfn:bf7e3c 1 ноября 16:59:11 ядро asm-m1: страница: ffffed46efdf8f00 refcount: 1 Mapcount: 0 отображение: 00000000c1ecc37c индекс: 0x0 1 ноября 16:59:11 ядро asm-m1: флаги: 0x17ffffc0000000() 1 ноября 16:59:11 ядро asm-m1: raw: 0017ffffc0000000 ffffed46efdf8f08 ffffed46efdf8f08 0000000000000000 1 ноября 16:59:11 ядро asm-m1: raw: 0000000000000000 0000000000000000 00000001ffffffff 0000000000000000 1 ноября 16:59:11 ядро asm-m1: страница сброшена, потому что: ненулевой _refcount Запросы [*]Это проблема непосредственно в драйвере? Почему все работает отлично, когда cudaHostUnregister() не вызывается?
[*]
Как это отследить? Также, если кто-то может помочь мне узнать, как отслеживать значение каждого счетчика ссылок и какая функция изменяет значение на отрицательное. Спасибо, с:
[*]
Способы отслеживания переменной refcount в пространстве ядра. Какие функции могут быть задействованы
[*]
Объяснение того, как recount_t может получить отрицательное число? что вообще значит?
[*]
Это проблема [b]драйвера[/b], [b]cuda[/b] или [b]реализации[/b]?
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия