zoukankan      html  css  js  c++  java
  • DPDK rte_hash 简述

    rte_hash

    创建表

    • rte_hash_parameters 结构体
    struct rte_hash_parameters {
    	const char *name;		/**< Name of the hash. */
    	uint32_t entries;		/**< Total hash table entries. */
    	uint32_t reserved;		/**< Unused field. Should be set to 0 */
    	uint32_t key_len;		/**< Length of hash key. */
    	rte_hash_function hash_func;	/**< Primary Hash function used to calculate hash. */
    	uint32_t hash_func_init_val;	/**< Init value used by hash_func. */
    	int socket_id;			/**< NUMA Socket ID for memory. */
    	uint8_t extra_flag;		/**< Indicate if additional parameters are present. */
    };
    

    填写哈希表的名字,表最大数目,key长度,哈希函数,哈希函数初始值,NUMA套接字, 额外参数标志

    重要的是选择 hash 函数

    • 哈希函数
    typedef uint32_t (*rte_hash_function)(const void *key, uint32_t key_len,
    				      uint32_t init_val);
    

    rte_jhash.h 提供了一些函数如 rte_jhash, rte_jhash_1words, rte_jash_2words

    其余相关函数有
    设置比较函数

    void rte_hash_set_cmp_func(struct rte_hash *h, rte_hash_cmp_eq_t func);
    

    查看是否已经有同名的表

    struct rte_hash *
    rte_hash_find_existing(const char *name);
    

    删除表

    void
    rte_hash_free(struct rte_hash *h);
    
    • 创建函数
    struct rte_hash *
    rte_hash_create(const struct rte_hash_parameters *params);
    

    添加key、data

    int32_t
    rte_hash_add_key(const struct rte_hash *h, const void *key);
    
    int
    rte_hash_add_key_data(const struct rte_hash *h, const void *key, void *data);
    
    int32_t
    rte_hash_add_key_with_hash_data(const struct rte_hash *h, const void *key,
    						hash_sig_t sig, void *data);
    
    int32_t
    rte_hash_add_key_with_hash_data(const struct rte_hash *h, const void *key,
    						hash_sig_t sig, void *data);
    
    int32_t
    rte_hash_del_key(const struct rte_hash *h, const void *key);
    

    删除key、data

    int32_t
    rte_hash_del_key(const struct rte_hash *h, const void *key);

    int32_t
    rte_hash_del_key_with_hash(const struct rte_hash *h, const void *key, hash_sig_t sig);

    查找

    int
    rte_hash_get_key_with_position(const struct rte_hash *h, const int32_t position,
    			       void **key);
    
    int
    rte_hash_lookup_data(const struct rte_hash *h, const void *key, void **data);
    
    int
    rte_hash_lookup_with_hash_data(const struct rte_hash *h, const void *key,
    					hash_sig_t sig, void **data);
    int32_t
    rte_hash_lookup(const struct rte_hash *h, const void *key);
    
    int32_t
    rte_hash_lookup_with_hash(const struct rte_hash *h,
    				const void *key, hash_sig_t sig);
    
    hash_sig_t
    rte_hash_hash(const struct rte_hash *h, const void *key);
    
    int
    rte_hash_lookup_bulk_data(const struct rte_hash *h, const void **keys,
    		      uint32_t num_keys, uint64_t *hit_mask, void *data[]);
    
    int
    rte_hash_lookup_bulk(const struct rte_hash *h, const void **keys,
    		      uint32_t num_keys, int32_t *positions);    
    
    int32_t
    rte_hash_iterate(const struct rte_hash *h, const void **key, void **data, uint32_t *next);    
                     
    
  • 相关阅读:
    docker
    mitmproxy
    20145103《JAVA程序设计》课程总结
    20145103第五次实验报告
    20145103《JAVA程序设计》第十周学习总结
    《JAVA程序设计》第九周学习总结
    第四次实验报告
    第三次实验报告
    《java程序设计》第八周学习总结
    20145103 《Java程序设计》第7周学习总结
  • 原文地址:https://www.cnblogs.com/raintwice/p/7338910.html
Copyright © 2011-2022 走看看