Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

V1.1.2 has slower write performance compared to v1.0.2 #5321

Open
lidaohang opened this issue Nov 26, 2024 · 12 comments
Open

V1.1.2 has slower write performance compared to v1.0.2 #5321

lidaohang opened this issue Nov 26, 2024 · 12 comments

Comments

@lidaohang
Copy link
Contributor

lidaohang commented Nov 26, 2024

image
image

在v1.0.2 和 v1.1.2 进行对比,发现多了一层Access开销。

m.Access(ctx, parent, MODE_MASK_W, &pattr)

image
image

在v1.0.2 和 v1.1.2 进行对比,发现多了目录统计的开销。

if _type == TypeDirectory { tx.set(m.dirStatKey(ino), m.packDirStat(&dirStat{})) }

@lidaohang lidaohang added the kind/bug Something isn't working label Nov 26, 2024
@lidaohang
Copy link
Contributor Author

@SandyXSD 有空帮忙看看, 这两个改动是否能去掉, 目前性能下降很严重。

@jiefenghuang
Copy link
Contributor

@lidaohang access前已经获取attr, 影响不大.
dirStat默认的初始化可以优化下去除, 我们会提pr处理下.

@lidaohang
Copy link
Contributor Author

lidaohang commented Nov 26, 2024

我看Write 函数里面也多了一次调用 tx.set(m.chunkKey(inode, indx), val), 这个多了一次rpc 开销。 @jiefenghuang
tx.set(m.inodeKey(inode), m.marshal(&attr)) tx.set(m.chunkKey(inode, indx), val)

@jiefenghuang
Copy link
Contributor

jiefenghuang commented Nov 26, 2024

我看Write 函数里面也多了一次调用 tx.set(m.chunkKey(inode, indx), val), 这个多了一次rpc 开销。 @jiefenghuang tx.set(m.inodeKey(inode), m.marshal(&attr)) tx.set(m.chunkKey(inode, indx), val)

没有增加, 这个是需要的, 原先也有append, 一次元数据插入.

@jiefenghuang jiefenghuang added the area/performance Issues or PRs related to performance label Nov 26, 2024
@lidaohang
Copy link
Contributor Author

@lidaohang access前已经获取attr, 影响不大. dirStat默认的初始化可以优化下去除, 我们会提pr处理下.

这个怎么优化呢? 是直接去掉吗,我这边测试pending了,急需优化这块。

@jiefenghuang
Copy link
Contributor

jiefenghuang commented Nov 26, 2024

@lidaohang access前已经获取attr, 影响不大. dirStat默认的初始化可以优化下去除, 我们会提pr处理下.

这个怎么优化呢? 是直接去掉吗,我这边测试pending了,急需优化这块。

mknod的set可以直接去除, 其他获取dirStatKey的地方做一下兼容, 如果value == nil, 返回空的dirStatKey结构

@lidaohang
Copy link
Contributor Author

lidaohang commented Nov 26, 2024

@lidaohang access前已经获取attr, 影响不大. dirStat默认的初始化可以优化下去除, 我们会提pr处理下.

这个怎么优化呢? 是直接去掉吗,我这边测试pending了,急需优化这块。

mknod的set可以直接去除, 其他获取dirStatKey的地方做一下兼容, 如果value == nil, 返回空的dirStatKey结构

感谢, 😭,我改改。看了下就这一个地方, 帮忙review下。


func (m *kvMeta) doGetDirStat(ctx Context, ino Ino, trySync bool) (*dirStat, syscall.Errno) {
	rawStat, err := m.get(m.dirStatKey(ino))
	if err != nil {
		return nil, errno(err)
	}
	if rawStat != nil {
		return m.parseDirStat(rawStat), 0
	}
	if trySync {
		return m.doSyncDirStat(ctx, ino)
	}
	return nil, 0
}


@jiefenghuang
Copy link
Contributor

jiefenghuang commented Nov 26, 2024

如果没有用到quota和目录统计功能, 直接去除也不影响, 其他地方不需要兼容.
原先会在update 或者 调用(quota 或者 目录统计刷新)的时候修复, 会有额外负载, 不使用quota或者目录统计就不影响.

@jiefenghuang jiefenghuang removed kind/bug Something isn't working area/performance Issues or PRs related to performance labels Nov 26, 2024
@lidaohang
Copy link
Contributor Author

update

目前我们没使用quota和目录统计功能, 我直接在mknod 里面直接去掉如果的逻辑, 不用改其他地方的吧, 会自动兼容吗?会不会存在多查询的开销呢?

if _type == TypeDirectory { 
      tx.set(m.dirStatKey(ino), m.packDirStat(&dirStat{})) 
}

@jiefenghuang
Copy link
Contributor

不会.

@Hanson813
Copy link

同样的读取和写入动作,1.0.2 明显比 1.1.2 速度更快,还可能有哪些变更导致?
1.0.2:
img_v3_02h0_ec02c159-4283-4c43-96bb-ac5f42ad059g
1.1.2:
img_v3_02h0_08aabd97-a6ce-44bf-8d20-de401d897acg

@jiefenghuang
Copy link
Contributor

影响因素很多, 直接看juicefs的日志输出吧

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants