Tôi đang cố gắng phân bổ bộ đệm DMA cho khối lượng công việc HPC. Nó đòi hỏi 64GB dung lượng bộ đệm. Ở giữa tính toán, một số dữ liệu được tải xuống thẻ PCIe. Thay vì sao chép dữ liệu vào một loạt các bộ đệm 4MB dinky được đưa ra bởi pci_alloc_consistent, tôi muốn tạo 64 bộ đệm 1GB, được hỗ trợ bởi 1Pb HugePages.Làm cách nào để phân bổ bộ đệm DMA được hỗ trợ bởi HugePages 1GB trong mô-đun hạt nhân Linux?
Một số thông tin nền: phiên bản kernel: CentOS 6.4/2.6.32-358.el6.x86_64 tùy chọn khởi động hạt nhân: hugepagesz = 1g hugepages = 64 default_hugepagesz = 1g
phần liên quan của/proc/meminfo: AnonHugePages: 0 kB HugePages_Total: 64 HugePages_Free: 64 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 1048576 kB DirectMap4k: 848 kB DirectMap2M: 2.062.336 kB DirectMap1G: 132.120.576 kB
Tôi có thể gắn kết -t hugetlbfs nodev/mnt/hugepages. CONFIG_HUGETLB_PAGE là đúng. MAP_HUGETLB được định nghĩa.
Tôi đã đọc một số thông tin về cách sử dụng libhugetlbfs để gọi get_huge_pages() trong không gian người dùng, nhưng lý tưởng bộ đệm này sẽ được cấp phát trong không gian hạt nhân. Tôi đã thử gọi do_mmap() với MAP_HUGETLB nhưng nó dường như không thay đổi số lượng hugepages miễn phí, vì vậy tôi không nghĩ rằng nó đã thực sự sao lưu mmap với các trang lớn.
Vì vậy, tôi đoán những gì tôi đang nhận được, có bất kỳ cách nào tôi có thể ánh xạ bộ đệm tới 1GB HugePage trong không gian hạt nhân hay không? Hoặc nếu bất cứ ai biết về bất kỳ cách nào khác tôi có thể nhận được một số lượng (1-64GB) bộ nhớ vật lý liền kề có sẵn như là một bộ đệm hạt nhân?
Câu hỏi thú vị, là mục tiêu của bạn chủ yếu để tránh sao chép giữa hạt nhân và không gian người dùng? – ChuckCottrill
Tất cả các API này đều dành cho không gian người dùng. Hãy xem cách thực hiện hugetlbfs, đặc biệt là 'hugetlbfs_file_mmap'. –
@muusbolla Bạn có thể tìm thấy câu trả lời không? –