🔗 特性:COSS(循环对象存储系统)
- 目标:在所有 Squid 中稳定 COSS 系统。
- 状态:2.6+ 已完成。3.x 需要移植 2.6 的稳定性修复
- 版本: 2.6
- 开发者:Henrik_Nordström,欢迎其他贡献者
- 优先级: 2
🔗 COSS 是什么?
COSS 是一个由 Eric Stern 最初设计的循环对象存储系统。COSS 使用单个文件,并且每个条带(stripe)的大小固定,在文件中的位置也固定。条带大小是编译时选项。
当对象被写入 COSS 条带时,它们的位置会被预留,并将数据复制到条带的内存副本中。因此,在将对象存储到 COSS 文件系统中之前,必须知道对象的大小。(这就是为什么在 coss cache_dir 中有 max-size 的要求。)
当一个条带被填满时,该条带将被写入磁盘,并创建一个新的内存条带。
🔗 性能更好吗?
是的。在撰写本文时,COSS 是 squid 中性能最好的 cache_dir。由于 COSS cache_dir 只能存储小型缓存对象,因此需要将其与其他类型的 cache_dir(aufs, diskd 或 ufs)结合使用,以允许缓存大型对象。由于 COSS 更有效地处理小型对象,非 COSS cache_dir 的性能也会提高,因为它们需要处理的对象数量更少,但个头更大。
🔗 如何使用?
您需要运行 Squid 版本 2.6 或更高版本才能运行稳定的 COSS 版本。
要配置 Squid 使用 COSS,请使用 `--enable-storeio` 选项(以及 `--enable-coss-aio-ops` 以启用异步 I/O)。
% ./configure --enable-storeio=coss,ufs
🔗 如果我使用 COSS,是否必须清除当前缓存?
是的。COSS 使用单个文件或直接分区访问来存储对象。要准备一个文件或磁盘用于 COSS,您需要运行以下命令:
dd if=/dev/zero bs=1048576 count=<size> of=<outfile>
其中
- size 是 COSS 分区的大小(MB)
- outfile 是您想用作 COSS 存储的分区或文件名
🔗 COSS 需要哪些选项?
COSS 分区的最小配置如下:
cache_dir coss <file> <size> max-size=<max-size>
cache_swap_log /var/spool/squid/%s
其中
- file 是您想用作 COSS 存储的分区、目录或文件名。如果文件不存在,您需要预先创建它。
- size 是 COSS cache_dir 的大小(MB)
- max-size 是此 cache_dir 可以存储的最大对象的大小。在默认配置下,此值不能大于 1MB。
如果使用常规文件名作为 <file>,请使用 `cache_swap_log` 选项指定一个目录,Squid 将在该目录中为所有没有自己目录的 cache_dir 存储 `swap.state` 文件(见下文)。
如果使用目录名作为 <file>,Squid 将在该目录中创建 COSS 存储,使用“stripe”作为文件名,并将 `swap.state` 文件放在同一目录中。在这种情况下,Squid 将忽略上面讨论的 `cache_swap_state` 选项。为 COSS 存储指定目录有助于将 COSS cache_dir 的 I/O 和故障隔离到单个磁盘。
🔗 COSS 还有其他配置选项吗?
COSS 分区有许多不同的配置选项可用。这些选项包括:
block-size=<n>
这将限制 COSS cache_dir 的最大大小(大小计算为磁盘空间 + 任何 `membufs` 的大小),如下所示:
- n=512 - 8192 MB
- n=1024 - 16384 MB
- n=2048 - 32768 MB
- n=4096 - 65536 MB
- n=8192 - 131072 MB
`block-size` 的默认值为 512 字节。
overwrite-percent=<n>
这将允许在 COSS cache_dir 的增长大小、LRU 算法的准确性以及使用的磁盘 I/O 带宽量之间进行权衡。`<n>` 的值必须在 0 到 100 之间。
如果设置为 0,COSS cache_dir 将始终将任何缓存命中复制到当前条带。这会减少缓存中存储的唯一数据量,增加使用的磁盘带宽,但 LRU 算法会完美工作。
如果设置为 100,COSS cache_dir 将永远不会将任何缓存命中复制到当前条带。这意味着所有对象都只存储一次,减少了使用的总磁盘带宽,但实际上使磁盘成为 FIFO(即流行对象仅在 COSS 循环回原始条带的持续时间内保留在 cache_dir 中)。
`overwrite-percent` 的默认值 50 在两个极端之间取得了良好的平衡。
max-stripe-waste=<n>
此选项设置 COSS cache_dir 在将条带写入磁盘时可能浪费的最大空间量。每次写入 COSS 条带时,它最多会浪费 `max-size` 值的空间。如果 `max-size` 设置为较大的值(例如,当 COSS 条带为 1MB 时 `max-size` 为 512K,则条带中最多 50% 的空间可以写入磁盘而没有数据),这会成为一个问题。`max-stripe-waste` 通过动态减小 `max-size` 值来解决此问题,以确保每次条带写入只浪费 `<n>` 字节的空间。
`max-stripe-waste` 选项默认未设置。
membufs=<n>
此选项确定 COSS 用于将缓存命中发送给客户端的条带的最大数量。它旨在限制给定 COSS cache_dir 可能导致 squid 使用的内存量。一旦 squid 用尽 `membufs`,它就会开始将所有对象移动到当前磁盘条带,从而有效地忽略 `overwrite-percent` 设置。
`membufs` 的默认值为 10。
maxfullbufs=<n>
此选项设置将要被释放但已满的条带的最大数量,这些条带将被此 cache_dir 保存在内存中。同样,这是为了限制给定 COSS cache_dir 可能增长使用的内存量。
每个 cache_dir 将最后 2 个 `maxfullbufs` 保留用于缓存命中(即,只有在 squid 用尽 `membufs` 时才会使用它们)。这是为了在存储新对象的代价下实现更高的命中率。
默认情况下,`maxfullbufs` 选项不设置限制(即,我们总是可以接受新对象)。
🔗 存储索引重建
当前的(Squid 2.6)COSS 实现需要扫描整个数据文件来重建对象索引,这会在每次 squid 重新配置或轮换日志文件时发生。这意味着在执行这些活动时会出现 CPU 负载高峰。
🔗 示例
cache_dir coss /var/spool/squid/coss 100 block-size=512 max-size=131072
- 这将使用文件 `/var/spool/squid/coss` 作为文件名
- cache_dir 将存储最多 100MB 的数据
- 块大小为 512 字节
-
将存储长度最多为 131072 字节的对象。
cache_dir coss /dev/sdf1 34500 max-size=524288 max-stripe-waste=32768 block-size=4096 maxfullbufs=10
- 这将使用 /dev/sdf1 分区
- cache_dir 将存储最多 34500MB 的数据
- 块大小为 4096 字节
- 将存储长度最多为 524288 字节的对象。
- 如果给定条带的可用空间小于 524288 字节,此 cache_dir 将只接受更小的对象,直到条带中剩余的空间少于 32768 字节。
- 如果默认条带大小 1MB 未更改,将为等待写入磁盘的条带使用最多 10MB 的空间。
类别:功能
导航:站点搜索,站点页面,类别,🔼 向上