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,既写⼊100大文件发送
00个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。