IL161107A0 - Multi-threaded packet processing engine for stateful packet processing - Google Patents

Multi-threaded packet processing engine for stateful packet processing

Info

Publication number
IL161107A0
IL161107A0 IL16110702A IL16110702A IL161107A0 IL 161107 A0 IL161107 A0 IL 161107A0 IL 16110702 A IL16110702 A IL 16110702A IL 16110702 A IL16110702 A IL 16110702A IL 161107 A0 IL161107 A0 IL 161107A0
Authority
IL
Israel
Prior art keywords
packet processing
threaded
stateful
processing engine
engine
Prior art date
Application number
IL16110702A
Other languages
English (en)
Original Assignee
Tidal Networks Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tidal Networks Inc filed Critical Tidal Networks Inc
Publication of IL161107A0 publication Critical patent/IL161107A0/xx

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • G06F9/4856Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • G06F9/4856Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
    • G06F9/4862Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration the task being a mobile agent, i.e. specifically designed to migrate

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Devices For Executing Special Programs (AREA)
IL16110702A 2001-09-28 2002-09-24 Multi-threaded packet processing engine for stateful packet processing IL161107A0 (en)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US32563801P 2001-09-28 2001-09-28
US34168901P 2001-12-17 2001-12-17
US38827802P 2002-06-13 2002-06-13
PCT/US2002/030421 WO2003030012A1 (fr) 2001-09-28 2002-09-24 Moteur de traitement de paquets multiprocessus pour le traitement dynamique de paquets

Publications (1)

Publication Number Publication Date
IL161107A0 true IL161107A0 (en) 2004-08-31

Family

ID=27406414

Family Applications (3)

Application Number Title Priority Date Filing Date
IL16110702A IL161107A0 (en) 2001-09-28 2002-09-24 Multi-threaded packet processing engine for stateful packet processing
IL161107A IL161107A (en) 2001-09-28 2004-03-25 Multi-threaded packet processing engine for stateful packet processing
IL184739A IL184739A (en) 2001-09-28 2007-07-19 Multi-threaded packet processing engine for stateful packet processing

Family Applications After (2)

Application Number Title Priority Date Filing Date
IL161107A IL161107A (en) 2001-09-28 2004-03-25 Multi-threaded packet processing engine for stateful packet processing
IL184739A IL184739A (en) 2001-09-28 2007-07-19 Multi-threaded packet processing engine for stateful packet processing

Country Status (5)

Country Link
US (3) US7360217B2 (fr)
EP (1) EP1436724A4 (fr)
IL (3) IL161107A0 (fr)
SG (1) SG155038A1 (fr)
WO (1) WO2003030012A1 (fr)

Families Citing this family (67)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
ATE314768T1 (de) * 2001-10-08 2006-01-15 Cit Alcatel Verfahren zur lastverteilung zwischen mehreren gemeinsamen betriebsmitteln in einem kommunikationsnetzwerk und netzwerk zur anwendung des verfahrens
US6820151B2 (en) * 2001-10-15 2004-11-16 Advanced Micro Devices, Inc. Starvation avoidance mechanism for an I/O node of a computer system
US7085846B2 (en) 2001-12-31 2006-08-01 Maxxan Systems, Incorporated Buffer to buffer credit flow control for computer network
US6934951B2 (en) * 2002-01-17 2005-08-23 Intel Corporation Parallel processor with functional pipeline providing programming engines by supporting multiple contexts and critical section
US20030202510A1 (en) * 2002-04-26 2003-10-30 Maxxan Systems, Inc. System and method for scalable switch fabric for computer network
US20040017813A1 (en) * 2002-05-15 2004-01-29 Manu Gulati Transmitting data from a plurality of virtual channels via a multiple processor device
US8015303B2 (en) * 2002-08-02 2011-09-06 Astute Networks Inc. High data rate stateful protocol processing
US8151278B1 (en) 2002-10-17 2012-04-03 Astute Networks, Inc. System and method for timer management in a stateful protocol processing system
US7814218B1 (en) 2002-10-17 2010-10-12 Astute Networks, Inc. Multi-protocol and multi-format stateful processing
US6981128B2 (en) * 2003-04-24 2005-12-27 International Business Machines Corporation Atomic quad word storage in a simultaneous multithreaded system
US7500239B2 (en) * 2003-05-23 2009-03-03 Intel Corporation Packet processing system
US7792963B2 (en) * 2003-09-04 2010-09-07 Time Warner Cable, Inc. Method to block unauthorized network traffic in a cable data network
US7664823B1 (en) * 2003-09-24 2010-02-16 Cisco Technology, Inc. Partitioned packet processing in a multiprocessor environment
US7130967B2 (en) * 2003-12-10 2006-10-31 International Business Machines Corporation Method and system for supplier-based memory speculation in a memory subsystem of a data processing system
US8892821B2 (en) * 2003-12-10 2014-11-18 International Business Machines Corporation Method and system for thread-based memory speculation in a memory subsystem of a data processing system
US7000048B2 (en) * 2003-12-18 2006-02-14 Intel Corporation Apparatus and method for parallel processing of network data on a single processing thread
US8051477B2 (en) * 2004-04-19 2011-11-01 The Boeing Company Security state vector for mobile network platform
US7496918B1 (en) * 2004-06-01 2009-02-24 Sun Microsystems, Inc. System and methods for deadlock detection
US7760637B1 (en) * 2004-06-10 2010-07-20 Alcatel Lucent System and method for implementing flow control with dynamic load balancing for single channelized input to multiple outputs
US7937709B2 (en) 2004-12-29 2011-05-03 Intel Corporation Synchronizing multiple threads efficiently
US7881332B2 (en) * 2005-04-01 2011-02-01 International Business Machines Corporation Configurable ports for a host ethernet adapter
US7697536B2 (en) * 2005-04-01 2010-04-13 International Business Machines Corporation Network communications for operating system partitions
US20060221953A1 (en) * 2005-04-01 2006-10-05 Claude Basso Method and apparatus for blind checksum and correction for network transmissions
US7903687B2 (en) * 2005-04-01 2011-03-08 International Business Machines Corporation Method for scheduling, writing, and reading data inside the partitioned buffer of a switch, router or packet processing device
US7508771B2 (en) * 2005-04-01 2009-03-24 International Business Machines Corporation Method for reducing latency in a host ethernet adapter (HEA)
US7706409B2 (en) * 2005-04-01 2010-04-27 International Business Machines Corporation System and method for parsing, filtering, and computing the checksum in a host Ethernet adapter (HEA)
US7492771B2 (en) * 2005-04-01 2009-02-17 International Business Machines Corporation Method for performing a packet header lookup
US7634622B1 (en) 2005-06-14 2009-12-15 Consentry Networks, Inc. Packet processor that generates packet-start offsets to immediately store incoming streamed packets using parallel, staggered round-robin arbitration to interleaved banks of memory
US8156259B2 (en) * 2005-07-21 2012-04-10 Elliptic Technologies Inc. Memory data transfer method and system
US20070168377A1 (en) * 2005-12-29 2007-07-19 Arabella Software Ltd. Method and apparatus for classifying Internet Protocol data packets
US8645960B2 (en) * 2007-07-23 2014-02-04 Redknee Inc. Method and apparatus for data processing using queuing
US8059650B2 (en) * 2007-10-31 2011-11-15 Aruba Networks, Inc. Hardware based parallel processing cores with multiple threads and multiple pipeline stages
US8838817B1 (en) * 2007-11-07 2014-09-16 Netapp, Inc. Application-controlled network packet classification
US8365045B2 (en) * 2007-12-10 2013-01-29 NetCee Systems, Inc. Flow based data packet processing
US8694997B2 (en) * 2007-12-12 2014-04-08 University Of Washington Deterministic serialization in a transactional memory system based on thread creation order
US8739163B2 (en) * 2008-03-11 2014-05-27 University Of Washington Critical path deterministic execution of multithreaded applications in a transactional memory system
US8566833B1 (en) 2008-03-11 2013-10-22 Netapp, Inc. Combined network and application processing in a multiprocessing environment
US20100161853A1 (en) * 2008-12-22 2010-06-24 Curran Matthew A Method, apparatus and system for transmitting multiple input/output (i/o) requests in an i/o processor (iop)
US8656397B2 (en) * 2010-03-30 2014-02-18 Red Hat Israel, Ltd. Migrating groups of threads across NUMA nodes based on remote page access frequency
WO2011130604A1 (fr) * 2010-04-16 2011-10-20 Massachusetts Institute Of Technology Migration d'exécution
US8453120B2 (en) 2010-05-11 2013-05-28 F5 Networks, Inc. Enhanced reliability using deterministic multiprocessing-based synchronized replication
US9336146B2 (en) * 2010-12-29 2016-05-10 Empire Technology Development Llc Accelerating cache state transfer on a directory-based multicore architecture
WO2012106429A1 (fr) * 2011-02-03 2012-08-09 L3 Communications Corporation Générateur de paquets pour moteur de tramage destiné à être utilisé dans un processeur graphique
US8566494B2 (en) * 2011-03-31 2013-10-22 Intel Corporation Traffic class based adaptive interrupt moderation
KR101892273B1 (ko) * 2011-10-12 2018-08-28 삼성전자주식회사 스레드 프로그레스 트래킹 방법 및 장치
EP2867769A4 (fr) * 2012-06-29 2016-12-21 Intel Corp Procédés et systèmes d'identification et de migration de processus élémentaires parmi des noeuds de système sur la base de mesures de performances du système
US9621633B2 (en) * 2013-03-15 2017-04-11 Intel Corporation Flow director-based low latency networking
US9618848B2 (en) 2014-02-24 2017-04-11 Tokyo Electron Limited Methods and techniques to use with photosensitized chemically amplified resist chemicals and processes
US9483272B2 (en) * 2014-09-30 2016-11-01 Freescale Semiconductor, Inc. Systems and methods for managing return stacks in a multi-threaded data processing system
US10079695B2 (en) 2015-10-28 2018-09-18 Citrix Systems, Inc. System and method for customizing packet processing order in networking devices
US10389643B1 (en) 2016-01-30 2019-08-20 Innovium, Inc. Reflected packets
US10447578B1 (en) * 2016-03-02 2019-10-15 Innovium, Inc. Redistribution policy engine
US10735339B1 (en) 2017-01-16 2020-08-04 Innovium, Inc. Intelligent packet queues with efficient delay tracking
US11075847B1 (en) 2017-01-16 2021-07-27 Innovium, Inc. Visibility sampling
US10564979B2 (en) 2017-11-30 2020-02-18 International Business Machines Corporation Coalescing global completion table entries in an out-of-order processor
US10564976B2 (en) 2017-11-30 2020-02-18 International Business Machines Corporation Scalable dependency matrix with multiple summary bits in an out-of-order processor
US10802829B2 (en) 2017-11-30 2020-10-13 International Business Machines Corporation Scalable dependency matrix with wake-up columns for long latency instructions in an out-of-order processor
US10922087B2 (en) 2017-11-30 2021-02-16 International Business Machines Corporation Block based allocation and deallocation of issue queue entries
US10901744B2 (en) 2017-11-30 2021-01-26 International Business Machines Corporation Buffered instruction dispatching to an issue queue
US10942747B2 (en) 2017-11-30 2021-03-09 International Business Machines Corporation Head and tail pointer manipulation in a first-in-first-out issue queue
US10884753B2 (en) 2017-11-30 2021-01-05 International Business Machines Corporation Issue queue with dynamic shifting between ports
US10929140B2 (en) 2017-11-30 2021-02-23 International Business Machines Corporation Scalable dependency matrix with a single summary bit in an out-of-order processor
US10572264B2 (en) 2017-11-30 2020-02-25 International Business Machines Corporation Completing coalesced global completion table entries in an out-of-order processor
US11210104B1 (en) * 2020-09-11 2021-12-28 Apple Inc. Coprocessor context priority
US11784932B2 (en) 2020-11-06 2023-10-10 Innovium, Inc. Delay-based automatic queue management and tail drop
US11621904B1 (en) 2020-11-06 2023-04-04 Innovium, Inc. Path telemetry data collection
CN113515502B (zh) * 2021-07-14 2023-11-21 重庆度小满优扬科技有限公司 数据迁移方法、装置、设备以及存储介质

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5260935A (en) * 1991-03-01 1993-11-09 Washington University Data packet resequencer for a high speed data switch
US5485173A (en) * 1991-04-01 1996-01-16 In Focus Systems, Inc. LCD addressing system and method
EP0680634B1 (fr) * 1993-01-21 1997-05-14 Apple Computer, Inc. Appareil et procede de sauvegarde de donnees a partir de dispositifs de memorisation interne interconnectes
IT1288076B1 (it) * 1996-05-30 1998-09-10 Antonio Esposito Multicalcolatore elettronico numerico parallelo multiprocessore a ridondanza di processori accoppiati
US5872941A (en) * 1996-06-05 1999-02-16 Compaq Computer Corp. Providing data from a bridge to a requesting device while the bridge is receiving the data
US6298386B1 (en) * 1996-08-14 2001-10-02 Emc Corporation Network file server having a message collector queue for connection and connectionless oriented protocols
US6349297B1 (en) * 1997-01-10 2002-02-19 Venson M. Shaw Information processing system for directing information request from a particular user/application, and searching/forwarding/retrieving information from unknown and large number of information resources
US6064987A (en) * 1997-03-21 2000-05-16 Walker Digital, Llc Method and apparatus for providing and processing installment plans at a terminal
US6035348A (en) * 1997-06-30 2000-03-07 Sun Microsystems, Inc. Method for managing multiple ordered sets by dequeuing selected data packet from single memory structure
US6330584B1 (en) * 1998-04-03 2001-12-11 Mmc Networks, Inc. Systems and methods for multi-tasking, resource sharing and execution of computer instructions
US6111673A (en) * 1998-07-17 2000-08-29 Telcordia Technologies, Inc. High-throughput, low-latency next generation internet networks using optical tag switching
US6243778B1 (en) * 1998-10-13 2001-06-05 Stmicroelectronics, Inc. Transaction interface for a data communication system
US6560629B1 (en) * 1998-10-30 2003-05-06 Sun Microsystems, Inc. Multi-thread processing
US7257814B1 (en) * 1998-12-16 2007-08-14 Mips Technologies, Inc. Method and apparatus for implementing atomicity of memory operations in dynamic multi-streaming processors
US6542921B1 (en) * 1999-07-08 2003-04-01 Intel Corporation Method and apparatus for controlling the processing priority between multiple threads in a multithreaded processor
US7421572B1 (en) * 1999-09-01 2008-09-02 Intel Corporation Branch instruction for processor with branching dependent on a specified bit in a register
US7546444B1 (en) * 1999-09-01 2009-06-09 Intel Corporation Register set used in multithreaded parallel processor architecture
US6674720B1 (en) * 1999-09-29 2004-01-06 Silicon Graphics, Inc. Age-based network arbitration system and method
US6625654B1 (en) * 1999-12-28 2003-09-23 Intel Corporation Thread signaling in multi-threaded network processor
US7042887B2 (en) * 2000-02-08 2006-05-09 Mips Technologies, Inc. Method and apparatus for non-speculative pre-fetch operation in data packet processing
US20020095400A1 (en) * 2000-03-03 2002-07-18 Johnson Scott C Systems and methods for managing differentiated service in information management environments
US20020065864A1 (en) * 2000-03-03 2002-05-30 Hartsell Neal D. Systems and method for resource tracking in information management environments
US20020120741A1 (en) * 2000-03-03 2002-08-29 Webb Theodore S. Systems and methods for using distributed interconnects in information management enviroments
US6831893B1 (en) * 2000-04-03 2004-12-14 P-Cube, Ltd. Apparatus and method for wire-speed classification and pre-processing of data packets in a full duplex network
US7093109B1 (en) * 2000-04-04 2006-08-15 International Business Machines Corporation Network processor which makes thread execution control decisions based on latency event lengths
WO2001097020A1 (fr) 2000-06-12 2001-12-20 Clearwater Networks, Inc. Procede et appareil de mise en oeuvre d'une atomicite d'operations de memoire dans des processeurs multi-flux dynamiques
AU2001282688A1 (en) * 2000-06-14 2001-12-24 Sun Microsystems, Inc. Packet transmission scheduler
US7222268B2 (en) * 2000-09-18 2007-05-22 Enterasys Networks, Inc. System resource availability manager
US7080238B2 (en) * 2000-11-07 2006-07-18 Alcatel Internetworking, (Pe), Inc. Non-blocking, multi-context pipelined processor
US6665755B2 (en) * 2000-12-22 2003-12-16 Nortel Networks Limited External memory engine selectable pipeline architecture
US7131125B2 (en) * 2000-12-22 2006-10-31 Nortel Networks Limited Method and system for sharing a computer resource between instruction threads of a multi-threaded process
US7095715B2 (en) * 2001-07-02 2006-08-22 3Com Corporation System and method for processing network packet flows
US7114011B2 (en) * 2001-08-30 2006-09-26 Intel Corporation Multiprocessor-scalable streaming data server arrangement
US6981110B1 (en) * 2001-10-23 2005-12-27 Stephen Waller Melvin Hardware enforced virtual sequentiality

Also Published As

Publication number Publication date
US20100202292A1 (en) 2010-08-12
EP1436724A4 (fr) 2007-10-03
US7360217B2 (en) 2008-04-15
WO2003030012A1 (fr) 2003-04-10
SG155038A1 (en) 2009-09-30
US20030069920A1 (en) 2003-04-10
EP1436724A1 (fr) 2004-07-14
IL184739A (en) 2009-09-01
IL161107A (en) 2010-03-28
IL184739A0 (en) 2007-12-03
US20050243734A1 (en) 2005-11-03

Similar Documents

Publication Publication Date Title
IL184739A (en) Multi-threaded packet processing engine for stateful packet processing
SG107568A1 (en) Trusted internet clipboard
AU2002331645A1 (en) Extended instruction set for packet processing applications
IL153156A0 (en) Plasma processing device
IL153154A0 (en) Plasma processing device
GB2374756B (en) Image processing
EP1221798A3 (fr) Méthode et appareil de traitement des paquets
GB0130669D0 (en) Structural component
IL153153A0 (en) Plasma processing device
GB2380349B (en) Image processing method
EP1401013A4 (fr) Dispositif de traitement de plasma
GB0109753D0 (en) Image processing
GB0220887D0 (en) Image processing
AU2002343410A1 (en) Multi-threaded packet processing engine for stateful packet processing
GB0220398D0 (en) An osteoprosthesis component
AU2003256938A8 (en) Packet processing architecture
GB0130817D0 (en) Image processing
GB0126549D0 (en) An exhaust
AU2002339155A8 (en) Magnetic-powered engine
GB0109927D0 (en) Exhaust
GB0124557D0 (en) Late resolving instructions
AU2002308336A1 (en) Zero belt camshaft
GB0106619D0 (en) Improved cycle for vapour engines
TW547445U (en) Improved structure for environmental-protection processing barrel
TW496221U (en) Improved jig