summaryrefslogtreecommitdiffstats
path: root/nfvbench
AgeCommit message (Expand)AuthorFilesLines
2019-08-23[NFVBENCH-148] Increase the waiting time based on # of instancesYichen Wang1-1/+2
2019-08-11NFVBENCH-147 Incorrect URL used for admin check in credentials3.5.1ahothan1-6/+13
2019-08-04Release the validation check for VxLAN networksYichen Wang1-2/+1
2019-07-16NFVBENCH-145 Config file not found. No explicit errorfmenguy1-0/+6
2019-07-15NFVBENCH-144 Trex cannot take account NFVBench config (platform thread id 0)fmenguy1-3/+9
2019-07-13NFVBENCH-140 Retrieve High Dynamic Range latency histograms with TRex v2.593.5.0ahothan3-1/+8
2019-07-13NFVBENCH-143 Trex cannot start due to invalid config (platform None)ahothan1-23/+24
2019-07-05NFVBENCH-141 Fix Openstack user admin role checkfmenguy1-15/+9
2019-07-01NFVBENCH-139 Fix master_thread_id and latency_thread_id property checkingfmenguy1-16/+15
2019-06-23NFVBENCH-95 Add HdrHistogram encodes returned by TRex to JSON resultsahothan3-1/+67
2019-06-22NFVBENCH-138 Use yaml.safe_load() instead of unsafe yaml load3.4.2ahothan1-1/+1
2019-06-20[NFVBENCH-137] NFVbench generates wrong L4 checksums for VxLAN traffic3.4.1Yichen Wang1-4/+7
2019-06-05Add L3 traffic management with Neutron routersFrançois-Régis MENGUY7-79/+551
2019-05-29NFVBENCH-136 Add support for multiqueue for PVP/PVVP chains3.3.0ahothan5-6/+54
2019-05-24NFVBENCH-135 Enhance VxLAN UDP src port entropyahothan1-3/+12
2019-05-16NFVBENCH-134 Support multiple idle interfaces per test VMahothan3-2/+120
2019-04-18[NFVBENCH-133] Fix for tracebacks while uploading imagesYichen Wang1-1/+1
2019-04-15NFVBENCH-132 Upgrade to TRex v2.563.2.0ahothan1-1/+5
2019-04-14NFVBENCH-131 Allow list of arbitrary network names for EXT chainsahothan3-9/+44
2019-04-11[NFVBENCH-129] Fix regression to work on Keystone v2Yichen Wang1-2/+6
2019-03-28Add possibility to restart TRex in case of config change or forced it with co...fmenguy4-31/+97
2019-03-17NFVBENCH-126 Remove socketio support (debt reduction)ahothan3-133/+41
2019-03-11VxLAN per-chain counter supportMichael Pedersen4-15/+50
2019-02-28NFVBENCH-124 Upgrade TRex to v2.533.1.0fmenguy2-37/+37
2019-02-27NFVBENCH-123 EXT chain does not work with VXLAN3.0.6ahothan2-11/+36
2019-02-24NFVBENCH-122 Allow config to have more dest MACs than chains requestedahothan1-2/+3
2019-02-18NFVBENCH-121 Add TRex parameters to tune performance and allocate ressourcesFrançois-Régis MENGUY5-4/+76
2019-01-10NFVBENCH-120 No admin support patch3.0.5fmenguy3-9/+53
2018-12-14Relax checking for vxlan network type.3.0.4ahothan2-7/+3
2018-12-08NFVBENCH-110 EXT shared network requires 2 vlans per chain in config3.0.3ahothan1-3/+12
2018-12-08NFVBENCH-119 cli option --vxlan not workingahothan1-10/+9
2018-12-07NFVBENCH-118 VxLAN fixed rate: Trex far end port Rx counters are incorrectahothan4-6/+44
2018-12-05NFVBENCH-117 Streamline VxLAN vni config and use auto-indexingahothan3-61/+13
2018-12-05NFVBENCH-116 Support segmentation_id field auto-indexing for multi-chainingahothan2-10/+50
2018-12-04NFVBENCH-115 SRIOV multi-chain with non shared networks failsahothan2-17/+44
2018-11-27-10/+12
2018-11-13NFVBENCH-108 Adjust exact frame size to take into account FCS field2.0.5ahothan7-53/+53
2018-11-07NFVBENCH-107 NFVbench 2.0 ValueError at end of fixed rate run2.0.4stable/gambiaahothan2-4/+10
2018-11-02NFVBENCH-106 IndexError exception while resolving ARP (EXT)2.0.3ahothan1-4/+4
2018-11-01NFVBENCH-105 ARP not working with NFVbench 2.02.0.2ahothan2-32/+8
2018-10-19NFVBENCH-104 Specifying a hypervisor does not work2.0.1ahothan2-2/+3
2018-10-14NFVBENCH-103 Add --hypervisor cli options and fix vm placement for multi-chain2.0.0ahothan6-132/+169
2018-10-12Add + or - sign to drop packets and drop ratesahothan1-1/+1
2018-10-11Perform strict src mac check on ensure end to endahothan4-51/+74
2018-10-082.0 beta NFVBENCH-91 Allow multi-chaining with separate edge networksahothan25-2305/+2640
2018-10-08NFVBENCH-102 NFVBench won't work with external chain1.5.3ahothan1-1/+4
="n">blkno, int create) { struct address_space *mapping = gfs2_glock2aspace(gl); struct gfs2_sbd *sdp = gl->gl_sbd; struct page *page; struct buffer_head *bh; unsigned int shift; unsigned long index; unsigned int bufnum; if (mapping == NULL) mapping = &sdp->sd_aspace; shift = PAGE_CACHE_SHIFT - sdp->sd_sb.sb_bsize_shift; index = blkno >> shift; /* convert block to page */ bufnum = blkno - (index << shift); /* block buf index within page */ if (create) { for (;;) { page = grab_cache_page(mapping, index); if (page) break; yield(); } } else { page = find_get_page_flags(mapping, index, FGP_LOCK|FGP_ACCESSED); if (!page) return NULL; } if (!page_has_buffers(page)) create_empty_buffers(page, sdp->sd_sb.sb_bsize, 0); /* Locate header for our buffer within our page */ for (bh = page_buffers(page); bufnum--; bh = bh->b_this_page) /* Do nothing */; get_bh(bh); if (!buffer_mapped(bh)) map_bh(bh, sdp->sd_vfs, blkno); unlock_page(page); page_cache_release(page); return bh; } static void meta_prep_new(struct buffer_head *bh) { struct gfs2_meta_header *mh = (struct gfs2_meta_header *)bh->b_data; lock_buffer(bh); clear_buffer_dirty(bh); set_buffer_uptodate(bh); unlock_buffer(bh); mh->mh_magic = cpu_to_be32(GFS2_MAGIC); } /** * gfs2_meta_new - Get a block * @gl: The glock associated with this block * @blkno: The block number * * Returns: The buffer */ struct buffer_head *gfs2_meta_new(struct gfs2_glock *gl, u64 blkno) { struct buffer_head *bh; bh = gfs2_getbuf(gl, blkno, CREATE); meta_prep_new(bh); return bh; } /** * gfs2_meta_read - Read a block from disk * @gl: The glock covering the block * @blkno: The block number * @flags: flags * @bhp: the place where the buffer is returned (NULL on failure) * * Returns: errno */ int gfs2_meta_read(struct gfs2_glock *gl, u64 blkno, int flags, struct buffer_head **bhp) { struct gfs2_sbd *sdp = gl->gl_sbd; struct buffer_head *bh; if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags))) { *bhp = NULL; return -EIO; } *bhp = bh = gfs2_getbuf(gl, blkno, CREATE); lock_buffer(bh); if (buffer_uptodate(bh)) { unlock_buffer(bh); return 0; } bh->b_end_io = end_buffer_read_sync; get_bh(bh); submit_bh(READ_SYNC | REQ_META | REQ_PRIO, bh); if (!(flags & DIO_WAIT)) return 0; wait_on_buffer(bh); if (unlikely(!buffer_uptodate(bh))) { struct gfs2_trans *tr = current->journal_info; if (tr && tr->tr_touched) gfs2_io_error_bh(sdp, bh); brelse(bh); *bhp = NULL; return -EIO; } return 0; } /** * gfs2_meta_wait - Reread a block from disk * @sdp: the filesystem * @bh: The block to wait for * * Returns: errno */ int gfs2_meta_wait(struct gfs2_sbd *sdp, struct buffer_head *bh) { if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags))) return -EIO; wait_on_buffer(bh); if (!buffer_uptodate(bh)) { struct gfs2_trans *tr = current->journal_info; if (tr && tr->tr_touched) gfs2_io_error_bh(sdp, bh); return -EIO; } if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags))) return -EIO; return 0; } void gfs2_remove_from_journal(struct buffer_head *bh, struct gfs2_trans *tr, int meta) { struct address_space *mapping = bh->b_page->mapping; struct gfs2_sbd *sdp = gfs2_mapping2sbd(mapping); struct gfs2_bufdata *bd = bh->b_private; int was_pinned = 0; if (test_clear_buffer_pinned(bh)) { trace_gfs2_pin(bd, 0); atomic_dec(&sdp->sd_log_pinned); list_del_init(&bd->bd_list); if (meta) tr->tr_num_buf_rm++; else tr->tr_num_databuf_rm++; tr->tr_touched = 1; was_pinned = 1; brelse(bh); } if (bd) { spin_lock(&sdp->sd_ail_lock); if (bd->bd_tr) { gfs2_trans_add_revoke(sdp, bd); } else if (was_pinned) { bh->b_private = NULL; kmem_cache_free(gfs2_bufdata_cachep, bd); } spin_unlock(&sdp->sd_ail_lock); } clear_buffer_dirty(bh); clear_buffer_uptodate(bh); } /** * gfs2_meta_wipe - make inode's buffers so they aren't dirty/pinned anymore * @ip: the inode who owns the buffers * @bstart: the first buffer in the run * @blen: the number of buffers in the run * */ void gfs2_meta_wipe(struct gfs2_inode *ip, u64 bstart, u32 blen) { struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); struct buffer_head *bh; while (blen) { bh = gfs2_getbuf(ip->i_gl, bstart, NO_CREATE); if (bh) { lock_buffer(bh); gfs2_log_lock(sdp); gfs2_remove_from_journal(bh, current->journal_info, 1); gfs2_log_unlock(sdp); unlock_buffer(bh); brelse(bh); } bstart++; blen--; } } /** * gfs2_meta_indirect_buffer - Get a metadata buffer * @ip: The GFS2 inode * @height: The level of this buf in the metadata (indir addr) tree (if any) * @num: The block number (device relative) of the buffer * @bhp: the buffer is returned here * * Returns: errno */ int gfs2_meta_indirect_buffer(struct gfs2_inode *ip, int height, u64 num, struct buffer_head **bhp) { struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); struct gfs2_glock *gl = ip->i_gl; struct buffer_head *bh; int ret = 0; u32 mtype = height ? GFS2_METATYPE_IN : GFS2_METATYPE_DI; ret = gfs2_meta_read(gl, num, DIO_WAIT, &bh); if (ret == 0 && gfs2_metatype_check(sdp, bh, mtype)) { brelse(bh); ret = -EIO; } *bhp = bh; return ret; } /** * gfs2_meta_ra - start readahead on an extent of a file * @gl: the glock the blocks belong to * @dblock: the starting disk block * @extlen: the number of blocks in the extent * * returns: the first buffer in the extent */ struct buffer_head *gfs2_meta_ra(struct gfs2_glock *gl, u64 dblock, u32 extlen) { struct gfs2_sbd *sdp = gl->gl_sbd; struct buffer_head *first_bh, *bh; u32 max_ra = gfs2_tune_get(sdp, gt_max_readahead) >> sdp->sd_sb.sb_bsize_shift; BUG_ON(!extlen); if (max_ra < 1) max_ra = 1; if (extlen > max_ra) extlen = max_ra; first_bh = gfs2_getbuf(gl, dblock, CREATE); if (buffer_uptodate(first_bh)) goto out; if (!buffer_locked(first_bh)) ll_rw_block(READ_SYNC | REQ_META, 1, &first_bh); dblock++; extlen--; while (extlen) { bh = gfs2_getbuf(gl, dblock, CREATE); if (!buffer_uptodate(bh) && !buffer_locked(bh)) ll_rw_block(READA | REQ_META, 1, &bh); brelse(bh); dblock++; extlen--; if (!buffer_locked(first_bh) && buffer_uptodate(first_bh)) goto out; } wait_on_buffer(first_bh); out: return first_bh; }