概 述
Memcached是一個開源的內(nèi)存鍵值數(shù)據(jù)存儲系統(tǒng),通常用于緩存任意類型的小塊數(shù)據(jù),如字符串,或數(shù)據(jù)庫和 API 調(diào)用結(jié)果中的對象。由于其基于內(nèi)存的特性,Memcached 旨在通過在 RAM 中緩存數(shù)據(jù)和對象來加速動態(tài) web 應(yīng)用程序,并減少數(shù)據(jù)庫查找。它是云計算中最具開創(chuàng)性的緩存存儲之一,至今仍很受歡迎。
本指南的目的是描述在 AmpereAltra處理器上以最佳方式運行 memcached 的相關(guān)技巧。
構(gòu)建先決條件
實現(xiàn)應(yīng)用程序的高性能運行,首先要正確構(gòu)建應(yīng)用程序并使用適當(dāng)?shù)木幾g器標(biāo)志(flag)。在我們的例子中,當(dāng)在 Ampere Altra 處理器上構(gòu)建 memcached 時,我們建議使用 GCC 編譯器版本 10 或更新的版本從源代碼進(jìn)行構(gòu)建。較新的編譯器往往對新的處理器特性有更好的支持,并結(jié)合了更高級的代碼生成技術(shù)。
我們使用 CentOS8 作為我們本次優(yōu)化測試的操作系統(tǒng)。
從 SCL 存儲庫下載并安裝 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
對于其他操作系統(tǒng),如 Ubuntu 20.04 LTS 和 Debian, GCC 10.2.1 也是可用的,可直接從相應(yīng)的存儲庫安裝。
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 的說明。源代碼可在 memcached 項目頁面上獲得。我們建議使用最新的穩(wěn)定版本。
memcached 項目頁面
可以使用以下命令下載 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)建選項之前,讓我們添加一些特定于 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)配置可以通過 sysfs 文件系統(tǒng)修改數(shù)據(jù)結(jié)構(gòu)來設(shè)置。但是,有些調(diào)整可能需要重新編譯內(nèi)核。一般的內(nèi)核優(yōu)化措施是設(shè)置操作系統(tǒng)使用 64 KB 的頁面大小。這將提高 Ampere Altra 處理器上的翻譯暫置緩沖區(qū)(TLB)的效率。
查看系統(tǒng)上正在使用的頁面大小:
getconf PAGESIZE
對于 64 KB 的頁面大小,預(yù)期返回值 65536。如果不是這樣,請檢查 CONFIG_ARM64_64K_PAGES 是否已應(yīng)用于內(nèi)核配置文件,重新編譯并安裝內(nèi)核,然后重新啟動。
CONFIG_ARM64_64K_PAGES=y
TUNED PROFILES
考慮到大量的內(nèi)核配置選項,有時使用預(yù)定義的優(yōu)化配置文件來匹配您的使用場景會更容易。Tuned 就是這樣一種調(diào)優(yōu)服務(wù),它可以通過設(shè)置調(diào)優(yōu)配置文件來配置操作系統(tǒng)來提高性能。
以 CentOS 8 為例,如果 Memcached 的吞吐量是所關(guān)注的主要指標(biāo),我們建議使用吞吐量-性能(throughput-performance)的 Tuned Profile。該配置文件將 CPU 調(diào)控器(governors)設(shè)置為性能模式,這樣可以減少調(diào)度延遲,最大化 I/O 吞吐量,并減少交換度值(swappiness),所有這些都可以顯著提高性能。
對于 Ubuntu,如果它不是操作系統(tǒng)安裝的一部分,則可能需要單獨安裝 tuned profile。
sudo apt-get update -y sudo apt-get install -y tuned
為了改進(jìn) Ampere Altra 處理器上的內(nèi)核調(diào)度延遲,我們建議通過更新 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)格的服務(wù)水平協(xié)議(SLA)。p.99 延遲通常是一個常見的標(biāo)準(zhǔn)。為了考慮此類 SLA 的要求,我們建議調(diào)優(yōu)內(nèi)核 TCP/IP 設(shè)置,因為傳入的請求是通過 TCP 連接建立的。
我們在 Memcached 測試中使用的 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,它可以聚合屬于同一流的多個傳入數(shù)據(jù)包,以及 large - receive - offload,它可以將屬于同一連接的傳入 TCP/IP 數(shù)據(jù)包合并到一個大的接收段中,然后將其傳遞給內(nèi)核。
具體操作如下:
ethtool -Kgro on ethtool -K lro on
對于像 Memcached 這樣的網(wǎng)絡(luò)綁定(network-bound)工作負(fù)載,強(qiáng)烈建議將網(wǎng)卡中斷(irq)分布在多個核心上,以避免出現(xiàn)瓶頸。參考文檔 2 是關(guān)于 SMP IRQ 關(guān)聯(lián)的一個非常好的參考。
建議使用以下命令檢查網(wǎng)卡支持的硬件通道數(shù)量,以確保通道數(shù)量與網(wǎng)卡的通道容量匹配:
ethtool -lsudo ethtool -L combined
MEMCACHED 配置
Memcached 本身是可以做些調(diào)優(yōu)來更好地匹配實際應(yīng)用環(huán)境。調(diào)優(yōu)它的一個很好的起點是 Memcached 內(nèi)置的統(tǒng)計功能。可以通過使用 telnet 連接到 memcached 并運行它來研究統(tǒng)計數(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 值特別重要,它們可用于計算 Memcached 的緩存命中/未命中比率。像 Memcached 這樣的內(nèi)存緩存的經(jīng)驗法則是將緩存命中率保持在 90% 以上。
清除值(evictions value)計算從緩存中清除的未過期項的數(shù)量,以便為新項騰出空間。清除次數(shù)過多可能表明緩存過度使用或分配的內(nèi)存量不足。
最后,Memcached 線程的數(shù)量可能是影響 Memcached 總體性能的一個設(shè)置。對于像 Ampere Altra 系列處理器這樣的高核數(shù)處理器,我們建議在研究性能擴(kuò)展時增加線程數(shù)量以使用盡可能多的核。極高的線程數(shù)可能導(dǎo)致鎖爭用,從而降低性能。在啟動 Memcached 時,可以通過使用 -t 選項來更改線程數(shù)。
在生產(chǎn)環(huán)境中對 Memcached 這樣的應(yīng)用程序進(jìn)行微調(diào)需要對其用法和端到端軟件堆棧有深入的了解。我們希望本指南中討論的設(shè)置可以幫助提高 Memcached 的性能,并建議參考這里提供的所有配置選項,以更好地匹配您的使用。
-
處理器
+關(guān)注
關(guān)注
68文章
19813瀏覽量
233634 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7098瀏覽量
124989 -
編譯器
+關(guān)注
關(guān)注
1文章
1656瀏覽量
49908 -
Memcached
+關(guān)注
關(guān)注
0文章
13瀏覽量
7145 -
Ampere
+關(guān)注
關(guān)注
1文章
81瀏覽量
4673
原文標(biāo)題:安博士講堂|針對 Ampere??Altra? 系列處理器的 Memcached 優(yōu)化指南
文章出處:【微信號:AmpereComputing,微信公眾號:安晟培半導(dǎo)體】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
Ampere推出業(yè)內(nèi)首款擁有最多內(nèi)核數(shù)量的云原生處理器系列
業(yè)界首款!Ampere發(fā)布有80個核心的ARM處理器
Ampere發(fā)布業(yè)內(nèi)首款80核ARM架構(gòu)64位處理器Altra 并已開始向云服務(wù)和邊緣計算客戶出樣
Ampere全新推出業(yè)界首款80核服務(wù)器處理器Ampere Altra?處理器
安晟培半導(dǎo)體Ampere Altra處理器推出,應(yīng)用于云和邊緣計算數(shù)據(jù)中心中
詳細(xì)解說Ampere Altra性能測試與結(jié)果對比

Ampere Altra處理器實現(xiàn)Arm架構(gòu)運行虛擬機(jī)
HPE正式發(fā)布搭載Ampere云原生處理器的HPE ProLiant RL300 Gen11平臺
Ampere Computing發(fā)布全新AmpereOne系列處理器,192個自研核
Ampere全新AmpereOne系列處理器,多達(dá)192個單線程Ampere核
Ampere發(fā)布AmpereOne系列處理器,單顆處理器支持最高192個物理核心

Ampere Altra系列處理器的鎖和內(nèi)存序

全新AmpereOne系列處理器,一款192核的云原生CPU

評論