ceph文件读取写入-个人见解
以下纯属个人见解,肯定有点问题的,仅供参考。
1、单个4k大小的文件写入到文件系统,每个文件占用一个对象,但该对象大小不是4M 而是该文件实际大小。例如。写入100个4k 的文件,对象个数为100,每个对象大小为4k。写入1000个4K的文件也是如此。此时元数据增加也非常厉害,这也就是为什么,ceph文件系统处理海量小文件的时候的难处。
2、单文件大小大于等于4M,写入到文件系统之后,会实际切片,分成不同的对象。例如6M的文件切片为4M和2M的对象。分别存储到实际的osd中。
3、对于ceph底层rados来说,一个文件就是处理对象基础,当这个文件小于4M,则占用一个对象,对象大小为文件大小,当这个文件大于4M,则切片成不同的对象,但是对象前面的文件标识符绝对是一样的。所以,当写一个大文件以4K大小写入文件系统的时候,相当于往集群写入单次IO大小为4k,当IO大小累计到4M的时候,rados生成一个对象进行实际存储到osd上,单该对象文件达到实际的osd磁盘之后,则会根据osd本身的文件系统(xfs,ext4)进行计算落到磁盘的具体扇区位置,这也就是涉及到具体磁盘的寻址,旋转时间。这所有的一切,考究的就是cephfs文件系统的io处理能力,既IOPS。所以底层的磁盘的好坏对于ceph文件系统的性能也好,iops也好都是很重要的。
 
4、rbd块设备 只map不格式本地系统,类似一个裸设备。里面没有任何的对象。
5、当rbd块设备map之后,进行文件系统的格式化之后使用,则会增加日志型文件系统的一些对象。
6、rbd块设备格式化之后,写入单4K的文件,rbd池对象个数不会增加,会将该对象内容写入到默认格式化之后的某个对象里面。除非改对象大小达到4M,既写入10000个4K的文件,底层rbd会将这些文件进行合并,达到4M之后,生成新的对象继续存储。但是,不是严格意义上的以4M为大小生成新的对象。
 
7、文件系统读数据的时候(块没有测试),不是说累计到4M对象大小才能读出来。这里要区分一个概念,咱们读文件的时候,所见到的就是cephfs文件系统(xfs,ext4)层面的独立的个体文件,有具体的文件名。但是该文件对于ceph底层rados来说,不是我们见到的独立的文件,而是一个一个的对象文件,存储在不同的osd中。所以,当咱们读一个4k的文件的时候,该文件对于cephfs文件系统来说就是一个文件,从rados层面看就是一个4k的对象,这个对象存储在哪个osd(主 副)上,则主osd磁盘有读的流量。当改文件大于4M的时候,比方说6M文件纯粹的就是读2个对象出来,一个4M,1个2M。这2个对象所在的磁盘有读流量,且读流量与对象大小相同。
8、当大文件以4K的大小向集群发送读请求的时候,说白了就是第3条所说的单个IO  4k大小的读请求,该请求到达rados的时候,通过元数据信息计算出该文件实际对象,以及实际对象所在的磁盘上。则向磁盘发送读请求,而到了osd磁盘本身的时候,则由磁盘本身的文件系统(xfs ext4)计算该读请求所要读取的文件实际存储扇区位置,也通过旋转 寻址 将实际的文件读出来。也就是cephfs读的IOPS。
 
                    
                
                
            
        
浙公网安备 33010602011771号