概 述
Memcached是一個(gè)開(kāi)源的內(nèi)存鍵值數(shù)據(jù)存儲(chǔ)系統(tǒng),通常用于緩存任意類型的小塊數(shù)據(jù),如字符串,或數(shù)據(jù)庫(kù)和 API 調(diào)用結(jié)果中的對(duì)象。由于其基于內(nèi)存的特性,Memcached 旨在通過(guò)在 RAM 中緩存數(shù)據(jù)和對(duì)象來(lái)加速動(dòng)態(tài) web 應(yīng)用程序,并減少數(shù)據(jù)庫(kù)查找。它是云計(jì)算中最具開(kāi)創(chuàng)性的緩存存儲(chǔ)之一,至今仍很受歡迎。
本指南的目的是描述在 AmpereAltra處理器上以最佳方式運(yùn)行 memcached 的相關(guān)技巧。
構(gòu)建先決條件
實(shí)現(xiàn)應(yīng)用程序的高性能運(yùn)行,首先要正確構(gòu)建應(yīng)用程序并使用適當(dāng)?shù)木幾g器標(biāo)志(flag)。在我們的例子中,當(dāng)在 Ampere Altra 處理器上構(gòu)建 memcached 時(shí),我們建議使用 GCC 編譯器版本 10 或更新的版本從源代碼進(jìn)行構(gòu)建。較新的編譯器往往對(duì)新的處理器特性有更好的支持,并結(jié)合了更高級(jí)的代碼生成技術(shù)。
我們使用 CentOS8 作為我們本次優(yōu)化測(cè)試的操作系統(tǒng)。
從 SCL 存儲(chǔ)庫(kù)下載并安裝 GCC 10:
sudo yum -y install yum install scl-utils scl-utils-build sudo yum -y install gcc-toolset-10-gcc scl enable gcc-toolset-10 bash
對(duì)于其他操作系統(tǒng),如 Ubuntu 20.04 LTS 和 Debian, GCC 10.2.1 也是可用的,可直接從相應(yīng)的存儲(chǔ)庫(kù)安裝。
Libevent 是構(gòu)建 memcached 所必需的,可以如下方式下載:
sudo yum install libevent-devel
構(gòu)建和安裝
Memcached wiki 上的安裝指南(https://github.com/memcached/memcached/wiki/Install)有關(guān)于在 Debian/Ubuntu 和 Redhat/Fedora 上安裝 Memcached 的說(shuō)明。源代碼可在 memcached 項(xiàng)目頁(yè)面上獲得。我們建議使用最新的穩(wěn)定版本。
memcached 項(xiàng)目頁(yè)面
可以使用以下命令下載 Memcached。
wget https://memcached.org/latest #you might need to rename the file tar -zxf memcached-1.x.x.tar.gz cd memcached-1.x.x
在繼續(xù)為 Memcached 配置構(gòu)建選項(xiàng)之前,讓我們添加一些特定于 Ampere Altra 處理器的編譯器標(biāo)志:
./configure CFLAGS="-O3 -march=native -mcpu=neoverse-n1" --prefix=/usr/local/memcached make && make test && sudo make install
KERNEL 優(yōu)化
眾所周知,Memcached 占用大量網(wǎng)絡(luò)資源,為了獲得良好的性能,內(nèi)核和網(wǎng)卡(NIC)的調(diào)優(yōu)是必要的。
大多數(shù)內(nèi)核調(diào)優(yōu)配置可以通過(guò) sysfs 文件系統(tǒng)修改數(shù)據(jù)結(jié)構(gòu)來(lái)設(shè)置。但是,有些調(diào)整可能需要重新編譯內(nèi)核。一般的內(nèi)核優(yōu)化措施是設(shè)置操作系統(tǒng)使用 64 KB 的頁(yè)面大小。這將提高 Ampere Altra 處理器上的翻譯暫置緩沖區(qū)(TLB)的效率。
查看系統(tǒng)上正在使用的頁(yè)面大?。?/p>
getconf PAGESIZE
對(duì)于 64 KB 的頁(yè)面大小,預(yù)期返回值 65536。如果不是這樣,請(qǐng)檢查 CONFIG_ARM64_64K_PAGES 是否已應(yīng)用于內(nèi)核配置文件,重新編譯并安裝內(nèi)核,然后重新啟動(dòng)。
CONFIG_ARM64_64K_PAGES=y
TUNED PROFILES
考慮到大量的內(nèi)核配置選項(xiàng),有時(shí)使用預(yù)定義的優(yōu)化配置文件來(lái)匹配您的使用場(chǎng)景會(huì)更容易。Tuned 就是這樣一種調(diào)優(yōu)服務(wù),它可以通過(guò)設(shè)置調(diào)優(yōu)配置文件來(lái)配置操作系統(tǒng)來(lái)提高性能。
以 CentOS 8 為例,如果 Memcached 的吞吐量是所關(guān)注的主要指標(biāo),我們建議使用吞吐量-性能(throughput-performance)的 Tuned Profile。該配置文件將 CPU 調(diào)控器(governors)設(shè)置為性能模式,這樣可以減少調(diào)度延遲,最大化 I/O 吞吐量,并減少交換度值(swappiness),所有這些都可以顯著提高性能。
對(duì)于 Ubuntu,如果它不是操作系統(tǒng)安裝的一部分,則可能需要單獨(dú)安裝 tuned profile。
sudo apt-get update -y sudo apt-get install -y tuned
為了改進(jìn) Ampere Altra 處理器上的內(nèi)核調(diào)度延遲,我們建議通過(guò)更新 Tuned Profile 文件中的相應(yīng)設(shè)置,將 sched_wakeup_granularity_ns 更改為 5000。
PROFILE_FILE=/usr/lib/tuned/throughput-performance/tuned.conf sed -i 's/sched_wakeup_granularity_ns = 15000000/sched_wakeup_granularity_ns = 5000/g' $PROFILE_FILE
然后使用以下命令啟用吞吐量-性能(throughput-performance)的 Tuned Profile:
tuned-adm profile throughput-performance
網(wǎng)絡(luò)設(shè)置
像 Memcached 這樣的應(yīng)用程序通常被調(diào)優(yōu)為在高吞吐量下運(yùn)行,同時(shí)保持嚴(yán)格的服務(wù)水平協(xié)議(SLA)。p.99 延遲通常是一個(gè)常見(jiàn)的標(biāo)準(zhǔn)。為了考慮此類 SLA 的要求,我們建議調(diào)優(yōu)內(nèi)核 TCP/IP 設(shè)置,因?yàn)閭魅氲恼?qǐng)求是通過(guò) TCP 連接建立的。
我們?cè)?Memcached 測(cè)試中使用的 TCP/IP 調(diào)優(yōu)設(shè)置列表如下:
echo 9999999 > /proc/sys/net/core/somaxconn echo 4194304 > /proc/sys/net/core/rmem_max echo 4194304 > /proc/sys/net/core/wmem_max echo 4194304 > /proc/sys/net/core/rmem_default echo 4194304 > /proc/sys/net/core/wmem_default echo "4096 87380 4194304" > /proc/sys/net/ipv4/tcp_rmem echo "4096 87380 4194304" > /proc/sys/net/ipv4/tcp_wmem echo "4096 87380 4194304" > /proc/sys/net/ipv4/tcp_mem echo 250000 > /proc/sys/net/core/netdev_max_backlog echo 50 > /proc/sys/net/core/busy_read echo 50 > /proc/sys/net/core/busy_poll echo 3 > /proc/sys/net/ipv4/tcp_fastopen echo 0 > /proc/sys/kernel/numa_balancing echo 0 > /proc/sys/net/ipv4/tcp_timestamps echo 1 > /proc/sys/net/ipv4/tcp_low_latency echo 0 > /proc/sys/net/ipv4/tcp_sack echo 1 > /proc/sys/net/ipv4/tcp_syncookie
除了內(nèi)核 TCP/IP 設(shè)置之外,我們還需要確保應(yīng)用程序能夠利用大多數(shù)網(wǎng)卡(NIC)內(nèi)置的硬件卸載功能,例如 Generic-Receive-Offload,它可以聚合屬于同一流的多個(gè)傳入數(shù)據(jù)包,以及 large - receive - offload,它可以將屬于同一連接的傳入 TCP/IP 數(shù)據(jù)包合并到一個(gè)大的接收段中,然后將其傳遞給內(nèi)核。
具體操作如下:
ethtool -Kgro on ethtool -K lro on
對(duì)于像 Memcached 這樣的網(wǎng)絡(luò)綁定(network-bound)工作負(fù)載,強(qiáng)烈建議將網(wǎng)卡中斷(irq)分布在多個(gè)核心上,以避免出現(xiàn)瓶頸。參考文檔 2 是關(guān)于 SMP IRQ 關(guān)聯(lián)的一個(gè)非常好的參考。
建議使用以下命令檢查網(wǎng)卡支持的硬件通道數(shù)量,以確保通道數(shù)量與網(wǎng)卡的通道容量匹配:
ethtool -lsudo ethtool -L combined
MEMCACHED 配置
Memcached 本身是可以做些調(diào)優(yōu)來(lái)更好地匹配實(shí)際應(yīng)用環(huán)境。調(diào)優(yōu)它的一個(gè)很好的起點(diǎn)是 Memcached 內(nèi)置的統(tǒng)計(jì)功能??梢酝ㄟ^(guò)使用 telnet 連接到 memcached 并運(yùn)行它來(lái)研究統(tǒng)計(jì)數(shù)據(jù):
telnet localhost 11211 Connected to localhost. Escape character is '^]'. telnet> stats STAT pid 23599 STAT uptime 675 STAT time 1211439587 STAT version 1.2.5 STAT pointer_size 32 STAT rusage_user 1.404992 STAT rusage_system 4.694685 STAT curr_items 32 STAT total_items 56361 STAT bytes 2642 STAT curr_connections 53 STAT total_connections 438 STAT connection_structures 55 STAT cmd_get 113482 STAT cmd_set 80519 STAT get_hits 78926 STAT get_misses 34556 STAT evictions 0 STAT bytes_read 6379783 STAT bytes_written 4860179 STAT limit_maxbytes 67108864 STAT threads 1 END
get_hits 和 get_misses 值特別重要,它們可用于計(jì)算 Memcached 的緩存命中/未命中比率。像 Memcached 這樣的內(nèi)存緩存的經(jīng)驗(yàn)法則是將緩存命中率保持在 90% 以上。
清除值(evictions value)計(jì)算從緩存中清除的未過(guò)期項(xiàng)的數(shù)量,以便為新項(xiàng)騰出空間。清除次數(shù)過(guò)多可能表明緩存過(guò)度使用或分配的內(nèi)存量不足。
最后,Memcached 線程的數(shù)量可能是影響 Memcached 總體性能的一個(gè)設(shè)置。對(duì)于像 Ampere Altra 系列處理器這樣的高核數(shù)處理器,我們建議在研究性能擴(kuò)展時(shí)增加線程數(shù)量以使用盡可能多的核。極高的線程數(shù)可能導(dǎo)致鎖爭(zhēng)用,從而降低性能。在啟動(dòng) Memcached 時(shí),可以通過(guò)使用 -t 選項(xiàng)來(lái)更改線程數(shù)。
在生產(chǎn)環(huán)境中對(duì) Memcached 這樣的應(yīng)用程序進(jìn)行微調(diào)需要對(duì)其用法和端到端軟件堆棧有深入的了解。我們希望本指南中討論的設(shè)置可以幫助提高 Memcached 的性能,并建議參考這里提供的所有配置選項(xiàng),以更好地匹配您的使用。
-
處理器
+關(guān)注
關(guān)注
68文章
19387瀏覽量
230543 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6862瀏覽量
123525 -
編譯器
+關(guān)注
關(guān)注
1文章
1640瀏覽量
49204 -
Memcached
+關(guān)注
關(guān)注
0文章
13瀏覽量
7027 -
Ampere
+關(guān)注
關(guān)注
1文章
69瀏覽量
4553
原文標(biāo)題:安博士講堂|針對(duì) Ampere??Altra? 系列處理器的 Memcached 優(yōu)化指南
文章出處:【微信號(hào):AmpereComputing,微信公眾號(hào):安晟培半導(dǎo)體】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論