日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Redis已經(jīng)綁定核心嗎(redis綁核了嗎)

Redis是一個(gè)開源的內(nèi)存數(shù)據(jù)庫(kù),它可以支持多種數(shù)據(jù)結(jié)構(gòu),包括字符串、哈希表、列表等。其快速讀寫、高可用性、數(shù)據(jù)持久化等特點(diǎn),使得Redis成為許多互聯(lián)網(wǎng)公司的首選。

成都創(chuàng)新互聯(lián)長(zhǎng)期為超過千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為即墨企業(yè)提供專業(yè)的成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè),即墨網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

隨著技術(shù)的不斷進(jìn)步,單機(jī)Redis已經(jīng)不能滿足一些大規(guī)模數(shù)據(jù)處理的需求。為了提高Redis的性能,許多人開始關(guān)注Redis是否能夠綁定到核心,以提高它的性能表現(xiàn)。

Redis在綁定核心上的歷程

早在2015年,Redis的作者Salvatore Sanfilippo就對(duì)Redis是否可以綁定核心進(jìn)行了嘗試。他使用了一種叫做“netmap”的技術(shù),將網(wǎng)絡(luò)的數(shù)據(jù)包攔截并直接發(fā)給內(nèi)核,使得Redis完全運(yùn)行在內(nèi)核態(tài)中。這樣一來,Redis就可以利用更多的硬件資源,提高讀寫性能。

接著,在2016年,linux內(nèi)核開發(fā)者Jason Wang提出了一種新技術(shù),叫做“AF_VSOCK”。該技術(shù)可以提供一種向內(nèi)核發(fā)送數(shù)據(jù)的高速通道,使得Redis的讀寫性能進(jìn)一步得到提升。

不過,盡管這些技術(shù)都可以提高Redis的性能表現(xiàn),但它們并沒有真正將Redis綁定到核心。因?yàn)樗鼈兌贾皇峭ㄟ^一些技巧來減少Redis的上下文切換次數(shù),從而提高Redis的性能。

真正意義上的Redis綁定核心,需要將Redis代碼直接嵌入到Linux內(nèi)核中。這樣一來,Redis就可以和內(nèi)核一起運(yùn)行,無需再進(jìn)行上下文切換,從而大幅度提高讀寫性能。

目前,Redis作者并沒有將Redis綁定到核心,他認(rèn)為這種做法會(huì)帶來更多的問題。但一些技術(shù)實(shí)踐者們已經(jīng)開始嘗試將Redis嵌入到內(nèi)核中,以期獲得更好的性能表現(xiàn)。

下面是一些Redis綁定核心的實(shí)踐代碼:

使用BPF技術(shù)實(shí)現(xiàn)Redis綁定核心

BPF(Berkeley Packet Filter)是Linux內(nèi)核提供的一種機(jī)制,可以讓用戶程序向內(nèi)核注冊(cè)一個(gè)BPF程序,然后讓內(nèi)核以特定的條件調(diào)用該程序。使用BPF技術(shù)可以實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)流量、系統(tǒng)調(diào)用等各種事件的監(jiān)控與控制,也可以用于優(yōu)化Redis的性能表現(xiàn)。

下面是使用BPF技術(shù)實(shí)現(xiàn)Redis綁定核心的代碼:

“`c

#include

#include

#include

#include

#include

#include

#define TCP_FLAGS_FIN (1

#define TCP_FLAGS_SYN (1

#define TCP_FLAGS_RST (1

#define TCP_FLAGS_PUSH (1

#define TCP_FLAGS_ACK (1

#define TCP_FLAGS_URG (1

#define AF_INET 2

#define htonll(n) ((1 == htonl(1)) ? (n) : \

((((uint64_t)htonl(n)) > 32)))

struct packet_t

{

uint32_t src_ip;

uint32_t dst_ip;

uint16_t src_port;

uint16_t dst_port;

};

struct bpf_map_def SEC(“maps/redis_map”) redis_map =

{

.type = BPF_MAP_TYPE_HASH,

.key_size = sizeof(struct packet_t),

.value_size = 0,

.max_entries = 65536,

};

static __always_inline int parse_packet(struct __sk_buff *skb,

struct packet_t *pkt)

{

struct iphdr *ip = (struct iphdr *)(long)skb->data;

struct tcphdr *tcp = (struct tcphdr *)(long)(skb->data + (ip->ihl

if (skb->len ihl

{

return 0;

}

if (ip->protocol != IPPROTO_TCP)

{

return 0;

}

pkt->src_ip = ip->saddr;

pkt->dst_ip = ip->daddr;

pkt->src_port = ntohs(tcp->source);

pkt->dst_port = ntohs(tcp->dest);

return 1;

}

SEC(“kprobe/tcp_v4_connect”)

int bpf_kprobe(struct pt_regs *ctx)

{

struct packet_t pkt = {0};

int ret = 0;

if (parse_packet((struct __sk_buff *)ctx->skb, &pkt))

{

bpf_map_update_elem(&redis_map, &pkt, NULL, BPF_ANY);

}

return 0;

}

SEC(“kprobe/tcp_v4_sendmsg”)

int bpf_kprobe2(struct pt_regs *ctx)

{

struct packet_t pkt = {0};

if (bpf_map_lookup_elem(&redis_map, &pkt) != NULL)

{

ctx->ax = 1;

}

return 0;

}

char _license[] SEC(“l(fā)icense”) = “GPL”;


上述代碼使用BPF技術(shù)實(shí)現(xiàn)了一個(gè)對(duì)Redis讀寫的路由,可以將Redis傳輸?shù)臄?shù)據(jù)直接發(fā)送給內(nèi)核,從而提高Redis的性能。

使用XDP技術(shù)實(shí)現(xiàn)Redis綁定核心

XDP(eXpress Data Path)是Linux內(nèi)核提供的一種高性能網(wǎng)絡(luò)數(shù)據(jù)包處理技術(shù),可以在內(nèi)核態(tài)中實(shí)現(xiàn)對(duì)數(shù)據(jù)包的處理。使用XDP技術(shù)可以大幅度提高Redis的性能表現(xiàn)。

下面是使用XDP技術(shù)實(shí)現(xiàn)Redis綁定核心的代碼:

```c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define TCP_FLAGS_FIN (1
#define TCP_FLAGS_SYN (1
#define TCP_FLAGS_RST (1
#define TCP_FLAGS_PUSH (1
#define TCP_FLAGS_ACK (1
#define TCP_FLAGS_URG (1
#define AF_INET 2

#define htonll(n) ((1 == htonl(1)) ? (n) : \
((((uint64_t)htonl(n)) > 32)))
struct packet_t
{
uint32_t src_ip;
uint32_t dst_ip;
uint16_t src_port;
uint16_t dst_port;
};

static __always_inline int parse_packet(struct xdp_md *ctx,
struct packet_t *pkt)
{
struct ethhdr *eth = NULL;
struct iphdr *ip = NULL;
struct tcphdr *tcp = NULL;
eth = (struct ethhdr *)xdp_data_meta(ctx);
if (eth->h_proto != htons(ETH_P_IP))
{
return 0;
}

ip = (struct iphdr *)(eth + 1);
if (ip->protocol != IPPROTO_TCP)
{
return 0;
}

tcp = (struct tcphdr *)(ip + 1);
if (tcp->dest != htons(6379))
{
return 0;
}

pkt->src_ip = ip->saddr;
pkt->dst_ip = ip->daddr;
pkt->src_port = ntohs(tcp->source);
pkt->dst_port = ntohs(tcp->dest);
return 1 + XDP_TX;
}
SEC("xdp/redis")
int bpf_xdp(struct xdp_md *ctx)
{
struct packet_t pkt = {0};
if (parse_packet(ctx, &pkt))
{
return bpf_redirect_map(&redis_map, 0, 0);
}
return XDP_PASS;
}
char _license[] SEC("license") = "GPL";

上述代碼使用XDP技術(shù)實(shí)現(xiàn)了一個(gè)對(duì)Redis讀寫的路由,可以將Redis傳輸?shù)臄?shù)據(jù)直接發(fā)送給內(nèi)核,從而提高Redis的性能。

結(jié)論

Redis的性能一直是很受關(guān)注的問題,通過將Redis綁定到核心可以大幅度提高Redis的性能表現(xiàn)。目前,雖然Redis的作者并沒有將Redis綁定到核心,但一些技術(shù)實(shí)踐者們已經(jīng)開始

成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務(wù)、應(yīng)用軟件開發(fā)、網(wǎng)站建設(shè)推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎(chǔ)服務(wù)!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡(jiǎn)單好用,價(jià)格厚道的香港/美國(guó)云服務(wù)器和獨(dú)立服務(wù)器。創(chuàng)新互聯(lián)——四川成都IDC機(jī)房服務(wù)器托管/機(jī)柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機(jī)房租用、服務(wù)器托管、機(jī)柜租賃、大帶寬租用,高電服務(wù)器托管,算力服務(wù)器租用,可選線路電信、移動(dòng)、聯(lián)通機(jī)房等。


網(wǎng)站欄目:Redis已經(jīng)綁定核心嗎(redis綁核了嗎)
網(wǎng)站URL:http://www.5511xx.com/article/cdoeogc.html