clflush、clflushopt、clwb、pcommit、ntstore

参考:
https://danluu.com/clwb-pcommit/ (14年文档)
https://blog.csdn.net/maokelong95/article/details/81362837
https://zhuanlan.zhihu.com/p/135188922?utm_source=zhihu&utm_medium=social&utm_oi=620920856499720192

clflush: 把cache line刷回内存,并且让cache line失效。只能串行执行。
clflushopt: 功能同clflush,但是不同缓存行可以并发执行。
clwb: 除了写回后不让cache line失效,其他同clflushopt。
pcommit: 把所有落在持久化内存区域的store持久化。(已弃用?)
ntstore: 绕过CPU cache,直接写到内存。一般用于写完就不管的情况,可以防止污染cache。

把内容写回NVMM的一般步骤:

clwb(addr);
sfence();
PCOMMIT();	// 已弃用?
sfence();
*addr = balabala;

clflushopt一般用来flush一大段地址的缓存行,Linux内核中已经给出了对应的函数:

#define mb() 	asm volatile("mfence":::"memory")

static void clflush_cache_range_opt(void *vaddr, unsigned int size)
{
	const unsigned long clflush_size = boot_cpu_data.x86_clflush_size;
	void *p = (void *)((unsigned long)vaddr & ~(clflush_size - 1));
	void *vend = vaddr + size;

	if (p >= vend)
		return;

	for (; p < vend; p += clflush_size)
		clflushopt(p);
}
/**
 * clflush_cache_range - flush a cache range with clflush
 * @vaddr:	virtual start address
 * @size:	number of bytes to flush
 *
 * CLFLUSHOPT is an unordered instruction which needs fencing with MFENCE or
 * SFENCE to avoid ordering issues.
 */
void clflush_cache_range(void *vaddr, unsigned int size)
{
	mb();
	clflush_cache_range_opt(vaddr, size);
	mb();
}
EXPORT_SYMBOL_GPL(clflush_cache_range);
<think>好的,用户想了解在特定的服务器环境下搭建StarRocks。首先,我需要明确他们的硬件和虚拟化环境:x86_64架构,Intel Core i5-11400处理器,使用KVM虚拟化。接下来,我得考虑StarRocks的系统要求,比如操作系统、依赖库、内存和存储配置。 用户可能已经有一定的Linux和虚拟化经验,但可能需要详细的步骤指导。首先,应该建议他们准备一个合适的Linux发行版,比如CentOS 7+或者Ubuntu 18.04+,因为StarRocks官方支持这些系统。然后,安装Java环境,因为StarRocks依赖JDK 8+,这里需要确认用户是否已经安装了正确版本的Java。 接下来是下载和安装StarRocks。用户需要从官网或GitHub获取安装包,解压并配置。配置部分可能需要根据他们的硬件进行调整,比如内存分配和存储路径的设置。特别是KVM虚拟化环境下,需要确保虚拟机的资源分配足够,比如CPU核心数和内存大小,避免性能瓶颈。 启动服务后,用户可能需要通过MySQL客户端连接StarRocks进行验证。这里需要提供示例命令,确保他们能够正确连接并执行基本操作。此外,性能优化部分也很重要,比如调整并行度、内存参数和存储优化,尤其是在虚拟化环境中可能存在的I/O开销问题。 用户可能还会遇到一些常见问题,比如端口冲突或资源不足,需要给出排查建议。最后,生成的相关问题可以帮助用户进一步了解集群部署、监控和备份恢复策略,这些都是实际应用中可能需要的扩展知识。 需要确保所有步骤清晰,命令准确,并且考虑用户可能的环境差异,比如不同的Linux发行版可能导致依赖安装命令不同。同时,提醒用户注意虚拟化环境下的资源分配,避免因配置不当导致的性能问题。最后,引用官方文档和社区资源,增加回答的可信度,帮助用户进一步查阅资料。</think>### 基于x86_64架构、KVM虚拟化环境搭建StarRocks的步骤 #### 1. 环境准备 - **操作系统**: 选择CentOS 7+或Ubuntu 18.04+(推荐使用CentOS 7.9)[^1] - **硬件配置**: - CPU: 至少4核(Intel Core i5-11400满足要求) - 内存: 建议16GB以上(BE节点需更高) - 存储: SSD硬盘,预留至少50GB空间 - **虚拟化检查**: ```bash egrep -c '(vmx|svm)' /proc/cpuinfo # 输出应大于0,确认虚拟化支持 ``` #### 2. 依赖安装 ```bash # CentOS sudo yum install -y java-1.8.0-openjdk-devel python3 # Ubuntu sudo apt-get install -y openjdk-8-jdk python3 ``` #### 3. 下载StarRocks ```bash wget https://releases.starrocks.io/starrocks/StarRocks-3.2.4.tar.gz tar -zxvf StarRocks-3.2.4.tar.gz cd StarRocks-3.2.4 ``` #### 4. 节点配置 **FE节点配置** (`fe/conf/fe.conf`): ```properties JAVA_OPTS = "-Xmx8g" meta_dir = /path/to/metadata ``` **BE节点配置** (`be/conf/be.conf`): ```properties JAVA_OPTS = "-Xmx16g" storage_root_path = /data1/starrocks;/data2/starrocks ``` #### 5. 服务启动 ```bash # 启动FE(首个节点) ./fe/bin/start_fe.sh --daemon # 启动BE ./be/bin/start_be.sh --daemon ``` #### 6. 集群验证 ```bash mysql -h 127.0.0.1 -P 9030 -u root SHOW PROC '/frontends'\G # 查看FE状态 SHOW PROC '/backends'\G # 查看BE状态 ``` #### 7. 性能优化建议 - 调整KVM虚拟机CPU分配模式为`host-passthrough` - 使用virtio磁盘驱动提升I/O性能 - 关闭NUMA平衡: `echo 0 > /proc/sys/kernel/numa_balancing`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值