C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化
内部的高速缓存 • 原来 CPU 的厂商早就意识到了内存延迟高,读写效率低 下的问题。因此他们在 CPU 内部引入了一片极小的存储 器——虽然小,但是读写速度却特别快。这片小而快的 存储器称为缓存( cache )。 • 当 CPU 访问某个地址时,会先查找缓存中是否有对应的 数据。如果没有,则从内存中读取,并存储到缓存中; 如果有,则直接使用缓存中的数据。 • 这样一来,访问的数据量比较小时,就可以自动预先加 struct CacheEntry { • bool valid; • uint64_t address; • char data[64]; • }; • CacheEntry cache[512]; • 当 CPU 读取一个地址时: • 缓存会查找和该地址匹配的条目。如果找到,则给 CPU 返 回缓存中的数据。如果找不到,则向主内存发送请求,等读 取到该地址的数据,就创建一个新条目。 CacheEntry { • bool valid, dirty; • uint64_t address; • char data[64]; • }; • CacheEntry cache[512]; • 当 CPU 写入一个地址时: • 缓存会查找和该地址匹配的条目。如果找到,则修改缓存 中该地址的数据。如果找不到,则创建一个新条目来存储 CPU 写的数据,并标记为脏( dirty0 码力 | 147 页 | 18.88 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南
语法是: set( 变量名 “变量值” CACHE 变量类型 “注释” ) 缓存的 myvar 会出现在 build/CMakeCache.txt 里 常见问题:我修改了 CMakeLists.txt 里 set 的值,却没有更新? 为了更新缓存变量,有的同学偷懒直接修改 CMakeLists.txt 里的值,这是没用的。 因为 set(... CACHE ...) 在缓存变量已经存在时,不会更新缓存的值! 变量名 “描述” 变量值 ) 等价于: set( 变量名 CACHE BOOL 变量值 “描述” ) 经典问题:小彭老师,我 option 设为 OFF 了为什么他还是 ON 呀? 因为在 CMakeLists.txt 里直接改 option 是错的,官方解法是通过 -D 参 数来改 刚刚说了, option 等价于 set(... CACHE BOOL ...) 。 因此在 CMakeLists environment variable ): $ENV{xx} 。 • 比如 $ENV{PATH} 就是获取 PATH 这个环境变量的值。 缓存变量的访问方式: $CACHE{xx} • 此外,还可以用 $CACHE{xx} 来访问缓存里的 xx 变量。 • 缓存变量和环境变量是不论父子模块都共用的,没有作用域一说。 ${xx} 找不到局部变量时,会自动去找缓存变量 • ${xx}0 码力 | 166 页 | 6.54 MB | 1 年前3谈谈MYSQL那点事
服务优化 服务优化 公共选项 公共选项 选项 缺省值 推荐值 说明 max_connections 100 1024 MySQL 服务器同时处理的数据库连接的最大 数量 query_cache_size 0 ( 不打开 ) 128M 查询缓存区的最大长度,按照当前需求,一 倍一倍增加,本选项比较重要 sort_buffer_size 512K 128M 每个线程的排序缓存大小,一般按照内存可 by , group by 起作用 record_buffer 128K 64M 每个进行一个顺序扫描的线程为其扫描的每 张表分配这个大小的一个缓冲区,可以设置 为 2M 以上 table_cache 64 1024 为所有线程打开表的数量。增加该值能增加 mysqld 要求的文件描述符的数量。 MySQL 对每个唯一打开的表需要 2 个文件描述符。 服务优化 服务优化 MyISAM MyISAM MySQL MySQL 部分自带函数,索引将失效,同时将无 部分自带函数,索引将失效,同时将无 法 法 使用 使用 MySQL MySQL 的 的 Query Cache Query Cache ,比如 ,比如 LEFT(), SUBSTR(), LEFT(), SUBSTR(), TO_DAYS() TO_DAYS() DATE_FORMAT(),0 码力 | 38 页 | 2.04 MB | 1 年前3Bazel
clang 编译 CC=clang CXX=clang++ bazel build …2 制作镜像 docker run -v $(pwd):/curve -v /root/.cache/bazel:/root/.cache/bazel -it opencurvedocker/curve-base:build-debian11 # 容器内 cd /curve/curvefs make build0 码力 | 6 页 | 4.69 MB | 5 月前3使用硬件加速Tokio - 戴翔
Software Enqueue Software Producer Consumer Consumer Consumer • Synchronization latency • Memory/Cache latency • CPU cycles latency DLB : Dynamic Load Balance DLB Enqueue Logic Head and Tail pointers Balancer Producer Producer Consumer Consumer Consumer • No Synchronization latency • No memory/cache latency • No CPU cycles DLB-Assist Channel Intro Hardware Senders Receive Senders Senders Receive0 码力 | 17 页 | 1.66 MB | 1 年前3CeresDB Rust 生产实践 任春韶
org/beta/unstable-book/language-features/generators.html 生产实践 – Async lock Req0 Req1 Req2 Memory cache https://docs.rs/tokio/1.28.2/tokio/sync/ struct.Mutex.html#which-kind-of-mutex-should-you-use 生产实践0 码力 | 22 页 | 6.95 MB | 1 年前3Await-Tree Async Rust 可观测性的灵丹妙药 - 赵梓淇
Panic Hook 里打印 Await-Tree Async Stuck : Future Detach Await Tree 在 RisingWave 中的应用 • S3 Block Cache Single-Flight Async Stuck :环形资源依赖 Await Tree 在 RisingWave 中的应用 • gRPC Streaming 连接复用 & 反压 Await-Tree0 码力 | 37 页 | 8.60 MB | 1 年前3hazard pointer synchronous reclamation
global cleanup SequentialObjList list_; SharedObjList list_; Extra synchronization Removed private cache from Folly Using sharded domain lists instead Slow Not Scalable Is One Call to Global Cleanup Always0 码力 | 31 页 | 856.38 KB | 5 月前3Lock-Free Atomic Shared Pointers Without a Split Reference Count? It Can Be Done!
Throughput vs latency? • Workload: Proportion of reads vs writes • Hotness: Does the data fit in cache? • Contention: How many threads operation on the same location? • We will benchmark the lock-free0 码力 | 45 页 | 5.12 MB | 5 月前3
共 9 条
- 1