Performance 使用ssd和mmap改进并发文件读取

Performance 使用ssd和mmap改进并发文件读取,performance,concurrency,mmap,solid-state-drive,Performance,Concurrency,Mmap,Solid State Drive,我有大量的气象档案。太大,不适合装在闸板中 我需要执行大量并发随机读取。 所以,我认为SSD+mmap可以提高性能 但是并发mmap读取是什么呢?他们应该如何组织 是否存在并发原因(线程之间共享的数据结构和资源的争用)使您希望在不同的线程中独立打开相同的文件?如果没有,那么我看不出这样做的理由。它只会使内核的工作更加困难,因为它必须跟踪一组不同的内存映射(每个线程一个),这些映射最终都映射到同一个对象,消耗更多的文件描述符(除非有非常多的文件,否则没什么大不了的),并且在多次mmap相同的文件时

我有大量的气象档案。太大,不适合装在闸板中

我需要执行大量并发随机读取。 所以,我认为SSD+mmap可以提高性能

但是并发mmap读取是什么呢?他们应该如何组织


是否存在并发原因(线程之间共享的数据结构和资源的争用)使您希望在不同的线程中独立打开相同的文件?如果没有,那么我看不出这样做的理由。它只会使内核的工作更加困难,因为它必须跟踪一组不同的内存映射(每个线程一个),这些映射最终都映射到同一个对象,消耗更多的文件描述符(除非有非常多的文件,否则没什么大不了的),并且在多次mmap相同的文件时消耗更多的地址空间

如果我理解在您的场景中,文件大多是不经常打开、大量读取,然后不经常关闭的,那么我认为线程之间不会有太多争用。因此,请全局打开所有线程的文件


无论线程之间是否存在争用以管理打开的文件的情况,都有一个最重要的理由支持每个进程只映射一次每个文件,即如果您的地址空闲空间只有32位。如果您处于32位模式,那么如果您的文件很大,并且希望映射其中的重要部分,那么地址空间是一个相当有限的资源。在这种情况下,您肯定需要节省地址空间,不要在两个不同的线程中浪费地映射同一个文件两次。

我将使用NetCDF C api,并提供本机mmap支持。这是在这里实现的:当然,我将使用64位。